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

 
MrBrooklin #:

На сайте - нигде! Ищите брокеров, которые предоставляют торговлю на терминале МТ4. В поиске так и набирайте - брокер терминал MT4.

С уважением, Владимир.

Спасибо!
 

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

я правильно понял? с помощью 

bool  ChartNavigate( 
   long                  chart_id,     // идентификатор графика 
   ENUM_CHART_POSITION   position,     // позиция 
   int                   shift=0       // значение сдвига 
   );

вычислить от текущей даты - нужную и указать кол-во баров для сдвига

 

Всем добрый день. Пишу трал по параболику. Написал вот таким макаром.

  //--ТРАЛ ПАРАБОЛИК НАЧАЛО-----------------------------------------------------------------------------------------------+
  int tral= Tral_parabolik;
  double sar= iCustom(Symbol(), Period_for_work_tral_po_parabolik, "Parabolic", Step_tral_parabolik, Max_tral_parabolik, 1);
  for(int pos= 0; pos< OrdersTotal(); pos++)
  {//--ФОР НАЧАЛО-----------------------------------------------------------------------------------------------+
  if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
  if(OrderSymbol()== _Symbol)
  {
  if(OrderType()== OP_SELL)
  {
  if(OrderOpenPrice()> Ask+ tral*Point && OrderOpenPrice()> sar)
  {
  if(OrderStopLoss()!= sar && sar> Ask)
  {
  if(OrderModify(OrderTicket(),
   OrderOpenPrice(),
    NormalizeDouble(sar, Digits),
     OrderTakeProfit(),0,clrBlack))
     {
     
     PrintFormat("ORDER SELL MODIFY ", GetLastError());
     }
  }
  }
  }
  // BUY
  if(OrderType()== OP_BUY)
  {
  if(OrderOpenPrice()< Bid+ tral*Point && OrderOpenPrice()< sar)
  {
  if(OrderStopLoss()!= sar && sar< Bid)
  {
  if(OrderModify(OrderTicket(),
   OrderOpenPrice(),
    NormalizeDouble(sar, Digits),
     OrderTakeProfit(),0,clrBlack))
     {
     
     PrintFormat("ORDER BUY MODIFY ", GetLastError());
     }
  }
  }
  }
  }
  }//---ФОР КОНЕЦ----------------------------------------------------------------------------------------------+
  //-----ТРАЛ ПАРАБОЛИК КОНЕЦ--------------------------------------------------------------------------------------------+

 при тесте в самом начале было пятнадцать ошибок 130, а потом пошли ошибки 1.

Что я делаю не так? Как исправить код, чтобы этих ошибок не было? В исправленном варианте отметьте пожалуйста цветом место исправления. p/s в переменную tral передаю значение 700… при 700 ошибка 130 и 1 чередуется.

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - Попробуйте провести поиск события, на предмет отработки первого отложенного ордера.
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - Попробуйте провести поиск события, на предмет отработки первого отложенного ордера.
  • 2023.09.14
  • www.mql5.com
Ищите брокеров, которые предоставляют торговлю на терминале МТ4. ну не могу я переделать весь свой советник с MQL4 в MQL5. потом по мере потребности копировать из него данные при условии знакомства с MQL или C вам самому там дел на один вечер
 
DanilaMactep #:

Всем добрый день. Пишу трал по параболику

Для начала попробуйте так

  {//--ФОР НАЧАЛО-----------------------------------------------------------------------------------------------+
  if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
  if(OrderSymbol()== _Symbol)
  {
  if(OrderType()== OP_SELL)
  {
  if(OrderOpenPrice()> Ask+ tral*Point && OrderOpenPrice()< sar)
  {
  if((OrderStopLoss()> sar || OrderStopLoss()== 0) && sar> Ask)
  {
  if(OrderModify(OrderTicket(),
   OrderOpenPrice(),
    NormalizeDouble(sar, Digits),
     OrderTakeProfit(),0,clrBlack))
     {
     
     PrintFormat("ORDER SELL MODIFY ", GetLastError());
     }
  }
  }
  }
  // BUY
  if(OrderType()== OP_BUY)
  {
  if(OrderOpenPrice()< Bid+ tral*Point && OrderOpenPrice()> sar)
  {
  if((OrderStopLoss()< sar || OrderStopLoss()== 0) && sar< Bid)
  {
  if(OrderModify(OrderTicket(),
   OrderOpenPrice(),
    NormalizeDouble(sar, Digits),
     OrderTakeProfit(),0,clrBlack))
     {
     
     PrintFormat("ORDER BUY MODIFY ", GetLastError());
     }
  }
  }
  }
  }
  }//---ФОР КОНЕЦ--
 
Tretyakov Rostyslav #:

Для начала попробуйте так

Прикрутил код- запуска ютест- ошибка 1 так и присутствует, а 130 пропала- большое спасибо за цветовое выделение. Что ещё надо поправить? Выделите цветом тоже пожалуйста...

 
DanilaMactep #:

Прикрутил код- запуска ютест- ошибка 1 так и присутствует, а 130 пропала- большое спасибо за цветовое выделение. Что ещё надо поправить? Выделите цветом тоже пожалуйста...


Отправка запроса на модификацию уровней без фактического их изменения

Если по правилам торговой системы требуется модифировать отложенные ордера или открытые позиции, то перед отправкой торгового запроса на проведение транзакции необходимо убедиться, что запрашиваемая операции действительно изменит параметры ордера или позиции. Отправка торгового запроса, который фактически не делает никаких изменений, считается ошибкой. Торговый сервер в ответ на такое действие вернет код ответа TRADE_RETCODE_NO_CHANGES=10025 (MQL5) или код ERR_NO_RESULT=1 (MQL4)

Пример проверки на языке MQL4 вы найдете в скрипте Check_OrderLevels.mq4:
#property strict
//+------------------------------------------------------------------+
//| проверка новых значений уровней перед модификацией ордера        |
//+------------------------------------------------------------------+
bool OrderModifyCheck(int ticket,double price,double sl,double tp)
  {
//--- выберем ордер по тикету
   if(OrderSelect(ticket,SELECT_BY_TICKET))
     {
      //--- размер пункта и имя символа, по которому выставлен отложенный ордер
      string symbol=OrderSymbol();
      double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
      //--- проверим - есть ли изменения в цене открытия
      bool PriceOpenChanged=true;
      int type=OrderType();
      if(!(type==OP_BUY || type==OP_SELL))
        {
         PriceOpenChanged=(MathAbs(OrderOpenPrice()-price)>point);
        }
      //--- проверим - есть ли изменения в уровне StopLoss
      bool StopLossChanged=(MathAbs(OrderStopLoss()-sl)>point);
      //--- проверим - есть ли изменения в уровне Takeprofit
      bool TakeProfitChanged=(MathAbs(OrderTakeProfit()-tp)>point);
      //--- если есть какие-то изменения в уровнях
      if(PriceOpenChanged || StopLossChanged || TakeProfitChanged)
         return(true);  // ордер можно модифицировать      
      //--- изменений в уровнях открытия, StopLoss и Takeprofit нет
      else
      //--- сообщим об ошибке
         PrintFormat("Ордер #%d уже имеет уровни Open=%.5f SL=%.5f TP=%.5f",
                     ticket,OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit());
     }
//--- дошли до конца, изменений для ордера нет
   return(false);       // нет смысла модифицировать 
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- уровни цен для ордеров и позиций
   double priceopen,stoploss,takeprofit;
//--- тикет текущего ордера 
   int orderticket;
/*
   ... получим тикет ордeра и новые уровни StopLoss/Takeprofit/PriceOpen
*/
//--- проверим уровни перед модификацией ордера   
   if(OrderModifyCheck(orderticket,priceopen,stoploss,takeprofit))
     {
      //--- проверка прошла успешно
      OrderModify(orderticket,priceopen,stoploss,takeprofit,OrderExpiration());
     }
  }
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
  • www.mql5.com
Коды возврата торгового сервера - Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
DanilaMactep #:

Прикрутил код- запуска ютест- ошибка 1 так и присутствует, а 130 пропала- большое спасибо за цветовое выделение. Что ещё надо поправить? Выделите цветом тоже пожалуйста...

1

ERR_NO_RESULT

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


Это не страшно, грубо говоря, принт сработал раньше чем получил ответ

 
Galim_V #:


Отправка запроса на модификацию уровней без фактического их изменения

Если по правилам торговой системы требуется модифировать отложенные ордера или открытые позиции, то перед отправкой торгового запроса на проведение транзакции необходимо убедиться, что запрашиваемая операции действительно изменит параметры ордера или позиции. Отправка торгового запроса, который фактически не делает никаких изменений, считается ошибкой. Торговый сервер в ответ на такое действие вернет код ответа TRADE_RETCODE_NO_CHANGES=10025 (MQL5) или код ERR_NO_RESULT=1 (MQL4)

Спасибо за код. Одно но- из-за моих проблем со здоровьем я не могу разобраться в таком количестве чужого кода:-( Могли бы вы цветом выделить какая именно часть кода мне нужна чтобы трал норм заработал?
 
Tretyakov Rostyslav #:

1

ERR_NO_RESULT

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


Это не страшно, грубо говоря, принт сработал раньше чем получил ответ

1 ошибка не страшно, а с 130 как быть?
 
DanilaMactep #:
 я не могу разобраться в таком количестве чужого кода

Здесь только одна функция

bool OrderModifyCheck(int ticket,double price,double sl,double tp)

Которую следует использовать в качестве флага перед вашей

sar=NormalizeDouble(sar,Digits);
if(OderModifyCheck(OrderTicket(),OrderOpenPrice(),sar,0,OrderTakeProfit()))
{
if(OrderModify(OrderTicket(),
   OrderOpenPrice(),
    NormalizeDouble(sar, Digits),
     OrderTakeProfit(),0,clrBlack))
     {
     
     PrintFormat("ORDER SELL MODIFY ", GetLastError());
     }
...
}
 
Причина обращения: