Ошибки, баги, вопросы - страница 3275

 
Alexander Puzanov #:
Во фриланс-сервисе, если топик работы в браузере открыт долго (не засекал сколько, сутки - точно), то потом при отправке сообщения всё виснет и долго и нудно набираемый текст с картинками восстановить уже невозможно. Проблему решать кажется начали - при последнем инциденте мелькнуло какое-то сообщение серверных скриптов и текст таки был отправлен и опубликован. Но только текст сообщения, прикреплённые файлы пропали. Это уже частичное решение, переотправить файлы - не большая проблема. Но разработчикам сайта таки стоит обратить внимание

там еще может быть проблема в браузере, в плагинах, в куках.

 
Print(EnumToString(SYMBOL_CALC_MODE_EXCH_FUTURES_FORTS)); 

даёт в журнале

SYMBOL_CALC_MODE_EXCH_OPTIONS
 

При наведении мышью на график оптимизации разве не показывалось раньше значение в указанном квадрате? Сейчас нет хинта - график слепой, т.к. даже не видно отличия плюса от минуса.


 
Stanislav Korotky #:

При наведении мышью на график оптимизации разве не показывалось раньше значение в указанном квадрате? Сейчас нет хинта - график слепой, т.к. даже не видно отличия плюса от минуса.


Только в четверке показывало. Во всяком случае лет пять так.

 
Здравствуйте, новичок в MQL5 да и в программирование в целом. Может кто подскажет в чём ошибка. По рынку открыть закрыть могу позицию. А выставить отложенный ордер выходит ошибка

10022

TRADE_RETCODE_INVALID_EXPIRATION

Неверная дата истечения ордера в запросе

Пробовал прописывать  ORDER_TIME_GTC и  ORDER_TIME_DAY не помогли

Использую демосчёт от открытие брокер. Им писал в поддержку, по коду не консультируют. Пример кода для отправки торгового приказа на выставление отложенного ордера не захотели давать. 

 //+------------------------------------------------------------------+
//|                                                MyFirstScript.mq5 |
//|                                                  dilettantcorner |
//|                                        dilettantcorner@gmail.com |
//+------------------------------------------------------------------+
#property copyright 
#property link      
#property version   "1.00"
#property script_show_inputs
#property strict

enum Direction {
                  opening_buy,   //Идем на Север
                  opening_sell   //Идем на Юг
               };

//--- input parameters
sinput uint     Magic_num = 0;               //Идентификатор робота
input Direction inDirection = opening_buy;   //Направление входа
input double    inOpenPrice = 0;             //Цена открытия. 0 - по рынку
input bool      UseSLTP = true;              //Использовать стоп-приказы
input uint      inStop = 150;                //Стоп-лосс в пунктах. 0 - нет
input uint      inTake = 150;                //Тейк-профит в пунктах. 0 - нет
input double    inLot = 2;                //Объем входа
input string    inComment = NULL;            //Комментарий
input int       Slipage = 10;                //Допустимое проскальзывание
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
int sl = 0, tp = 0;
if(UseSLTP)
{
   sl = (int)inStop;
   tp = (int)inTake;
}
long position = 0;
if (inDirection == opening_buy) position = Open_Buy_Pos(_Symbol,inLot,inOpenPrice,sl,tp,Magic_num,inComment,Slipage);
else if (inDirection == opening_sell) position = Open_Sell_Pos(_Symbol,inLot,inOpenPrice,sl,tp,Magic_num,inComment,Slipage);
if(UseSLTP && position > 0) Position_SLTP(position,inStop,inTake);
//---
  }
//+------------------------------------------------------------------+
long Open_Buy_Pos(string symbol,double lot, double open_price, uint stop_loss, uint take_profit, uint magic, string comment, int slipage)
{
   MqlTradeRequest reqwest;
   MqlTradeResult result;
   
   ZeroMemory(reqwest);
   ZeroMemory(result);
   reqwest.symbol = symbol;
   double current_ask = SymbolInfoDouble(reqwest.symbol,SYMBOL_ASK);
   if (open_price <= 0) 
   {
      reqwest.action = TRADE_ACTION_DEAL;
      reqwest.type = ORDER_TYPE_BUY;
      reqwest.price = current_ask;
      reqwest.sl = 0;
      reqwest.tp = 0;
   }
   else
   {
      reqwest.action = TRADE_ACTION_PENDING;
      reqwest.type_time = ORDER_TIME_GTC;
      if(stop_loss > 0) reqwest.sl = NormalizeDouble(reqwest.price - stop_loss * _Point,_Digits);
      if(take_profit > 0) reqwest.tp = NormalizeDouble(reqwest.price + take_profit * _Point,_Digits);
      if (open_price > current_ask)
      {
         reqwest.type = ORDER_TYPE_BUY_STOP;
         reqwest.price = open_price;
      }
      else
      {
         reqwest.type = ORDER_TYPE_BUY_LIMIT;
         reqwest.price = open_price;
      }
   }
   reqwest.volume = lot;
   reqwest.type_filling = ORDER_FILLING_FOK;
   if(comment != NULL && comment != "") reqwest.comment = comment;
   if(magic > 0) reqwest.magic = magic;
   if(slipage > 0) reqwest.deviation = slipage;
   
   if(!OrderSend(reqwest,result)) Print("Позиция или ордер Бай не открыт. Ошибка №",result.retcode);
   else
   {
      ulong deal_ticket = result.deal;
      if(deal_ticket > 0)
      {
         if(HistoryDealSelect(deal_ticket))
         {
            long pos_ticket = HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);
            return pos_ticket;
         }
      }
   }
   
   return -1;
}
//+------------------------------------------------------------------+
long Open_Sell_Pos(string symbol,double lot, double open_price, uint stop_loss, uint take_profit, uint magic, string comment, int slipage)
{
   MqlTradeRequest reqwest;
   MqlTradeResult result;
   
   ZeroMemory(reqwest);
   ZeroMemory(result);
   reqwest.symbol = symbol;
   double current_bid = SymbolInfoDouble(reqwest.symbol,SYMBOL_BID);
   if (open_price <= 0) 
   {
      reqwest.action = TRADE_ACTION_DEAL;
      reqwest.type = ORDER_TYPE_SELL;
      reqwest.price = current_bid;
      reqwest.sl = 0;
      reqwest.tp = 0;
   }
   else
   {
      reqwest.action = TRADE_ACTION_PENDING;
      reqwest.type_time = ORDER_TIME_GTC;
      if(stop_loss > 0) reqwest.sl = NormalizeDouble(reqwest.price + stop_loss * _Point,_Digits);
      if(take_profit > 0) reqwest.tp = NormalizeDouble(reqwest.price - take_profit * _Point,_Digits);
      if (open_price > current_bid)
      {
         reqwest.type = ORDER_TYPE_SELL_LIMIT;
         reqwest.price = open_price;
      }
      else
      {
         reqwest.type = ORDER_TYPE_SELL_STOP;
         reqwest.price = open_price;
      }
   }
   reqwest.volume = lot;
   reqwest.type_filling = ORDER_FILLING_FOK;
   if(comment != NULL && comment != "") reqwest.comment = comment;
   if(magic > 0) reqwest.magic = magic;
   if(slipage > 0) reqwest.deviation = slipage;
   
   if(!OrderSend(reqwest,result)) Print("Позиция или ордер Селл не открыт. Ошибка №",result.retcode);
   else
   {
      ulong deal_ticket = result.deal;
      if(deal_ticket > 0)
      {
         if(HistoryDealSelect(deal_ticket))
         {
            long pos_ticket = HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);
            return pos_ticket;
         }
      }
   }
   
   return -1;
}
//+------------------------------------------------------------------+
bool Position_SLTP(ulong position,int SL,int TP)
{
   if(PositionSelectByTicket(position))
   {
      double pos_op = PositionGetDouble(POSITION_PRICE_OPEN);
      string pos_symb = PositionGetString(POSITION_SYMBOL);
      ulong pos_mag = PositionGetInteger(POSITION_MAGIC);
      ENUM_POSITION_TYPE pos_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
      
      int symb_digits = (int)SymbolInfoInteger(pos_symb,SYMBOL_DIGITS);
      double symb_point = SymbolInfoDouble(pos_symb,SYMBOL_POINT);
      
      MqlTradeRequest reqwest;
      MqlTradeResult result;
   
      ZeroMemory(reqwest);
      ZeroMemory(result);
      
      if(pos_type == POSITION_TYPE_BUY)
      {
         if(SL > 0) reqwest.sl = NormalizeDouble(pos_op - SL * symb_point,symb_digits);
         if(TP > 0) reqwest.tp = NormalizeDouble(pos_op + TP * symb_point,symb_digits);
      }
      else
      {
         if(SL > 0) reqwest.sl = NormalizeDouble(pos_op + SL * symb_point,symb_digits);
         if(TP > 0) reqwest.tp = NormalizeDouble(pos_op - TP * symb_point,symb_digits);
      }
      reqwest.position = position;
      reqwest.magic = pos_mag;
      reqwest.symbol = pos_symb;
      
      if(!OrderSend(reqwest,result)) Print("Позиция №",position," не была модифицирована. Ошибка№",result.retcode);
      else return true;
   }
   else Print("Позиция №",position," не найдена.");
   return false;
} 

 
Marseleza.Gab #:
Здравствуйте, новичок в MQL5 да и в программирование в целом. Может кто подскажет в чём ошибка. По рынку открыть закрыть могу позицию. А выставить отложенный ордер выходит ошибка

