Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 494
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Количесто ордеров в принципе цель второстепенная,до вчера у меня открывалось по одному ордеру,и пока ордер есть,следующий не открывался.А как заставить советника открывать ордера согласно приказу-когда предыдущий бар открылся выше(ниже) канала?Сейчас большинство ордеров убыточные,потому что открываются не по условиям.
Если анализировать вот этот кусок кода, то согласно ему у вас в случае если функция CountTrades() возвращает ноль то выполняется условие if (CountTrades()==0) CheckForOpen(); и вызывается функция CheckForOpen(). На следующем тике если ордер был открыть функция CountTrades() по идее вернет значение 1 и тогда уже будет выполнятся условие else
Если окажется что CountTrades()<max_trades то будет еще раз выполнена функция CheckForOpen(). Судя по коду значение переменной max_trades равно 3. Таким образом у вас будет открыто 4-ре ордера.
Если советник открывает ордера не правильно, то проверяйте логику где вы указываете условия при которых должны открываться позиции в функции CheckForOpen() . И еще проверьте условия времени работы советника if (CurrTime < EaStartTime || CurrTime >= EaEndTime). Я бы на вашем месте использовал функцию if (TimeHour(TimeCurrent()) = час начала работы && TimeMinute(TimeCurrent()) = минуты начала работы ). Час и минуты начала работы задаются в переменных типа int или uint.
Если Open бара номер 1 выше/ниже канала.
Таким образом у вас будет открыто 4-ре ордера.
Если советник открывает ордера не правильно, то проверяйте логику где вы указываете условия при которых должны открываться позиции в функции CheckForOpen() . И еще проверьте условия времени работы советника if (CurrTime < EaStartTime || CurrTime >= EaEndTime). Я бы на вашем месте использовал функцию if (TimeHour(TimeCurrent()) = час начала работы && TimeMinute(TimeCurrent()) = минуты начала работы ). Час и минуты начала работы задаются в переменных типа int или uint.
Открывал по 3 ордера,но не так как я задумывал.Хотел до трех ордеров,но по одному ордеру на каждый новый бар.Бывают такие моменты,когда несколько баров подряд дают положительные сигналы.
А по времени проблем нет,работает в строго отведенный период времени.
Открывал по 3 ордера,но не так как я задумывал.Хотел до трех ордеров,но по одному ордеру на каждый новый бар.Бывают такие моменты,когда несколько баров подряд дают положительные сигналы.
А по времени проблем нет,работает в строго отведенный период времени.
2016.01.13_05:14 МСК. Здравствуйте, господин Карпутов! Я написал в MQL4
.mq4 файл, получил .ex4 файл. Но в тестере стратегий он не работает. Конечная
цель у меня была написать советник для МТ4. В MQL5 у меня получался .mq5 и
.ex5 файлы. И .ex5 файл открывал сделки. В четвёртой версии есть отличия от
пятой и я ещё полохо ориентируюсь в MQL языке, поэтому плохо получается.
Сейчас я не стал сильно разбираться что не так, файл журнала тестера сохранён. Я
попробую перевести что написал тестер. А пока прошу Вас может Вы подскажете
что же не так написано в программном коде? Пока Вы ответите, я попробую сам
разобраться.
Я с удивлением обнаружил у себя в четвёртой версии эдитора вариант написания
советника примерно то, что собирался написать. Но это не я писал. Прилагаю
файлы журнала тестера и скриншот. 05:30 МСК.
2016.01.13_05:14 МСК. Здравствуйте, господин Карпутов! Я написал в MQL4
.mq4 файл, получил .ex4 файл. Но в тестере стратегий он не работает.
Где найти описание ошибок?
Я вот не пойму, что не нравится компилятору, зачем он меня предупреждает?
check operator precedence for possible error; use parentheses to clarify precedence
if(Low[X]>PriceBuy && High[X]>PriceBuy ||
Low[X]<PriceBuy && High[X]<PriceBuy)
calcBarX++;
и тут
expression has no effect
for(calc_day;calc_day>0; calc_day--)
{
if(iLow(Symbol(),TF_3Day,calc_day)<iLow(Symbol(),TF_3Day,calc_day+1)) calc_day_OK++;
else break;
}
Где найти описание ошибок?
Я вот не пойму, что не нравится компилятору, зачем он меня предупреждает?
Вообще-то компилятор кроме текста ошибки ещё сообщает номер строки кода в которой ошибка и позицию в строке.