Обсуждение статьи "Пошаговое руководство по написанию советников в MQL5 для начинающих" - страница 21

 

Привет всем,

Я совсем новичок в MQL5 (и FOREX, если уж на то пошло), но программист со стажем. Я открыл файл My_First_EA.mq5 и скомпилировал, но у меня нет функции Debug. Если я открываю любой из файлов примеров скриптов, то получаю опцию Debug. Также я получил предупреждение о том, что возвращаемое значение 'OrderSend' должно быть проверено. Что мне нужно сделать, чтобы получить функцию отладки?

Луис

 
louisd:

Привет всем,

Я совсем новичок в MQL5 (и FOREX, если уж на то пошло), но программист со стажем. Я открыл файл My_First_EA.mq5 и скомпилировал, но у меня нет функции Debug. Если я открываю любой из файлов примеров скриптов, то получаю опцию Debug. Также я получил предупреждение о том, что возвращаемое значение 'OrderSend' должно быть проверено. Что мне нужно сделать, чтобы получить функцию отладки?

Луис

Привет всем,

Разобрался со своей проблемой. Я создал новый проект с помощью мастера советников, а затем просто скопировал в него файл My_First_EA.mq5 и получил отладочную функциональность.

Луис

 
louisd:

Привет всем,

Разобрался со своей проблемой. Я создал новый проект с помощью мастера создания экспертов, а затем просто скопировал в него файл My_First_EA.mq5 и получил отладочную функциональность.

Луис

Но вы исправили предупреждение 'OrderSend должен быть проверен'?
 
Boobwood:

У меня ошибка 4756, я видел решение на странице 2, и я проверил оригинальный код, там был ZeroMemory(mrequest); в самой строке 218. но у меня все еще ошибка 4756.


Я также все еще имею эту ошибку, сделав оба предложенных исправления:

ZeroMemory(mrequest);

а также

if(Buy_opened || Sell_opened)

Пожалуйста, может ли кто-нибудь помочь с ошибкой 4756? Кажется, что он не может разместить ордер на покупку.

 
Tchuso:

Здравствуйте, я получаю ошибку:

возвращаемое значение 'OrderSend' должно быть проверено в строках 213 и 259.


Вы решили эту проблему?

Доброе утро, Tchuso,

Со мной произошло то же самое. Я исправил это, заменив эти строки в обеих операциях на эти.

if(!OrderSend(mrequest,mresult))
PrintFormat("OrderSend error %d",GetLastError());

Подскажите, если нужна помощь, я тоже новичок.

С наилучшими пожеланиями!

 

Мне очень нравится пример кода, я тоже новичок в этом деле, я исправил код, как показано в комментариях, и он больше не выдает ошибок.

Проблема в том, что робот не открывает сделки, он даже не открывает сделку.

Кто-нибудь смог решить эту проблему?


Я использую опцию "Unico" в тестере стратегий: это моя ошибка?


Спасибо за ваше время и поддержку
 


Я заметил, что робот пытается открыть ордера, но всегда выдает ошибку:


Exit:

2020.05.06 20:35:16.141 Core 1 2020.04.20 20:25:00 failed market sell 0.10 EURUSD sl: 1.08965 tp: 1.07665 [Invalid request].


Я изменил несколько вещей в коде, но это не работает, я добавляю код, который у меня есть:


Оригинал: mrequest.type_filling = "Я поставил его 3 способами, которые есть в документации".

 mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение приказа
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // последняя цена спроса
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Стоп-лосс
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Тейк-профит
         mrequest.symbol = _Symbol;                                            // валютная пара
         mrequest.volume = Lot;                                                 // количество лотов для торговли
         mrequest.magic = EA_Magic;                                             // Магическое число заказа
         mrequest.type = ORDER_TYPE_BUY;                                        // Заказ на покупку
         mrequest.type_filling = ORDER_FILLING_RETURN;                             // Тип исполнения заказа
         mrequest.deviation=100;                      
        



Tambien he probado este codigo:

 //--- объявление и инициализация запроса и результата
               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    =EA_Magic;                          // Магический номер заказа

               //--- отправка приложения
               if(!OrderSend(request,result))
               PrintFormat("OrderSend error %d",GetLastError());     // если запрос не удалось отправить, введите код ошибки
               //--- информация об операции
               PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
 
Libni Colina:


Я заметил, что робот пытается открыть ордера, но всегда выдает ошибку:


Exit:

2020.05.06 20:35:16.141 Core 1 2020.04.20 20:25:00 failed market sell 0.10 EURUSD sl: 1.08965 tp: 1.07665 [Invalid request].


Я изменил несколько вещей в коде, но это не работает, я добавляю код, который у меня есть:


Оригинал: mrequest.type_filling = "Я поставил его 3 способами, которые есть в документации".


Добавьте это в начало кода:

#include <Trade\Trade.mqh>

А затем, чтобы открыть операцию, просто введите это:

double volumen= 0.01; // Или любой другой объем, который вы хотите.

CTrade m_trade;

m_trade.Buy(volumen); // Покупка

m_trade.Sell(volumen); // Продает
 
Здравствуйте, спасибо за учебник, он был очень полезен. Но у меня возникло недопонимание, переменные New_Time объявляются и инициализируются функцией CopyTimes, но Old_Time сначала объявляется, но не инициализируется, а затем сравнивается с переменной New_Time, чтобы проверить, есть ли новый бар. Old_Time должна быть пустой. Не знаю, хорошо ли я все описал, но спасибо, что прочитали.
 

Здравствуйте,


Аналогично, у меня при тестировании возникла ошибка с кодом 4756 и сообщением "Запрос ордера на продажу не может быть завершен".

Пожалуйста, сообщите, как решить эту проблему.


Спасибо