10022

TRADE_RETCODE_INVALID_EXPIRATION

Неверная дата истечения ордера в запросе

Пробовал прописывать  ORDER_TIME_GTC и  ORDER_TIME_DAY не помогли

Использую демосчёт от открытие брокер. Им писал в поддержку, по коду не консультируют. Пример кода для отправки торгового приказа на выставление отложенного ордера не захотели давать. 


Вставляйте правильно код -

----------------‌

MQL5.community - Памятка пользователя 

Кнопка  Исходный кодпредназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.

MQL5.community - Памятка пользователя
MQL5.community - Памятка пользователя
  • www.mql5.com
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.
 

В Открытии для лимитных использую:

ORDER_TIME_DAY и ORDER_FILLING_RETURN

Работает.

Для рыночных - ORDER_FILLING_IOC или ORDER_FILLING_FOK

 

Неправильная работа параметра request.price функции OnTradeTransaction().

Тестер стратегий: функция работает правильно, параметр не равен нулю.

Онлайн-торговля:

Instant Execution:  функция работает правильно, параметр не равен нулю.

Market Execution и Exchange Execution:  функция работает не правильно, параметр равен нулю.

Тоже самое касается параметра и trans.price
 
Sergey Golubev #:

Вставляйте правильно код -

----------------‌

MQL5.community - Памятка пользователя 

Кнопка  предназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.

Спасибо, искал вчера как так сделать, не нашёл, спасибо что объяснили.
 
Igor Semyonov #:

Неправильная работа параметра request.price функции OnTradeTransaction().

Тестер стратегий: функция работает правильно, параметр не равен нулю.

Онлайн-торговля:

Instant Execution:  функция работает правильно, параметр не равен нулю.

Market Execution и Exchange Execution:  функция работает не правильно, параметр равен нулю.

Тоже самое касается параметра и trans.price

Учиться, учиться и её раз учиться работать с функцией OnTradeTransaction().

Можно почитать тут и попользоваться поиском.

OnTradeTransaction(): нет Magic number, нет комментария, и & either-or символы?
OnTradeTransaction(): нет Magic number, нет комментария, и & either-or символы?
  • 2022.12.29
  • www.mql5.com
Привет, Я что-то делаю не так? Чтобы узнать, к какому типу относятся вызовы OnTradeTransaction(), я хотел бы использовать магическое число...
Причина обращения: