Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно. Необходимо обновить браузер или попробовать использовать другой.
Как минимум, после 85 строки вставьте переменную: Tip=-1; каждый раз, перед новым входом в цикл, данные нужно обнулять, т.к. при Tip=0 будет соответствовать позиции на бай, то "обнуление" в данном случае равно -1.
Спасибо, что ответили. Tip=-1; вставил на 86-ю строку. Теперь при обратном пересечении после правильного закрытия ордера тут же, в ту же минуту, постоянно открывает и мгновенно закрывает очередной ордер. И таким образом в тестере за 22 минуты открыл и закрыл более 3-х тысяч ордеров! Ну и естественно слил депозит.
Вот смотри: как войти в туалет - включаем свет, по выходу - выключаем, делаем это вручную или автоматика.
В данном случае, автоматика, но работает только на включение. Теперь по коду: имеем 4 флага: Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell
работают они по парно, например, сработало сперва условие на сел, имеем: Cls_B=true; и Opn_S=true; - получили тейк, тут же, т.к. условие все еще выполняется, установили новый ордер - состояние данных флагов не изменилось. Затем, тренд развернулся, выполняется условие на установку позиции в бай, т.е. имеем: Opn_B=true; и Cls_S=true; - установили позицию в бай. Все верно, согласно задуманному, но, когда устанавливали перед этим позиции в сел, флаг по закрытию позиций в бай был установлен в true, смотрим выше по тексту. Есть открытая позиция в бай и есть поднятый флаг на закрытие позиции бай - все верно работает, по написанному. Вот и подумайте: где и как "опустить" эти флаги. И помните, что имеет значение где и что нужно инициализировать в коде.
День добрый, форумчане!!! Только начинаю изучать всю эту нелегкую рутину в написании советников и не могу разобраться возможно с самым простейшим( Помогите кто может. Хочу написать код, чтобы работал так:
1) Если уже есть открытая позиция, то ничего непредпринемать.
2) Если не было еще ни одной позиции, то открыть ордер на покупку с лотом 0,01.
3) Если уже была открыта хотя бы одна позиция и последняя была на покупку и она была прибыльной, то открыть сделку на покупку с определенным лотом или если уже была открыта одна позиция и последняя была на продажу и она была прибыльной, то открыть сделку на продажу с определенным лотом.
4) Если уже была открыта хотя бы одна позиция и последняя была на покупку и ее она была убыточной и ее убыток был меньше 30 пунктов (то есть ушла в противоположную от цены открытия на 30 пунктов), то открыть сделку на продажу с определенным лотом или если уже была открыта хотя бы одна позиция и последняя была на продажу и она была убыточной и ее убыток был меньше 30 пунктов (то есть ушла в противоположную сторону от цены открытия на 30 пунктов), то открыть сделку на покупку.
День добрый, форумчане!!! Только начинаю изучать всю эту нелегкую рутину в написании советников и не могу разобраться возможно с самым простейшим( Помогите кто может. Хочу написать код, чтобы работал так:
1) Если уже есть открытая позиция, то ничего непредпринемать.
2) Если не было еще ни одной позиции, то открыть ордер на покупку с лотом 0,01.
3) Если уже была открыта хотя бы одна позиция и последняя была на покупку и она была прибыльной, то открыть сделку на покупку с определенным лотом или если уже была открыта одна позиция и последняя была на продажу и она была прибыльной, то открыть сделку на продажу с определенным лотом.
4) Если уже была открыта хотя бы одна позиция и последняя была на покупку и ее она была убыточной и ее убыток был меньше 30 пунктов (то есть ушла в противоположную от цены открытия на 30 пунктов), то открыть сделку на продажу с определенным лотом или если уже была открыта хотя бы одна позиция и последняя была на продажу и она была убыточной и ее убыток был меньше 30 пунктов (то есть ушла в противоположную сторону от цены открытия на 30 пунктов), то открыть сделку на покупку.
нет это лишь малая часть из всего советника. И даже стем, что писал уже разобрался почти со всем.
осталось два вопроса: 1) if (OrderSelect(-1,SELECT_BY_POS,MODE_TRADES)==true
вот так будет выглядеть, что есть уже хотя бы одна закрывшаяся сделка?
2) и второй все же ни как не могу разобраться как выяснить на что (покупку или продажу) была открыта сделка и с какой прибылью или убытком она завершилась
думаю начинать так: if (OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY)) то есть выбрал последний закрывшийся ордер, а как потом узнать, с какой прибылью он закрылся и какая сделка была (покупка или продажа)??
Пожалуйста, посоветуйте как написать строчки кода под такие условия для стрелки
в индикаторе всего 8 сигнальных буферов
каждый буфер может принимать значение либо 1, либо -1
____________________________________________________________________
для стрелки вверх:
7 штук любых этих буферов равны 1, а только один (любой) равняется -1
для стрелки вниз:
7 штук любых этих буферов равны 1, а только один (любой)
равняется 1
____________________________________________________________________
если значения буферов в разнобой-стрелок нет
заранее спасибо кто откликнется
извиняюсь за некорректность изложения)
Удачи всем!
нет это лишь малая часть из всего советника. И даже стем, что писал уже разобрался почти со всем.
осталось два вопроса: 1) if (OrderSelect(-1,SELECT_BY_POS,MODE_TRADES)==true
вот так будет выглядеть, что есть уже хотя бы одна закрывшаяся сделка?
Это условие всегда будет false. Просто потому что нельзя выбрать открытый ордер с индексом -1.
if(OrdersHistoryTotal()>0) Вот это означает что хотя бы один закрытый ордер есть в истории. Это простейший вариант. Для тестера потянет.
2) и второй все же ни как не могу разобраться как выяснить на что (покупку или продажу) была открыта сделка и с какой прибылью или убытком она завершилась
думаю начинать так: if (OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY)) то есть выбрал последний закрывшийся ордер, а как потом узнать, с какой прибылью он закрылся и какая сделка была (покупка или продажа)??
Пожалуйста, посоветуйте как написать строчки кода под такие условия для стрелки
в индикаторе всего 8 сигнальных буферов
каждый буфер может принимать значение либо 1, либо -1
____________________________________________________________________
для стрелки вверх:
7 штук любых этих буферов равны 1, а только один (любой) равняется -1
для стрелки вниз:
7 штук любых этих буферов равны 1, а только один (любой)
равняется 1
____________________________________________________________________
если значения буферов в разнобой-стрелок нет
заранее спасибо кто откликнется
извиняюсь за некорректность изложения)
Удачи всем!
Не могу понять почему не срабатывает и не закрывает(
Суть в том, что хочу чтобы сделки закрывались когда 80 пунктов наберут. Вытащил кусок где сделка открыта на покупку
if ( Ask>=(Open[0]+0.00080))
OrderClose( OrderTicket(), OrderLots(), Ask, 3, CLR_NONE )
Помогите кто может, пожалуйста. Заранее благодарен!
Не могу понять почему не срабатывает и не закрывает(
Суть в том, что хочу чтобы сделки закрывались когда 80 пунктов наберут. Вытащил кусок где сделка открыта на покупку
if ( Ask>=(Open[0]+0.00080))
OrderClose( OrderTicket(), OrderLots(), Ask, 3, CLR_NONE )
Помогите кто может, пожалуйста. Заранее благодарен!
Нужно помнить что каждая функция, это код, а переменная, это ячейки памяти. Если есть возможность лишний раз не выполнять функцию, надо писать так. Вызвал функцию один раз, поместил результат в переменную и юзай её сколько надо.
Нужно помнить что каждая функция, это код, а переменная, это ячейки памяти. Если есть возможность лишний раз не выполнять функцию, надо писать так. Вызвал функцию один раз, поместил результат в переменную и юзай её сколько надо.
Нет, TimeCurrent() выполняется количество рыночных ордеров в истории умножить на 2. А можно выполнять 1 раз. TimeYear(), TimeDayOfYear(), OrderCloseTime() можно выполнять в 2 раза меньше раз. Используйте переменные вместо лишних вызовов функций.
Нет, TimeCurrent() выполняется количество рыночных ордеров в истории умножить на 2. А можно выполнять 1 раз. TimeYear(), TimeDayOfYear(), OrderCloseTime() можно выполнять в 2 раза меньше раз. Используйте переменные вместо лишних вызовов функций.
А что именно не так? Немного не понятно, что вы хотите сделать, но с точки зрения работоспособности, ваш код должен функционировать. Единственно, переменная day должна быть глобальной или лучше static
Позволю свой вариант:
Но мне кажется, что вы хотите сделать закрытие текущих ордеров по некоему условию, которое проверяете раз в день с наступлением новых суток.
Для этого принято проверять факт открытия нового бара на D1:
А что именно не так? Немного не понятно, что вы хотите сделать, но с точки зрения работоспособности, ваш код должен функционировать. Единственно, переменная day должна быть глобальной или лучше static
Позволю свой вариант:
Но мне кажется, что вы хотите сделать закрытие текущих ордеров по некоему условию, которое проверяете раз в день с наступлением новых суток.
Для этого принято проверять факт открытия нового бара на D1: