Сделал по коду так как советовали. Вначале по коду у меня идёт условие на выбор типа стопа - по атр или фиксированный
Далее свою нормализацию я закомментировал, а присвоил вот таким образом
Далее по коду у меня идёт вычисление профита- там проблем не было и после вычисления профита добавил страшную формулу которую советовали
Всё скомпилировалось без ошибок. А при запуске теста в журнале вылетает ошибка что происходит деление на ноль насколько я понимаю и тест прекращается. Где я тут накосячил-то или чего не сделал правильно?
Просто удали это
sl = fabs(OrderOpenPrice()-OrderStopLoss())/_Point;// ПРИСВОИЛ ЗНАЧЕНИЕ КАК СОВЕТОВАЛИ//sl= NormalizeDouble(sl,Digits());// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ СТОП ЛОССА ДЛЯ ОТКРЫТИЯ СДЕЛКИ ТО ЧТО БЫЛО ЗАКОМЕНТИРОВАЛ
Сделал по коду так как советовали. Вначале по коду у меня идёт условие на выбор типа стопа - по атр или фиксированный
Далее свою нормализацию я закомментировал, а присвоил вот таким образом
Далее по коду у меня идёт вычисление профита- там проблем не было и после вычисления профита добавил страшную формулу которую советовали
Всё скомпилировалось без ошибок. А при запуске теста в журнале вылетает ошибка что происходит деление на ноль насколько я понимаю и тест прекращается. Где я тут накосячил-то или чего не сделал правильно?
Просто когда вам дают два разных варианта, то применять оба сразу не надо.
Вы считаете sl двумя разными вариантами
sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1);// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
или
sl= razmer_fikc_sl*Point; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТ
получаете значение в значениях цены. А в формулу должны быть вставлены пункты от … и до …
Получается, стоп от цены находится на расстоянии, либо iATR(………)/_Point либо razmer_fikc_sl но использовать два разных значения в функции не очень удобно, следовательно лучше оставить только один вариант
double lot =MathFloor((Free*MaxRisk/100)/(sl/Point*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА
и не забывайте что sl должно быть высчитано ДО попытки вычислить размер лота.
voidOnTick()
{
//---if(tip_sl==en_po_atr)
{ //ЕСЛИ ТИП СТОП ЛОССА СТОИТ ПО АТР ТО ВЫСЧИТЫВАЕМ ЕГО ИЗ АТР
sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1)/Point;// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССАPrint("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
}
else//ИНАЧЕ- ТО ЕСТЬ ЕСЛИ СТОП ЛОСС ФИКСИРОВАННЫЙ В ПУНКТАХ
{
sl= razmer_fikc_sl; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТPrint("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
}
double lot =MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА
Закоменитровал строку и тест завёлся- БОЛЬШОЕ СПАСИБО! Только не понял зачем при получении в переменную стоплосса из iATR в конце делить на поинт? P/S с математикой у меня реально сложности- я не придуриваюсь:-( Но думаю раз тест пошёл и при депо в 100 лот ставится минимальный, а при депо в 10000 всё время разный, значит норма работает О_о Ещё раз благодарю за помощь...
Закоменитровал строку и тест завёлся- БОЛЬШОЕ СПАСИБО! Только не понял зачем при получении в переменную стоплосса из iATR в конце делить на поинт? P/S с математикой у меня реально сложности- я не придуриваюсь:-( Но думаю раз тест пошёл и при депо в 100 лот ставится минимальный, а при депо в 10000 всё время разный, значит норма работает О_о Ещё раз благодарю за помощь...
ATR выдает десятичное число, типа 0,00120
razmer_fikc_sl у тебя целое число
для вычисления лота тебе надо пункты, т.е. целые числа
Старая тема, но что-то решение найти не могу. Как прописать временной промежуток(например с 12:00 до 14:00) и только Один раз в этом промежутке открыть ордер, удовлетворяющий какому-то условию (RSI<30 например).
Или
Что-то типа аналога Sleep: открыть ордер по заданному условию и ничего не делать 2 часа. Но Sleep в тестере не работает.
Порт-моне тв: Старая тема, но что-то решение найти не могу. Как прописать временной промежуток(например с 12:00 до 14:00) и только Один раз в этом промежутке открыть ордер, удовлетворяющий какому-то условию (RSI<30 например).
Или
Что-то типа аналога Sleep: открыть ордер по заданному условию и ничего не делать 2 часа. Но Sleep в тестере не работает.
первое условие - время пришло второе условие - рси третье условие - в истории нет по цене открытия такого ордера в промежутки времени
Есть индикатор Elliott Wave Oscillator , он выдаёт числовые значения переменной EWO . Существуют положительные EWO те что выше нуля и отрицательные EWO которые ниже нуля.
Из последних 100 показаний EWO, нужно вычислить среднее значение положительных EWO и отдельно среднее значение отрицательных EWO
Значения из индикатора получаю так double EWO=iCustom(Symbol(),0,"Elliott Wave Oscillator",0,0);
Подскажите, каким кодом mql4 можно это реализовать в советник ?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Сделал по коду так как советовали. Вначале по коду у меня идёт условие на выбор типа стопа - по атр или фиксированный
Далее свою нормализацию я закомментировал, а присвоил вот таким образом
Далее по коду у меня идёт вычисление профита- там проблем не было и после вычисления профита добавил страшную формулу которую советовали
Всё скомпилировалось без ошибок. А при запуске теста в журнале вылетает ошибка что происходит деление на ноль насколько я понимаю и тест прекращается. Где я тут накосячил-то или чего не сделал правильно?
Просто удали это
Сделал по коду так как советовали. Вначале по коду у меня идёт условие на выбор типа стопа - по атр или фиксированный
Далее свою нормализацию я закомментировал, а присвоил вот таким образом
Далее по коду у меня идёт вычисление профита- там проблем не было и после вычисления профита добавил страшную формулу которую советовали
Всё скомпилировалось без ошибок. А при запуске теста в журнале вылетает ошибка что происходит деление на ноль насколько я понимаю и тест прекращается. Где я тут накосячил-то или чего не сделал правильно?
Просто когда вам дают два разных варианта, то применять оба сразу не надо.
Вы считаете sl двумя разными вариантами
или
получаете значение в значениях цены. А в формулу должны быть вставлены пункты от … и до …
Получается, стоп от цены находится на расстоянии, либо iATR(………)/_Point либо razmer_fikc_sl но использовать два разных значения в функции не очень удобно, следовательно лучше оставить только один вариант
и не забывайте что sl должно быть высчитано ДО попытки вычислить размер лота.
Сделай так...
Просто удали это
Закоменитровал строку и тест завёлся- БОЛЬШОЕ СПАСИБО! Только не понял зачем при получении в переменную стоплосса из iATR в конце делить на поинт? P/S с математикой у меня реально сложности- я не придуриваюсь:-( Но думаю раз тест пошёл и при депо в 100 лот ставится минимальный, а при депо в 10000 всё время разный, значит норма работает О_о Ещё раз благодарю за помощь...
Закоменитровал строку и тест завёлся- БОЛЬШОЕ СПАСИБО! Только не понял зачем при получении в переменную стоплосса из iATR в конце делить на поинт? P/S с математикой у меня реально сложности- я не придуриваюсь:-( Но думаю раз тест пошёл и при депо в 100 лот ставится минимальный, а при депо в 10000 всё время разный, значит норма работает О_о Ещё раз благодарю за помощь...
ATR выдает десятичное число, типа 0,00120
razmer_fikc_sl у тебя целое число
для вычисления лота тебе надо пункты, т.е. целые числа
ATR/Point выдает целое число
Старая тема, но что-то решение найти не могу. Как прописать временной промежуток(например с 12:00 до 14:00) и только Один раз в этом промежутке открыть ордер, удовлетворяющий какому-то условию (RSI<30 например).
первое условие - время пришло
второе условие - рси
третье условие - в истории нет по цене открытия такого ордера в промежутки времени
Добрый день.
Есть индикатор Elliott Wave Oscillator , он выдаёт числовые значения переменной EWO . Существуют положительные EWO те что выше нуля и отрицательные EWO которые ниже нуля.
Из последних 100 показаний EWO, нужно вычислить среднее значение положительных EWO и отдельно среднее значение отрицательных EWO
Значения из индикатора получаю так double EWO=iCustom(Symbol(),0,"Elliott Wave Oscillator",0,0);
Подскажите, каким кодом mql4 можно это реализовать в советник ?
Найти среднюю по модулю удалось.
double avarage_EWO = 0;
for(int g=0;g<100;g++)
avarage_EWO = avarage_EWO + MathAbs( iCustom(Symbol(),0,"Elliott Wave Oscillator",0,g) ); // средняя по модулю
avarage_EWO = avarage_EWO/100;
Но вот как расчитать по отдельности среднюю положительную и среднюю отрицательную EWO ?
Благодарю !
https://www.mql5.com/ru/forum/170952/page195#comment_19853399
тут fxsaber представил функцию с:
ORDER_REASON_SL
Ордер выставлен в результате срабатывания Stop Loss
ORDER_REASON_TP
Ордер выставлен в результате срабатывания Take Profit
не могу сообразить как и для чего ORDER_REASON_TP,
как работает DEAL_REASON_TP имею представление, а вот что с ордерами не понятно тут