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

 
Мне нужна помощь не могу исправить ошибку в советники , хочу написать время входу в рынок и выходу чтобы можно было менять установки,
Файлы:
 
michael sedgley:
Со всеми изменениями в программировании на MQL5 необходима обновленная версия этого пошагового кода, если я копирую этот код, он больше не компилируется - есть ли версия с последними изменениями - большое спасибо.

Здравствуйте, Михаил,

Спасибо за ваш комментарий. Я рассмотрю ваше предложение и, если потребуется обновление кодов, оно будет сделано в ближайшее время.

 

Почему выводится код ошибки:10030?

Файлы:
2.png  74 kb
 

помогите, есть ли здесь кто-нибудь ?


почему выводится код ошибки:10030?

 

Прежде всего, спасибо за статью, она помогает мне начать программировать на mql5.

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

//--- Давайте работать с валютными парами с 5 или 3 значными ценами вместо 4

STP = StopLoss;

TKP = TakeProfit;

if(_Digits==5 || _Digits==3)

{

STP = STP*10;

TKP = TKP*10;

}

Эта часть изменяет значения тейк-профита и стоп-лосса, вызывая разницу между введенными значениями и реально используемыми.

Однако если я удалю две строки внутри if, то при отправке ордера на сервер часто возникает ошибка 10016 (недействительные стопы). Первая попытка выставить ордер проходит успешно, и я получаю 10009, но в большинстве последующих случаев я получаю 10016. Я отладил советник, и все стоп-лоссы и тейк-профиты кажутся в порядке с разницей в том, что стоп-лосс 30 или 300, а тейк-профит 100 или 1000 пибсов выше или ниже текущей цены.

Я не могу найти причину, по которой сервер выдает мне ошибку 10016, когда STP и TKP не умножаются на 10.

Кто-нибудь может объяснить мне, почему возникает эта ошибка или какова цель умножения на 10, когда _цифры равны 5 или 3?

Спасибо за помощь.

 
an you please guguqiaqia:

помогите, есть ли здесь кто-нибудь ?


почему выводится код ошибки:10030?

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

Не могли бы вы сообщить нам, как вы получаете ошибку?

 

eshelios.sr:


Прежде всего, спасибо за статью, она помогает мне начать программировать на mql5.

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

//--- Давайте работать с валютными парами с 5 или 3 значными ценами вместо 4

STP = StopLoss;

TKP = TakeProfit;

if(_Digits==5 || _Digits==3)

{

STP = STP*10;

TKP = TKP*10;

}

Эта часть изменяет значения тейк-профита и стоп-лосса, вызывая разницу между введенными значениями и реально используемыми.

Однако если я удалю две строки внутри if, то при отправке ордера на сервер часто возникает ошибка 10016 (недействительные стопы). Первая попытка выставить ордер проходит успешно, и я получаю 10009, но в большинстве последующих случаев я получаю 10016. Я отладил советник, и все стоп-лоссы и тейк-профиты кажутся в порядке с разницей в том, что стоп-лосс 30 или 300, а тейк-профит 100 или 1000 пибсов выше или ниже текущей цены.

Я не могу найти причину, по которой сервер выдает мне ошибку 10016, когда STP и TKP не умножаются на 10.

Кто-нибудь может объяснить мне, почему возникает эта ошибка или какова цель умножения на 10, когда _цифры равны 5 или 3?

Спасибо за помощь.

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

Во-первых, из вашего объяснения следует, что когда вы удалили эти строки кода, вы получили ошибку, а когда вы не умножили значения стоплосса/тейкпрофита на 10, вы получили ошибку? Это, я думаю, объясняет, что эти строки кода очень важны.

Вернемся к статье, в которой объяснялось, что эти строки кода необходимы, если вы используете график с 5 десятичными цифрами (0.XXXXX) или 3 десятичными цифрами (0.XXX) валютных пар.

Поэтому здесь мы хотим убедиться, что наш советник хорошо работает со всеми брокерами.Digits или Digits()возвращает количество десятичных цифр, определяющих точность цены текущего символа графика. Для 5-значного или 3-значного ценового графика мы умножаем стоп-лосс и тейк-профит на 10.

Смотрите примеры ниже:

Цена с 5 десятичными цифрами

5 - Десятичные цифры цены

3 - десятичные цифры цены

3 - цена в десятичных цифрах

Надеюсь, это ответило на ваш вопрос.

 
Samuel Olowoyo:

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

Не могли бы вы сообщить нам, как вы получаете ошибку?

шаг 1: скачайте этот пример кода.

шаг 2: скомпилируйте его в mql5.

шаг 3: в mt5откройте график eurusd 1m, затем нажмите "автоторговля".

шаг 4:установите символ разрыва в строке кода 223,224 и т.д..

шаг 5:нажмите кнопку "запустить отладку" в mt5, затем, покажите эту ошибку.

 
 guguqiaqia:

шаг 1: загрузите этот пример кода.

шаг 2: скомпилируйте его в mql5.

шаг 3:в mt5откройте график eurusd 1m, затем нажмите "автоторговля".

шаг 4:установите символ разрыва в строке кода 223,224 и т.д..

шаг 5:нажмите кнопку "запустить отладку" в mt5, затем, покажите эту ошибку.

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

Спасибо, что поделились своими шагами. Если я могу вернуть вас к коду,

if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
{
   Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
}
else
{
   Alert("The Buy order request could not be completed -error:",GetLastError());    // line 223
   ResetLastError();                                                                // line 224
   return;

Насколько я знаю, код сделал то, что должен был сделать. Вы получили ошибку, потому что ордер, который вы пытались разместить, был НЕ УСПЕШНЫМ, и это то, что строка 223 должна была сделать. Пожалуйста, прочитайте это - https://www.mql5.com/ru/docs/constants/errorswarnings/enum_trade_return_codes - чтобы понять, что означает ошибка (на самом деле, 10030 означает Неверныйтип заполнения ордера ).

Чтобы понять, что означает тип заполнения ордера -ORDER_FILLING_FOK -

mrequest.type_filling = ORDER_FILLING_FOK; // Order execution type  ( line 213 )

означает, пожалуйста, прочитайте https://www.mql5.com/ru/docs/constants/tradingconstants/orderproperties#enum_order_type_filling.

Надеюсь, это ответило на ваш вопрос.

 

Привет, Самуэль,

Я скачал код, установил его, запустил и понял, что он открывает ордера на покупку и продажу в основном на каждой свече, которая соответствует критериям (я использую H1 в качестве таймфрейма).

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

Файлы:
screen.jpg  417 kb