Доброе время суток, уважаемые трейдеры. Я пишу советник, который торгует по индикатору MACD. Столкнулся с проблемой, которая приводит к убыткам.
Советник должен отследить пересечение медленной и быстрой линий MACD и открыть сделку на покупку, если быстрая линия пересекает медленную снизу вверх, и на продажу, если быстрая пересекает медленную сверху вниз. Определение пересечения я делаю в отдельной функции:
Ордера хранятся в таком виде:
Проблема заключается в том, что почти всегда рядом друг с другом открываются два ордера: один на покупку и другой на продужу. Это мешает работать всей программе. Я не могу найти ошибку.
Если можете, помогите мне в этом.
Спасибо.
Дребезг на нулевом баре, бывает часто.
Дребезг на нулевом баре, бывает часто. А ещё вы там специально ищете несколько пересечений в ближайшем прошлом и находите, а потом жалуетесь.
Проверку условий для входа я начинаю с проверки количества ордеров. И ищу точку входа только если сейчас нет открытых ордеров.
if (Orders[0][0] == 0)//Тут ищу условия для входа в рынок, если нет еще открытых ордеров { //Проверю условия на Buy if (FastLine[0] > SlowLine[0] && FastLine[1] < SlowLine[1] && SlowLine_Direction > 0) output = 10; //Прокол на покупку //Проверю условия на Sell if (FastLine[0] < SlowLine[0] && FastLine[1] > SlowLine[1] && SlowLine_Direction < 0) output = 21; //Прокол на продажу }Так что советник должен открыть один ордер по первому пересечению линий, пропуская мимо все следующие.
Проверку условий для входа я начинаю с проверки количества ордеров. И ищу точку входа только если сейчас нет открытых ордеров.
Так что советник должен открыть один ордер по первому пересечению линий, пропуская мимо все следующие.Значит ищите в той части кода, которую здесь не видно.
Вот часть кода, которая открывает ордера:
switch(con) { case 10://buy { if (!OrderSend(NULL, 0, lot, Ask, slippage, 0, 0, "MACD+")) Print(GetLastError()); } case 21://sell { if (!OrderSend(NULL, 1, lot, Bid, slippage, 0, 0, "MACD+")) Print(GetLastError()); } case 11://close buy { if (!OrderClose(Orders[1][4], Orders[n][5], Bid, slippage)) Print(GetLastError()); } case 22://close sell { if (!OrderClose(Orders[1][4], Orders[n][5], Ask, slippage)) Print(GetLastError()); } case 2:; }
И все.
Вот часть кода, которая открывает ордера:
И все.
Вот часть кода, которая открывает ордера:
И все.
Вы не испльзуете оператор break
А где break?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброе время суток, уважаемые трейдеры. Я пишу советник, который торгует по индикатору MACD. Столкнулся с проблемой, которая приводит к убыткам.
Советник должен отследить пересечение медленной и быстрой линий MACD и открыть сделку на покупку, если быстрая линия пересекает медленную снизу вверх, и на продажу, если быстрая пересекает медленную сверху вниз. Определение пересечения я делаю в отдельной функции:
Ордера хранятся в таком виде:
Проблема заключается в том, что почти всегда рядом друг с другом открываются два ордера: один на покупку и другой на продужу. Это мешает работать всей программе. Я не могу найти ошибку.
Если можете, помогите мне в этом.
Спасибо.