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

 
Slava:

Вы почувствовали разницу между синхронной командой и асинхронной.

Могли бы Вы привести список асинхронных функций.

Если правильно понимаю, то Object и Chart-функции (какие еще?) все асинхронные. Тогда не совсем понятно, почему ChartGet выполняется быстрее ChartXY?

 
Slava:

Вы почувствовали разницу между синхронной командой и асинхронной.

Да уж... 
Но наблюдения показывают что эти функции весьма синхронны в своей асинхронности. :) 
Хорошо,  сформулирую вопрос разработчикам по другому: А есть ли возможность (или желание) переделать эти ассинхронные  функции в синхронные?
 
fxsaber:

Могли бы Вы привести список асинхронных функций.

Если правильно понимаю, то Object и Chart-функции (какие еще?) все асинхронные. Тогда не совсем понятно, почему ChartGet выполняется быстрее ChartXY?

Они тоже жутко тормозят, просто суть моего "быстрого" алгоритма сводится в тому, чтоб вычислять возможность не обращаться к функциям chart и обходиться без них. И как только "схватить" мышкой график в  моем примере и начать двигать его влево - вправо, вся скорость пропадает из за того, что начинают применяться chart функции из-за наступления события 
CHARTEVENT_CHART_CHANGE
 

Здравствуйте! Начал изучать MQL5 с https://www.mql5.com/ru/articles/100. Запустил код, получил ошибку 4756, посмотрел в документации - легче не стало. Ладно, подумал, что начну с простого (Alert/Print...). Одна из важнейших функций это OrderSend. Начал искать по форуму\документации как использовать OrderSend. Наткнулся на эту статью https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions, там увидел код на открытие позиции Buy. Получил ошибку 4756 и retcode 10030. 10030 - понял, что это свойство OrderSend, но не понял как нужно использовать это свойство (смотрел чужой код), а самое главное для чего нужно. Тогда открыл https://www.mql5.com/ru/docs/trading/ordersend, скопировал код, запустил, все отлично, заработало.
Но так и не понял, почему появляется ошибка 4756 и как от нее нужно избавляться, а также 10030. 

Посмотрел код между 

void OnTick(){
      //--- объявление и инициализация запроса и результата
      MqlTradeRequest request={0};
      MqlTradeResult  result={0};
      //--- параметры запроса
      request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции
      request.symbol   =Symbol();                              // символ
      request.volume   =0.1;                                   // объем в 0.1 лот
      request.type     =ORDER_TYPE_BUY;                        // тип ордера
      request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // цена для открытия
      request.deviation=5;                                     // допустимое отклонение от цены
      request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера
      //--- отправка запроса
      if(!OrderSend(request,result))
         PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки
         Alert(GetLastError());
      //--- информация об операции
      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
   }

и этим

uint SendRandomPendingOrder(long const magic_number) 
  { 
//--- готовим запрос 
   MqlTradeRequest request={0}; 
   request.action=TRADE_ACTION_PENDING;         // установка отложенного ордера 
   request.magic=magic_number;                  // ORDER_MAGIC 
   request.symbol=_Symbol;                      // инструмент 
   request.volume=0.1;                          // объем в 0.1 лот 
   request.sl=0;                                // Stop Loss не указан 
   request.tp=0;                                // Take Profit не указан    
//--- сформируем тип ордера 
   request.type=GetRandomType();                // тип ордера 
//---сформируем цену для отложенного ордера 
   request.price=GetRandomPrice(request.type);  // цена для открытия 
//--- отправим торговый приказ 
   MqlTradeResult result={0}; 
   OrderSend(request,result); 
//--- выведем в лог ответ сервера   
   Print(__FUNCTION__,":",result.comment); 
   if(result.retcode==10016) Print(result.bid,result.ask,result.price); 
//--- вернем код ответа торгового сервера 
   return result.retcode; 
  } 

Они по-моему практически идентичны, не вижу тех мест, в которых появляются эти ошибки (4756 и 10030). Ткните пальцем и объясните пожалуйста

 
damirqa:

Здравствуйте! Начал изучать MQL5 с https://www.mql5.com/ru/articles/100. Запустил код, получил ошибку 4756, посмотрел в документации - легче не стало. Ладно, подумал, что начну с простого (Alert/Print...). Одна из важнейших функций это OrderSend. Начал искать по форуму\документации как использовать OrderSend. Наткнулся на эту статью https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions, там увидел код на открытие позиции Buy. Получил ошибку 4756 и retcode 10030. 10030 - понял, что это свойство OrderSend, но не понял как нужно использовать это свойство (смотрел чужой код), а самое главное для чего нужно. Тогда открыл https://www.mql5.com/ru/docs/trading/ordersend, скопировал код, запустил, все отлично, заработало.
Но так и не понял, почему появляется ошибка 4756 и как от нее нужно избавляться, а также 10030. 

Посмотрел код между 

и этим

Они по-моему практически идентичны, не вижу тех мест, в которых появляются эти ошибки (4756 и 10030). Ткните пальцем и объясните пожалуйста


Используйте торговый класс CTrade - так Вы гарантированно сможете допустить минимум ошибок.

Пример отсылки торгового приказа на открытие Buy:

//+------------------------------------------------------------------+
//|                                                     Open Buy.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---
#include <Trade\Trade.mqh>
CTrade         m_trade;                      // trading object
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   m_trade.Buy(1.0); // open Buy position, volume 1.0 lot
  }
//+------------------------------------------------------------------+
Файлы:
Open_Buy.mq5  2 kb
 
Vladimir Karputov:

Используйте торговый класс CTrade - так Вы гарантированно сможете допустить минимум ошибок.

Пример отсылки торгового приказа на открытие Buy:


CTrade - является универсальным классом? То есть им возможно заменить другой любой код?

 
damirqa:

CTrade - является универсальным классом? То есть им возможно заменить другой любой код?


CTrade поставляется вместе с терминалом в Стандартная библиотека -> Торговые классы -> CTrade.

 
damirqa:

Они по-моему практически идентичны, не вижу тех мест, в которых появляются эти ошибки (4756 и 10030). Ткните пальцем и объясните пожалуйста

https://www.mql5.com/ru/search#!keyword=Unsupported%20filling%20mode

Поиск - MQL5.community
Поиск - MQL5.community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 

Пример из кодобазы


Есть несколько способов получить код в ME

  1. Загрузить его прямо из ME. Наверное, это удобно кому-то. Но мне - совсем нет.
  2. Загрузить файл на диск, скопировать его в MQL5-папку и открыть в ME. Чаще всего использую этот неудобный способ.
  3. Нажать кнопку "просмотр" и через копипасту (копирование - CTRL+A и CTRL+C) скинуть код в ME (CTRL+V). Самый быстрый и удобный способ.
Целесообразно ли сделать кнопку "копировать", как показано на скрине?

 

В тестере МТ5 объект "Поле ввода" OBJ_EDIT не позволяет редактировать значение в нём находящееся. Это так задумано или это баг?

В терминалах и тестере МТ4 редактируется, а вот в тестере МТ5 не хочет, вообще пропадает значение введённое в него программно при создании объекта.

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