Помощь: Почему советник не закрывает сделку - страница 2

 
crossy:


Спасибо, onewithzachy,

Во-первых, я думаю, что у вас есть небольшая ошибка:

for(int cnt = OrdersTotal() -1 ; cnt >= 0; cnt--)

Вы должны добавить зеленую и жирную коррекцию.

Но я не понимаю, как следующая строка может нам помочь?

#include "..\libraries\stdlib.mq4"

Спасибо, Y.

Вы правы с подсчетом, однако, если мы напишем так, как я написал, OrderSelect() вернет false, а цикл for продолжит следующий подсчет.

Это включение выведет ошибку в этом коде ...

Print("failed to close buy position ", ErrorDescription(GetLastError())  ); 

... чтобы мы знали, почему ваш советник не закрывает ордера :(.

Вы также можете написать этот include следующим образом ...

#include <stdlib.mqh>

Пример есть в папке скриптов MetaEditor под названием trade.mq4.


Я полагаю, вы знаете, куда поместить include, верно? Поместите его поверх вашего советника (так же, как глобальную переменную или так же, как trade.mq4).

stdlib.mq4 находится в MetaEditor > Navigator Window (Ctrl + D) > вкладка files > папка libraries > stdlib.mq4.

Надеюсь, вы не возражаете, что я так подробно рассказал, потому что я не знаю, знаете ли вы уже или не знаете :)

 
onewithzachy:

Вы правы с подсчетом, однако, если мы напишем так, как я написал, OrderSelect() вернет false, и цикл for продолжит следующий подсчет.

Этот цикл выведет ошибку в этом коде...

... чтобы мы знали, почему ваш советник не закрывает ордера :(.

Вы также можете написать этот include следующим образом ...

Пример есть в папке скриптов MetaEditor под названием trade.mq4.


Я полагаю, вы знаете, куда поместить include, верно? Поместите его поверх вашего советника (так же, как глобальную переменную или так же, как trade.mq4).

stdlib.mq4 находится в MetaEditor > Navigator Window (Ctrl + D) > вкладка files > папка libraries > stdlib.mq4.

Надеюсь, вы не возражаете, что я так подробно рассказал, потому что я не знаю, знаете ли вы уже или не знаете :)


Спасибо, onewithzachy,

Я сделал так, как вы посоветовали, и жду правильной оценки. Я буду обновлять.

 
crossy:


Спасибо, onewithzachy,

Я сделал, как вы посоветовали, и жду правильной оценки. Я буду обновлять.

Mmm...., я не большой поклонник обратного тестирования, однако, RaptorUK предложил в другой теме(нажмите здесь), что мы можем отладить наш код, используя обратное тестирование.
 
onewithzachy:
Mmm...., я не большой поклонник обратного тестирования, однако, RaptorUK предложил в другой теме(нажмите здесь), что мы можем отладить наш код, используя обратное тестирование.


Советник многопарный, поэтому бэктестинг невозможен.

В любом случае, я могу получить соответствующую ситуацию очень быстро. Я уже получил результаты. Я буду обновлять.

Спасибо

 
crossy:


Советник является многопарным, поэтому бэктестинг невозможен.

Не бэктестинг... отладка... даже с советником, основанным на портфеле, отладка все еще возможна.
 

Спасибо, Раптор,

Я заметил, что ORDERSELECT является bool переменной, и иногда MT4 не удается

сделать это. Из-за этого onewithzachy рекомендовал сделать это:

for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
if(OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES) == true &&
OrderSymbol()==Pair &&
OrderType()==OP_BUY)
{
// код для закрытия
}
}

Мой вопрос: если ORDERSELECT ложный, как я могу сделать LOOP "cnt" снова, без пропусков...?

Надеюсь, вы меня поняли.

Y.

 
crossy:

Спасибо, Раптор,

Я заметил, что ORDERSELECT является bool переменной, и иногда MT4 не удается

сделать это. Из-за этого onewithzachy рекомендовал сделать это:

for(int cnt=0; cnt<OrdersTotal(); cnt++ )

Мой вопрос: если ORDERSELECT ложный, как я могу сделать LOOP "cnt" снова, без пропусков...?

Надеюсь, вы меня поняли.

Y.

Если вы закрываете заказы, вы должны вести обратный отсчет ... НЕ вверх.
 
RaptorUK:
Если вы закрываете ордера, вы ДОЛЖНЫ вести обратный отсчет... НЕ вверх.


Извините, Raptor, я просто сделал Copy_paste из предыдущего сообщения, но я изменил его в своем коде.

В любом случае, есть ли у вас идеи по поводу моего предварительного вопроса?

 
crossy:


Извините, Raptor, я просто сделал Copy_paste из предыдущего сообщения, но я изменил его в своем коде.

В любом случае, есть ли у вас какие-нибудь идеи по поводу моего предварительного вопроса?

Покажите свой код, и я смогу высказать свое мнение.
 
RaptorUK:
Покажите свой код, и я смогу высказать свое мнение.


Rap, Это 4016 строк кода....

В любом случае, мой вопрос технический. Когда-то я изучал FORTRAN, и там у вас были номера для нужных строк кода, так что вы могли сделать

"GO to 120", и код снова переходил к этой строке.

Здесь, если Orderselect равен FALSE, как советник может вернуться к строке кода: for(int cnt=OrdersTotal(); cnt > 0; cnt-- )

????