Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Установил MetaTrader 5? Узнай о нем подробно!
rvc
115
rvc 2015.09.05 15:23 

Добрый день умным людям! помогите советом. можно ли переписать советник так чтобы он вместо stop loss открывал отложенные ордера по направлению закрытия?

extern double       Lots =0.1;  //стартовый лот

extern double     Factor =2.0;  //множитель лота

extern int         Limit =5;    //ограничение количества умножений лота

extern int      StopLoss =100;  //уровень ограничения убытков

extern int    TakeProfit =100;  //уровень фиксации прибыли

extern int     StartType =0;    //тип стартового ордера, 0-BUY, 1-SELL

extern int         Magic =1000; //индивидуальный номер эксперта

//----

double lots_step;

//----

int ticket_buy;

int ticket_sell;

int lots_digits;

//+------------------------------------------------------------------+

//| expert initialization function                                   |

//+------------------------------------------------------------------+

int init()

  {

   ticket_buy=-1;

   ticket_sell=-1;

//----

   lots_step=MarketInfo(Symbol(),MODE_LOTSTEP);

//----

   if(lots_step==0.01)

      lots_digits=2;

//----

   if(lots_step==0.1)

      lots_digits=1;

//----

   if(lots_step==1.0)

      lots_digits=0;

//----

   for(int pos=OrdersTotal()-1;pos>=0;pos--)

      if(OrderSelect(pos,SELECT_BY_POS)==true)

         if(OrderMagicNumber()==Magic)

            if(OrderSymbol()==Symbol())

              {

               if(OrderType()==OP_BUY)

                 {

                  ticket_buy=OrderTicket();

                  break;

                 }

               //----

               if(OrderType()==OP_SELL)

                 {

                  ticket_sell=OrderTicket();

                  break;

                 }

              }

//----

   return(0);

  }

//+------------------------------------------------------------------+

//| expert deinitialization function                                 |

//+------------------------------------------------------------------+

int deinit()

  {return(0);}

//+------------------------------------------------------------------+

//| expert start function                                            |

//+------------------------------------------------------------------+

int start()

  {

   double price;

   double lots;

   double lots_test;

//----

   int slip;

   int ticket;

   int pos;

//----

//----открыть стартовый ордер BUY

   if(StartType==0)

      if(ticket_buy<0)

         if(ticket_sell<0)

           {

            ticket=OpenBuy(Lots);

            //----

            if(ticket>0)

               ticket_buy=ticket;

           }

//----

//----открыть следующий ордер BUY при положительном профите ордера BUY

   if(ticket_buy>0)

      if(ticket_sell<0)

         if(OrderSelect(ticket_buy,SELECT_BY_TICKET)==true)

            if(OrderCloseTime()>0)

               if(OrderProfit()>0.0)

                 {

                  ticket=OpenBuy(Lots);

                  //----

                  if(ticket>0)

                     ticket_buy=ticket;

                 }

//----

//----открыть следующий ордер SELL при отрицательном профите ордера BUY

   if(ticket_buy>0)

      if(ticket_sell<0)

         if(OrderSelect(ticket_buy,SELECT_BY_TICKET)==true)

            if(OrderCloseTime()>0)

               if(OrderProfit()<0.0)

                 {

                  lots=NormalizeDouble(MathCeil((OrderLots()*Factor)/lots_step)*lots_step,lots_digits);

                  lots_test=Lots;

                  //----

                  for(pos=0;pos<Limit;pos++)

                     lots_test=NormalizeDouble(MathCeil((lots_test*Factor)/lots_step)*lots_step,lots_digits);

                  //----

                  if(lots_test<lots)

                     lots=Lots;

                  //----

                  ticket=OpenSell(lots);

                  //----

                  if(ticket>0)

                    {

                     ticket_sell=ticket;

                     ticket_buy=-1;

                    }

                 }

//----

//----обслуживание виртуальных стопов ордера BUY

   if(ticket_buy>0)

      if(OrderSelect(ticket_buy,SELECT_BY_TICKET)==true)

         if(OrderCloseTime()==0)

            if(OrderOpenPrice()+TakeProfit*Point<=MarketInfo(Symbol(),MODE_BID))

              {

               price=MarketInfo(Symbol(),MODE_BID);

               slip=MarketInfo(Symbol(),MODE_SPREAD)*2;

               return(OrderClose(ticket_buy,OrderLots(),price,slip,Blue));

              }

//----

   if(ticket_buy>0)

      if(OrderSelect(ticket_buy,SELECT_BY_TICKET)==true)

         if(OrderOpenPrice()-StopLoss*Point>=MarketInfo(Symbol(),MODE_BID))

            if(OrderCloseTime()==0)

              {

               price=MarketInfo(Symbol(),MODE_BID);

               slip=MarketInfo(Symbol(),MODE_SPREAD)*2;

               return(OrderClose(ticket_buy,OrderLots(),price,slip,Blue));

              }

//----

//----открыть стартовый ордер SELL

   if(StartType==1)

      if(ticket_buy<0)

         if(ticket_sell<0)

           {

            ticket=OpenSell(Lots);

            //----

            if(ticket>0)

               ticket_sell=ticket;

           }

//----

//----открыть следующий ордер SELL при положительном профите ордера SELL

   if(ticket_buy<0)

      if(ticket_sell>0)

         if(OrderSelect(ticket_sell,SELECT_BY_TICKET)==true)

            if(OrderCloseTime()>0)

               if(OrderProfit()>0.0)

                 {

                  ticket=OpenSell(Lots);

                  //----

                  if(ticket>0)

                     ticket_sell=ticket;

                 }

//----

//----открыть следующий ордер BUY при отрицательном профите ордера SELL

   if(ticket_buy<0)

      if(ticket_sell>0)

         if(OrderSelect(ticket_sell,SELECT_BY_TICKET)==true)

            if(OrderCloseTime()>0)

               if(OrderProfit()<0.0)

                 {

                  lots=NormalizeDouble(MathCeil((OrderLots()*Factor)/lots_step)*lots_step,lots_digits);

                  lots_test=Lots;

                  //----

                  for(pos=0;pos<Limit;pos++)

                     lots_test=NormalizeDouble(MathCeil((lots_test*Factor)/lots_step)*lots_step,lots_digits);

                  //----

                  if(lots_test<lots)

                     lots=Lots;

                  //----

                  ticket=OpenBuy(lots);

                  //----

                  if(ticket>0)

                    {

                     ticket_buy=ticket;

                     ticket_sell=-1;

                    }

                 }

//----

//----обслуживание виртуальных стопов ордера SELL

   if(ticket_sell>0)

      if(OrderSelect(ticket_sell,SELECT_BY_TICKET)==true)

         if(OrderCloseTime()==0)

            if(OrderOpenPrice()-TakeProfit*Point>=MarketInfo(Symbol(),MODE_ASK))

              {

               price=MarketInfo(Symbol(),MODE_ASK);

               slip=MarketInfo(Symbol(),MODE_SPREAD)*2;

               return(OrderClose(ticket_sell,OrderLots(),price,slip,Red));

              }

//----

   if(ticket_sell>0)

      if(OrderSelect(ticket_sell,SELECT_BY_TICKET)==true)

         if(OrderCloseTime()==0)

            if(OrderOpenPrice()+StopLoss*Point<=MarketInfo(Symbol(),MODE_ASK))

              {

               price=MarketInfo(Symbol(),MODE_ASK);

               slip=MarketInfo(Symbol(),MODE_SPREAD)*2;

               return(OrderClose(ticket_sell,OrderLots(),price,slip,Red));

              }

//----

   return(0);

  }

//+------------------------------------------------------------------+

//| открыть ордер BUY                                                |

//+------------------------------------------------------------------+

int OpenBuy(double lots)

  {

   double price;

//----

   int slip;

//----

   price=MarketInfo(Symbol(),MODE_ASK);

   slip=MarketInfo(Symbol(),MODE_SPREAD)*2;

//----

   return(OrderSend(Symbol(),OP_BUY,lots,price,slip,0.0,0.0,"",Magic,0,Blue));

  }

//+------------------------------------------------------------------+

//| открыть ордер SELL                                               |

//+------------------------------------------------------------------+

int OpenSell(double lots)

  {

   double price;

//----

   int slip;

//----

   price=MarketInfo(Symbol(),MODE_BID);

   slip=MarketInfo(Symbol(),MODE_SPREAD)*2;

//----

   return(OrderSend(Symbol(),OP_SELL,lots,price,slip,0.0,0.0,"",Magic,0,Red));

  }

//+------------------------------------------------------------------+
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий