Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Задействуй с пользой свободные компьютеры. Подключись к MQL5 Cloud Network!
Alexander Zalesskiy
297
Alexander Zalesskiy 2013.05.10 16:25 

Идея советника в пересечении ценой средней СМА, после чего начинает работу трал

  

extern double lot=0.1;

  extern int MagicNumber=007;

  extern int TP=200;

  extern int SL=50;

  extern int Tral_dist=50;

  extern int Shag=40;

  extern int MA_Period=20;

  extern bool Use_shag=false;

  extern bool Use_bezubitok=false;

  

  

  

int start()

  {

  //================

   double tp,sl;

   if (Digits==3||Digits==5) {tp=TP*10*Point; sl=SL*10*Point;}

   else if (Digits==2||Digits==4) {tp=TP*Point; sl=SL*Point;}

   double MA=iMA(Symbol(),0,MA_Period,0,MODE_SMA,PRICE_CLOSE,0);

   if (OrdersTotal()==0)

   {

   //================Условия открытия ордеров======================================

   if (Close[1]>MA&&Volume[0]<2)

   OrderSend(Symbol(),OP_BUY,lot,Ask,20,Ask-sl,Ask+tp,NULL,MagicNumber,0,CLR_NONE);

   else if (Close[1]<MA&&Volume[0]<2)

   OrderSend(Symbol(),OP_SELL,lot,Bid,20,Bid+sl,Bid-tp,NULL,MagicNumber,0,CLR_NONE);

   }

   

   

   

 //=============================Вызов Трэйлинг Стопа====================================================================

   if (OrdersTotal()>0)

   

       

  Trailing_stop (MagicNumber,Symbol(),Tral_dist, Shag, Use_shag, Use_bezubitok);

   {

   double dist, shag;

   if(Digits==3||Digits==5) {dist=Tral_dist*10*Point; shag=Shag*10*Point;}

   else if (Digits==2||Digits==4) {dist=Tral_dist*Point;shag=Shag*Point;}

   for (int pos=0; pos<OrdersTotal(); pos++)

   {

   OrderSelect(pos, SELECT_BY_POS,MODE_TRADES);

   if (OrderMagicNumber()==MagicNumber && OrderSymbol()== Symbol())

   {

   if(OrderType()==OP_BUY)

   {

   if(!Use_shag&&!Use_bezubitok&&NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))

   OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);

   if(Use_shag&&!Use_bezubitok&&NormalizeDouble(Ask-OrderOpenPrice(),Digits)>=NormalizeDouble(shag,Digits)&&

   NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))

   OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);

   if(!Use_shag&&Use_bezubitok&&NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(OrderOpenPrice(),Digits)&&

   NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))

   OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);

   if(Use_shag&&Use_bezubitok&&NormalizeDouble(Ask-OrderOpenPrice(),Digits)>=NormalizeDouble(shag,Digits)&&

   NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(OrderOpenPrice(),Digits)&&

   NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))

   OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);

   }

   else if (OrderType()==OP_SELL)

   {

   if(!Use_shag&&!Use_bezubitok&&NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))

   OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);

   if(Use_shag&&!Use_bezubitok&&NormalizeDouble(OrderOpenPrice()-Bid,Digits)>=NormalizeDouble(shag,Digits)&&

   NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits)

   OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);

   if(!Use_shag&&Use_bezubitok&&NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits)&&

   NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))

   OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);

   if(Use_shag&&Use_bezubitok&&NormalizeDouble(OrderOpenPrice()-Bid,Digits)>=NormalizeDouble(shag,Digits)&&

   NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits)&&

   NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))

   OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);

   }

   }

   }

   }



   return(0);

  }

//+------------------------------------------------------------------+ 
Victor Nikolaev
Модератор
14078
Victor Nikolaev 2013.05.10 16:31  

Для вставки кода используйте кнопку SRC

И Вы принципиально фигурные скобки не ставите? 

Alexander Zalesskiy
297
Alexander Zalesskiy 2013.05.10 16:36  
  
  extern double lot=0.1;
  extern int MagicNumber=007;
  extern int TP=200;
  extern int SL=50;
  extern int Tral_dist=50;
  extern int Shag=40;
  extern int MA_Period=20;
  extern bool Use_shag=false;
  extern bool Use_bezubitok=false;
  
  
  
int start()
  {
  //================
   double tp,sl;
   if (Digits==3||Digits==5) {tp=TP*10*Point; sl=SL*10*Point;}
   else if (Digits==2||Digits==4) {tp=TP*Point; sl=SL*Point;}
   double MA=iMA(Symbol(),0,MA_Period,0,MODE_SMA,PRICE_CLOSE,0);
   if (OrdersTotal()==0)
   {
   //================Условия открытия ордеров======================================
   if (Close[1]>MA&&Volume[0]<2)
   OrderSend(Symbol(),OP_BUY,lot,Ask,20,Ask-sl,Ask+tp,NULL,MagicNumber,0,CLR_NONE);
   else if (Close[1]<MA&&Volume[0]<2)
   OrderSend(Symbol(),OP_SELL,lot,Bid,20,Bid+sl,Bid-tp,NULL,MagicNumber,0,CLR_NONE);
   }
   
   
   
 //=============================Вызов Трэйлинг Стопа====================================================================
   if (OrdersTotal()>0)
   
       
  Trailing_stop (MagicNumber,Symbol(),Tral_dist, Shag, Use_shag, Use_bezubitok);
   {
   double dist, shag;
   if(Digits==3||Digits==5) {dist=Tral_dist*10*Point; shag=Shag*10*Point;}
   else if (Digits==2||Digits==4) {dist=Tral_dist*Point;shag=Shag*Point;}
   for (int pos=0; pos<OrdersTotal(); pos++)
   {
   OrderSelect(pos, SELECT_BY_POS,MODE_TRADES);
   if (OrderMagicNumber()==MagicNumber && OrderSymbol()== Symbol())
   {
   if(OrderType()==OP_BUY)
   {
   if(!Use_shag&&!Use_bezubitok&&NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
   OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);
   if(Use_shag&&!Use_bezubitok&&NormalizeDouble(Ask-OrderOpenPrice(),Digits)>=NormalizeDouble(shag,Digits)&&
   NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
   OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);
   if(!Use_shag&&Use_bezubitok&&NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(OrderOpenPrice(),Digits)&&
   NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
   OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);
   if(Use_shag&&Use_bezubitok&&NormalizeDouble(Ask-OrderOpenPrice(),Digits)>=NormalizeDouble(shag,Digits)&&
   NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(OrderOpenPrice(),Digits)&&
   NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
   OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);
   }
   else if (OrderType()==OP_SELL)
   {
   if(!Use_shag&&!Use_bezubitok&&NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
   OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);
   if(Use_shag&&!Use_bezubitok&&NormalizeDouble(OrderOpenPrice()-Bid,Digits)>=NormalizeDouble(shag,Digits)&&
   NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits)
   OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);
   if(!Use_shag&&Use_bezubitok&&NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits)&&
   NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
   OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);
   if(Use_shag&&Use_bezubitok&&NormalizeDouble(OrderOpenPrice()-Bid,Digits)>=NormalizeDouble(shag,Digits)&&
   NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits)&&
   NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
   OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);
   }
   }
   }
   }

   return(0);
  }
//+------------------------------------------------------------------+

А где Вы имеете ввиду фигурные скобки? Я просто не могу найти эту брешь!

ktest0
631
ktest0 2013.05.10 18:33  

Это не брешь, это треш...

Расставляйте скобки так:

{

        {

                {

                        {

                        }

                }

        }

}

 и тогда станет понятно какая скобка и где пропущена.

Victor Nikolaev
Модератор
14078
Victor Nikolaev 2013.05.10 18:58  
ktest0:

Это не брешь, это треш...

Расставляйте скобки так:

 и тогда станет понятно какая скобка и где пропущена.

 


Пропущена была круглая скобка и одна фигурная не там стояла
locol91
270
locol91 2013.05.11 19:22  

Не совсем понятна вот эта конструкция

if (Digits==3||Digits==5) {tp=TP*10*Point; sl=SL*10*Point;}
   else if (Digits==2||Digits==4) {tp=TP*Point; sl=SL*Point;}

Зачем такое городить то?

Перевод на русский:

if - если

(Digits==3||Digits==5){tp=TP*10*Point; sl=SL*10*Point;}

 else - в любом другом случае:

if - если:

(Digits==2||Digits==4) {tp=TP*Point; sl=SL*Point;}

Кроме того здесь же и логическая ошибка. На мой взгляд. Наверно хотели сделать так

if (Digits==5) {tp=TP*10*Point; sl=SL*10*Point;}
   else  {tp=TP*Point; sl=SL*Point;}
Ну и далее косяков достаточно. Вызов функции трала откуда происходит? Само тело трала оформлено под отдельную функцию вроде, а сам вызов где?  И почему отдельная функция не обьявлена (double, int, void, bool или по другому) и вмонтирована в тело функции старт?
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий