Достаточно ввести проверку на место открытия бара относительно текущей цены
if (TodayHi>fUpperLevel && Open[0] < Close[0]) CheckHiLivels = 1; // Условие для торговли
или относительно того-же уровня
if (TodayHi>fUpperLevel && Open[0] < fUpperLevel) CheckHiLivels = 1; // Условие для торговли
Важно, чтобы было первое пересечение за день. Допустим, посреди дня советник прикреплен на график (после первого пересечения и перед вторым), будет вход на втором пересечении уровня. Если делась сброс флага по открытию дня, то после запуска советника придется сутки ждать вхолостую.
Значит при пересечении идти в цикле по истории, смотреть, первое ли это пересечение. Но это не есть хорошо для советника, сильно тормознуто будет.
Значит индикатор писать, в нем можно сделать все нужные проверки оптимальным образом.
Важно, чтобы было первое пересечение за день. Допустим, посреди дня советник прикреплен на график (после первого пересечения и перед вторым), будет вход на втором пересечении уровня. Если делась сброс флага по открытию дня, то после запуска советника придется сутки ждать вхолостую.
Значит при пересечении идти в цикле по истории, смотреть, первое ли это пересечение. Но это не есть хорошо для советника, сильно тормознуто будет.
Значит индикатор писать, в нем можно сделать все нужные проверки оптимальным образом.
да, в том-то и дело что это был запуск советника в середине дня, поэтому я и делал условие
double fUpperLevel = iHigh(Symbol(), PERIOD_D1, 1) + Delta * Point(); // Хай предыдущего дня
double fLowerLevel = iLow(Symbol(), PERIOD_D1, 1) - Delta * Point(); // Лоу предыдущего дня
double TodayHi = iHigh(Symbol(),PERIOD_D1,0); // Хай текущего дня
double TodayLow = iLow(Symbol(),PERIOD_D1,0); // Лоу текущего дня
if (TodayHi>fUpperLevel) CheckHiLivels = 1; // Условие для торговли
if (TodayLow<fLowerLevel) CheckLowLivels = 1; // Условие для торговли
сравнивал хай вчерашнего дня и текущего. лоу вчерашнего и текущего дня. только всё равно и с этой проверкой ордер открылся ..
Ну в таком случае проще использовать глобальные переменные терминала.
При успешном открытии позиции туда пишем цену хай/лоу "GlobalVariableSet(...)"
Далее в условии проверяем "GlobalVariableGet(...) != хай/лоу" и если цена не равна, значит новый уровень - работаем.
Ну в таком случае проще использовать глобальные переменные терминала.
При успешном открытии позиции туда пишем цену хай/лоу "GlobalVariableSet(...)"
Далее в условии проверяем "GlobalVariableGet(...) != хай/лоу" и если цена не равна, значит новый уровень - работаем.
прежде чем открыть позицию, нужно проверить, не было ли пробитие вчерашних экстремумов сегодня и если были, то не открыть сегодня позиции в данном направлении вообще
да, в том-то и дело что это был запуск советника в середине дня, поэтому я и делал условие
double fUpperLevel = iHigh(Symbol(), PERIOD_D1, 1) + Delta * Point(); // Хай предыдущего дня
double fLowerLevel = iLow(Symbol(), PERIOD_D1, 1) - Delta * Point(); // Лоу предыдущего дня
double TodayHi = iHigh(Symbol(),PERIOD_D1,0); // Хай текущего дня
double TodayLow = iLow(Symbol(),PERIOD_D1,0); // Лоу текущего дня
if (TodayHi>fUpperLevel) CheckHiLivels = 1; // Условие для торговли
if (TodayLow<fLowerLevel) CheckLowLivels = 1; // Условие для торговли
сравнивал хай вчерашнего дня и текущего. лоу вчерашнего и текущего дня. только всё равно и с этой проверкой ордер открылся ..
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Коллеги, никак не получается составить правильное условие для открытия ордеров.. Сейчас у меня такие условия:
int OnInit()
{
fPreviousBid = 0;
return(INIT_SUCCEEDED);
}
int start()
{
double fUpperLevel = iHigh(Symbol(), PERIOD_D1, 1) + Delta * Point(); // Хай предыдущего дня
double fLowerLevel = iLow(Symbol(), PERIOD_D1, 1) - Delta * Point(); // Лоу предыдущего дня
double TodayHi = iHigh(Symbol(),PERIOD_D1,0); // Хай текущего дня
double TodayLow = iLow(Symbol(),PERIOD_D1,0); // Лоу текущего дня
if (TodayHi>fUpperLevel) CheckHiLivels = 1; // Условие для торговли
if (TodayLow<fLowerLevel) CheckLowLivels = 1; // Условие для торговли
bool Open_Bay = fPreviousBid > 0 && Bid > fUpperLevel && fPreviousBid <= fUpperLevel && CheckHiLivels == 1;
bool Open_Sell = fPreviousBid > 0 && Bid < fLowerLevel && fPreviousBid >= fLowerLevel && CheckLowLivels == 1;
fPreviousBid = Bid;
}
Советник торгует на пробой экстремумов предыдущего дня. Но бывает так, что он открывает ордера, когда экстремум текущего дня превышал экстремум предыдущего. Т.е. цена зашла не с той стороны.
Скрин с описанием прилагаю.