Проблемы с закрытием, пожалуйста, помогите - страница 3

 

Привет всем
С помощью всех желающих симптом изменился.
Оператор ....if(OrderSelect(index, SELECT_BY_TICKET)) был изменен на...SELECT_BY_POS. Код далек от правильного. Программа продает, а затем закрывается сразу после одного пункта. Результат показывает, что нет ни SL, ни TP. Поэтому для проверки вменяемости я вставил в OrderSend SL и TP (500) за штуку. Никаких изменений. Все исполнения находятся в пределах 1 или 2 пунктов. Это становится интересным. Пока не знаю, почему! На одном 4-часовом баре происходит более тысячи исполнений.
Я буду исследовать, но любая помощь будет приветствоваться.

 

Здравствуйте, Айс.
Я только что написал, и обнаружил, что ты написал раньше меня. Что у тебя происходит?

 

Здравствуйте еще раз
Я пытаюсь немного переделать программу для лучшего понимания логики
Я бы хотел чтобы программа понравилась Вам

 
Ais wrote >>

Здравствуйте еще раз
Я пытаюсь немного переделать программу для лучшего понимания логики
Я бы хотел, чтобы программа радовала вас
.

Здравствуйте, Айс.
Вы так добры. Спасибо. Ваше время очень ценно. Рестайл, я уверен, порадует.
Я разгадал часть проблемы с момента моего последнего сообщения. Программа закрывается, но не так, как мне хочется.
Ключом к проблеме закрытия был тот факт, что я не смог правильно инициализировать ATR.
Я покажу вам "до" и "после" закрытия позиции на продажу.

Then....if (OrderClosePrice() >= OrderOpenPrice() + (ATR*2)
Теперь.....if (OrderClosePrice() >= OrderOpenPrice() + (40*Point)... Это закроет позицию на продажу.

Это не то, как я хотел, чтобы работала программа. Но в целях тестирования я вставил новый код.
Он помогает доказать, что проблема в ATR. Должно быть, я неправильно инициализировал ATR.
Для дальнейшего тестирования я попытался вставить iATR вместо того, чтобы попытаться создать новую переменную под названием ATR.
Показываю, как я пытался это закодировать.

if (OrderClosePrice() >= OrderOpenPrice() + ((iATR(NULL,0,20,1)*2)*Point)

Это тоже не сработало.
Еще раз спасибо.
С нетерпением жду ответа.
 

Здравствуйте Ais
Спасибо за предложение. Идея использования 365 (annual) против my_method, хорошо принята. Тестовые цели с более короткими временными рамками
должны быть только для удобства.
Мне еще многому предстоит научиться. Я наконец-то понял, как вставлять ATR, но не могу его умножить. Пример следующий:

На данный момент вот что у меня есть......if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1))) // = Жесткий стоп
Это работает, но это не то, что я хочу.
Я работаю в направлении ...................if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1) )*2),
Это не работает. Надеюсь, что это наглядно покажет вам и другим, что я имею в виду. iATR умножается на 2.
Есть предложения по этому поводу? Как только это будет решено, я смогу наполовину уменьшить ATR и для позиций входа.

Был еще один способ, который я пробовал, но он не сработал... if(OrderClose - OrderOpenPrice - (iATR(NULL,0,20,1)*2)) <= 0)

Еще раз спасибо за ваше время. Я уверен, что есть много тех, кто стучится в вашу дверь за мудростью.
Будь здоров
 

Здравствуйте Huckleberry,
Я оставил делать только функцию открытия.
И сейчас пытаюсь понять логику фиксации прибыли.
Стопы и тейки отсутствуют в вашем OrderSend(), это нормально, но команда на закрытие выполняется только в случае убытка.
И хотелось бы узнать ваше мнение о понятности нового стиля программы, https://www.mql5.com/en/forum/124521/page2.
Пока пока,
:)

 

Здравствуйте, Ais
Спасибо за ваш ответ.
Позвольте мне объяснить причину отсутствия StopLoss или TakeProfit.
Поскольку SL и TP не вставляются в OrderSend, SL находится в другом месте, под выражением....

if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1))).

Хотя это и работает, но это не совсем правильный SL. Пример приведен в моем последнем сообщении....

if (OrderClose >= OrderOpenPrice + (iATR(NULL,0,20,1))*2).

Сдвиг в ... iATR, в приведенном выше выражении может меняться от одного бара к другому. Используя OrderSend с SL и TP, я не могу воспользоваться изменением сдвига.

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

 

Можно работать без SL и TP.
Но нам все равно нужно условие для закрытия ордера в случае прибыли.
Пожалуйста, посмотрите на обновленную функцию "iSignalClose",
https://www.mql5.com/en/forum/124521/page2.
Теперь это, конечно, условие виртуального SL.
Но нам все равно нужно условие виртуального TP.
Жду вашего ответа.
:)

 

Я вставил для виртуального ТП аналогичное с SL условие, но используя другой фактор.
В будущем будет легко и удобно оптимизировать эти параметры.

Для оптимизации объявите желаемые параметры как "extern".
Пример
:

////////////////////////////////////////////////////////////////////<         3>
// < 1.1. Data : Input >                                          //<          >
//                                                                //<          >
// < 1.1. Input             7 =       4 i       3 d       - s   > //<          >
// <      1. Strategy       4 =       2 i       2 d       - s  /> //<          >
// <      2. Trading        3 =       2 i       1 d       - s  /> //<          >
// </1.1. Input             7 =       4 i       3 d       - s   > //<          >
//                                                                //<          >
// <      1. Strategy 4 >=========================================//<          >
                    int       iBasePeriod       = 20            ; //<          >
                    int       iBaseBar          = 1             ; //<          >
extern              double    dFactorTP         = 2.0           ; //<          >
extern              double    dFactorSL         = 2.0           ; //<          >
// </     1. Strategy 4 >=========================================//<          >
//                                                                //<          >
// <      2. Trading 3 >==========================================//<          >
                    int       iSlippage         = 1             ; //<          >
                    int       iMagic            = 0             ; //<          >
                    double    dLots             = 0.1           ; //<          >
// </     2. Trading 3 >==========================================//<          >
//                                                                //<          >
//                                                                //<          >
//                                                                //<          >
// </1.1. Data : Input >                                          //<          >
     

После оптимизации измените исходные значения параметров на оптимизированные и удалите объявления "extern".

Пример оптимизации для игры "A System: Championship 2008 Final Edit", также известной как "ACB6", https://www.mql5.com/en/forum/112633/page7#276861:
Файлы:
1e.txt  46 kb
1r.txt  49 kb