Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 698

 
Vitaly Muzichenko:

Пока не устанете их писать

серьезно?))
 
multiplicator:
серьезно?))

Ага. Но как правило больше трех не пишут, так как такой код потом трудно читать, особенно если с момента написания прошло много времени. Лучше разбить эти множество вложенных if на отдельные функции. Или использовать оператор switch ... case

 
Artyom Trishkin:
MessageBox()

есть ли возможность сделать чтоб если кликнул после поступления нового тика, не появлялось новое окно а использовались значения первого окна?

void OnTick()
  {
 if (Orders()<1 && (1==message || !use_MessageBox)){
   ticket=OrderSend(Symbol(), OP_SELL, lot, Bid, slippage, Ask+stopLoss*Point, Bid-takeProfit*Point, "", magic, 0, Red); message=0; 
 } 
 if (Orders()<1 && (message==0 || message==2) && use_MessageBox){
 if(use_PlaySound) PlaySound ("tick");
 message=-2;
 message =MessageBox("Текст, содержащий сообщение для отображения", "Необязательный текст для отображения в заголовке", IDOK);
   }
if (Orders()<1 && (1==message || !use_MessageBox)){
   ticket=OrderSend(Symbol(), OP_SELL, lot, Bid, slippage, Ask+stopLoss*Point, Bid-takeProfit*Point, "", magic, 0, Red); message=0; 
 }

}
 
void Trailing()
{
   for (int i=OrdersTotal() - 1; i>=0; i--)
   {
      if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
      {
         if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
         {
            if (OrderType() == OP_BUY)
            {
               if (Bid - OrderOpenPrice() > TrailingStop*Point)
               {
                  if (OrderStopLoss() < Bid-Point*(TrailingStop+TrailingStep) || OrderStopLoss() == 0)
                  {
                     if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Blue))
                        Print("error order modify");
                  }
               }
            }
         }
      }
   }
   
   if (OrderType() == OP_SELL)
   {
      if (OrderOpenPrice() - Ask > TrailingStop*Point)
      {
         if (OrderStopLoss() > Ask + Point * (TrailingStop+TrailingStep) || OrderStopLoss() == 0 )
         {
            if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red))
               Print("error order modify");
         }
      }
   }
}
//--------------------------------------------------------

Добрый день, при тестах трейлинг работает как задумано, а в реале нет или через раз, периодически спамит ошибкой OrderModify error 4108, не как не пойму что не так, поправте пожалуйста, я так понимаю советник не верно выбирает ордера для модификации.

Опишу советник:

При пересечении двух МА открыть 2 позиции, одну короткую, одну длинную по магику. Короткая закрывается либо по тейку либо по обратному пересечению МА, длинная должна тралица. Выбор длинной позиции для трала происходит по магику.

Возможно у меня ошибка в часте кода по открытию поз. написал как смог...:

//BUY
   if (fast1>slow1&&fast2<slow2)
     {
      if (StopLoss_1>0)   sl=NormalizeDouble(Bid-StopLoss_1*Point,Digits);   else sl=0;
      if (TakeProfit_1>0) tp=NormalizeDouble(Ask+TakeProfit_1*Point,Digits); else tp=0;
      closeshrts();
      OrderSend(Symbol(),OP_BUY,Lts,NormalizeDouble(Ask,Digits),5,sl,tp,NULL,0,0,Blue);
     }
   //BUY_2
   if (fast1>slow1&&fast2<slow2)  
     {
      if (StopLoss_2>0)   sl=NormalizeDouble(Bid-StopLoss_2*Point,Digits);   else sl=0;
      if (TakeProfit_2>0) tp=NormalizeDouble(Ask+TakeProfit_2*Point,Digits); else tp=0; 
      closeshrts();
      OrderSend(Symbol(),OP_BUY,Lts,NormalizeDouble(Ask,Digits),5,sl,tp,NULL,MagicNumber,0,Blue);
     }  
     
   //SELL
   if(fast1<slow1&&fast2>slow2)
     {
      if (TakeProfit_1>0) sl=NormalizeDouble(Ask+StopLoss_1*Point,Digits);   else sl=0;
      if (StopLoss_1>0)   tp=NormalizeDouble(Bid-TakeProfit_1*Point,Digits); else tp=0;
      closelongs();
      OrderSend(Symbol(),OP_SELL,Lts,NormalizeDouble(Bid,Digits),5,sl,tp,NULL,0,0,Red);
     }
   //SELL_2
   if(fast1<slow1&&fast2>slow2)
     {
      if (TakeProfit_2>0) sl=NormalizeDouble(Ask+StopLoss_2*Point,Digits);   else sl=0;
      if (StopLoss_2>0)   tp=NormalizeDouble(Bid-TakeProfit_2*Point,Digits); else tp=0;
      closelongs();
      OrderSend(Symbol(),OP_SELL,Lts,NormalizeDouble(Bid,Digits),5,sl,tp,NULL,MagicNumber,0,Red);
     } 

Не знаю, возможно стоит писать здесь открытие ордеров через цикл?  И как правильно написать что бы были корректные стопы и тейкпрофиты? как у меня написано - работает только на селл, на бай ставит стоп на 0

Направте на путь истинный пожалуйста))
 

 
Здравствуйте .Знакомый просил задать вопрос про алфавит MQL 4 :
Так что Кириллица - русские буквы входят в состав алфавита?
И еще знак вопроса ???? входит ли в множество символов алфавита?????
и обратная наклонная черта \\\\\\\ он то как входит или нет
 
входит.
 
Alexander Zhmurenko:
входит.

Можно подробно - что входит ?   То что я написал - это цитата знакомого  . Я её просто скопировал и суда  вставил . Он пытается меня уму разуму  MQL научить . Ну а я скрежетаю мозгами . так что пожалуйста напишите что именно входит ?

а ) вопросительный знак ( ? )

б )  обратная наклонная черта ( \\  )

 
Zvezdochet:

Можно подробно - что входит ?   То что я написал - это цитата знакомого  . Я её просто скопировал и суда  вставил . Он пытается меня уму разуму  MQL научить . Ну а я скрежетаю мозгами . так что пожалуйста напишите что именно входит ?

а ) вопросительный знак ( ? )

б )  обратная наклонная черта ( \\  )

Использование кириллицы - таки недокументированная возможность

Допустимые символы при написании идентификатора: цифры 0-9, латинские прописные и строчные буквы а-z и А-Z, распознаваемые как разные символы, символ подчеркивания (_). Первый символ не может быть цифрой.

syntax.

 
int OnInit()
  {
//---
   color желтый = clrAqua;
//---
   return(INIT_SUCCEEDED);
  }
переменные могут быть и такими
 

Здравствуйте, подскажите пожалуйста, почему в сомменте не выводит ZigD[0]

   for(ww = 0; ww <= Bars-1; ww++)
  {
      zzz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, ww);
      
           if(zzz > 0.0)   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }   
Причина обращения: