//+------------------------------------------------------------------+
//|                                        VisualOpenOrderWithMM.mq5 |
//|                                                      open source |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "open source"
#property link      "open source"

input double Risk = 0.02;

#include <Trade\Trade.mqh>

//create instance of the trade
CTrade trade;

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int OnStart()
  {
  //:::::::::::::::::::::::::::::::::::::::::::::
  double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
  double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
  //:::::::::::::::::::::::::::::::::::::::::::::::

//----
   double MinLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
   double MaxLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
   double Step   = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);

   double StopLoss  = ChartPriceOnDropped();
   double MoneyRisk = AccountInfoDouble(ACCOUNT_MARGIN_FREE) * Risk;
   double TickValue = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);

   double PointLoss;
   int cmd=0;
   double price;
   if(Ask>StopLoss)
   {
      //Open Long
      PointLoss = (Ask - StopLoss) / _Point;
      cmd = 1; // Buy
      price = Ask;
   }
   else
   {
      //Open Short
      PointLoss = (StopLoss - Bid) / _Point;
      cmd = -1; // Sell
      price = Bid;
   }

   double LotsRough = MoneyRisk / (TickValue * PointLoss);
   if(LotsRough<MinLot)
   {
      Print("Error. Not enough money!");
      return(0);
   }
   
   double Lots = MaxLot;
   for(double CheckedLot=MinLot; CheckedLot<=MaxLot; CheckedLot+=Step)
   {
      if(CheckedLot>LotsRough)
      {
         Lots = CheckedLot - Step;
         break;
      }
   }
   
   Print("Lots=",Lots);
   int ticket=-1;
   
   if(cmd==1)
    {
    ticket = trade.Buy(Lots,_Symbol,price,StopLoss, 0,NULL);
    if (ticket<0)
     {
      Print("Buy Error: ", GetLastError());
     }
    }
   
   if(cmd==-1)
    {
    ticket = trade.Sell(Lots,_Symbol,price,StopLoss, 0,NULL);
    if (ticket<0)
     {
      Print("Sell Error: ", GetLastError());
     }
    }
//----
   return(0);
  }
//+------------------------------------------------------------------+
