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

 

Добрый день, нужна помощь с кодом, я новичок.

Проблема там такая - трайлинг работает только в направлении бай, а в селл не работает и код при запуске выдает в журнал ошибку "Ошибка модификации ордера. Код ошибки=4051"

Вот та часть кода отвечающая за тейлинг:

void Trailing(int tral)
{ 
  int Mag=OrderMagicNumber();  

  OrderSelect(Mag,MODE_TRADES);

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

//|                      tral buy                                    |

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

  if (OrderType()==OP_BUY)

  if(Bid-OrderOpenPrice()>Point*tral)
    {
    if(OrderStopLoss()<Bid-Point*tral) 
       { 
       bool ress= OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*tral,Digits),0,0,Blue); 
       if(!ress) 
          Print("Ошибка модификации ордера. Код ошибки=",GetLastError()); 
       else 
          Print("Цена Stop Loss ордера успешно модифицирована.");
       }
     }
//+------------------------------------------------------------------+

//|                      tral sell                                   |

//+------------------------------------------------------------------+   
  if (OrderType()==OP_SELL)
  if(OrderOpenPrice()-Ask>Point*tral)
    {
    if(OrderStopLoss()>Ask+Point*tral) 
       { 
       bool res= OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*tral,Digits),0,0,Red); 
       if(!res) 
          Print("Ошибка модификации ордера. Код ошибки=",GetLastError()); 
       else 
          Print("Цена Stop Loss ордера успешно модифицирована.");
       }
     }
}          

 
Ivan Rozhkov:

Добрый день, нужна помощь с кодом, я новичок, думаю не целесообразно будет вставлять сюда целый код.

Проблема там такая - трайлинг работает только в направлении бай, а в селл не работает и код при запуске выдает в журнал ошибку "Ошибка модификации ордера. Код ошибки=4051"

Кто сможет помочь разобраться в этом, напишите пожалуйста в ЛС 

Тема создана для обсуждения, а не кулуаров.
 
Artyom Trishkin:
Тема создана для обсуждения, а не кулуаров.

Прошу простить меня ^_^

Вставил часть кода, подскажите пожалуйста в чем ошибка

 
Ivan Rozhkov:

Прошу простить меня ^_^

Вставил часть кода, подскажите пожалуйста в чем ошибка

Поищите в этой ветке - я выкладывал шаблон трала. Где-то в середине.
 
Ivan Rozhkov:

Добрый день, нужна помощь с кодом, я новичок.

Проблема там такая - трайлинг работает только в направлении бай, а в селл не работает и код при запуске выдает в журнал ошибку "Ошибка модификации ордера. Код ошибки=4051"

Вот та часть кода отвечающая за тейлинг:

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

//|                      tral sell                                   |

//+------------------------------------------------------------------+   
  if (OrderType()==OP_SELL)
  if(OrderOpenPrice()-Ask>Point*tral)
    {
    if((OrderStopLoss()==0.0) || (OrderStopLoss()>Ask+Point*tral)) 
       { 
       bool res= OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*tral,Digits),0,0,Red); 
       if(!res) 
          Print("Ошибка модификации ордера. Код ошибки=",GetLastError()); 
       else 
          Print("Цена Stop Loss ордера успешно модифицирована.");
       }
     }
}          
и вообще не нравится мне вся конструкция, вот простой трейлинг по магику, почти такой же как Ваш:

bool trailingpos(int magic_,int trail_p)
  {
   bool res=true; double sl,slnew,tpips=trail_p*Point; int i,k=OrdersTotal();
   for(i=0;i<k;i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==magic_)
           {
            switch(OrderType())
              {
               case OP_BUY:
                  slnew=NormalizeDouble(Ask-tpips,Digits);
                  sl=OrderStopLoss();
                  if(OrderOpenPrice()<slnew)
                     if((sl<slnew) || (sl==0.0))
                       {
                        if(!OrderModify(OrderTicket(),OrderOpenPrice(),slnew,OrderTakeProfit(),OrderExpiration(),clrNONE))
                          {res=false; Print(__FUNCTION__,"OrderModify завершилась с ошибкой № ",GetLastError());}
                       }
                  break;
               case OP_SELL:
                  slnew=NormalizeDouble(Bid+tpips,Digits);
                  sl=OrderStopLoss();
                  if(OrderOpenPrice()>slnew)
                     if((sl>slnew) || sl==0.0)
                       {
                        if(!OrderModify(OrderTicket(),OrderOpenPrice(),slnew,OrderTakeProfit(),OrderExpiration(),clrNONE))
                          {res=false; Print(__FUNCTION__,"OrderModify завершилась с ошибкой № ",GetLastError());}
                       }
                  break;
              }
           }
        }
     }
   return(res);
  }
 
как правильно написать iCustom для ZigZag , что бы выдавал значения экстремумов?
 
02031986dima:
как правильно написать iCustom для ZigZag , что бы выдавал значения экстремумов?

Не нужно ничего писать, нужно придти, и взять

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Igor Makanu:

и вообще не нравится мне вся конструкция, вот простой трейлинг по магику, почти такой же как Ваш:

Спасибо большое за помощь, при добавлении вашего кода трейлинг почему то не работает, скорей всего я что то не так делаю((

if((OrderStopLoss()==0.0)

добавил и заработало, но постоянно спамит ошибками №1 и №4051

№1- Нет ошибки, но результат неизвестен

№4051-Недопустимое значение параметра функции

 

Здравствуйте, есть массив данных типа datatime,

как его вывести в читаемый файл?

Код:

int h=FileOpen("test",FILE_WRITE|FILE_CSV|FILE_UNICODE);
      FileWriteArray(h,timeHistory,0,WHOLE_ARRAY);
      FileClose(h);

Записывает только если есть флаг FILE_BIN, но записывает нечитаемое.

Если флага FILE_BIN нет, то файл пустой остается.

 
Karlinvain:

Здравствуйте, есть массив данных типа datatime,

как его вывести в читаемый файл?

Код:

Записывает только если есть флаг FILE_BIN, но записывает нечитаемое.

Если флага FILE_BIN нет, то файл пустой остается.

FileWriteArray

Примечание

Строковый массив может записываться только в файл типа TXT. В этом случае строки автоматически завершаются символами конца строки "\r\n". В зависимости от типа файла ANSI или UNICODE, строки преобразовываются к ansi-кодировке, или нет.

Причина обращения: