Условие открытия при формировании новой свечи и один раз в одном направлении, срабатывает, когда код выглядит так:
New_bar=0; if (Time_0!=Time[0]) { New_bar=1; Time_0=Time[0]; } //---long signal--- if (New_bar==1 && st2<st4 && st1>st3) if ((st1-st3)>Diff) Opn_B=true; //---short signal--- if (New_bar==1 && st2>st4 && st1<st3) if ((st3-st1)>Diff) Opn_S=true;
Но в этом случае нет проверки разницы в дальнейшем, а поэтому пропускаются важные сигналы.
Стоит добавить bool Wait_up=false; bool Wait_dn=false; и все перестает работать!!!
Пожалуйста, помогите!
Перед установкой ордера поставте проверку на количество установленных ордеров (самый простой способ)
if(OrdersTotal()<1){ установить_ордер(); }
Перед установкой ордера поставте проверку на количество установленных ордеров (самый простой способ)
Эта проверка есть. Проблема заключается не в том что одновременно открывается несколько ордеров в одном направлении, а в том что как только закрывается один, тут же на этом месте открыватся новый.
Эта проверка есть. Проблема заключается не в том что одновременно открывается несколько ордеров в одном направлении, а в том что как только закрывается один, тут же на этом месте открыватся новый.
Очень просто. При открытии позиции обнуляйте все вычисления, которые формировали данный сигнал. И всё. Так всегда надо делать. А у Вас получается, что все значения, которые сформировали сигнал остаются такими же при открытии позиции и при её закрытии эти же значения являются критериями для открытия очередной сделки. Думаю, так.
Очень просто. При открытии позиции обнуляйте все вычисления, которые формировали данный сигнал. И всё. Так всегда надо делать. А у Вас получается, что все значения, которые сформировали сигнал остаются такими же при открытии позиции и при её закрытии эти же значения являются критериями для открытия очередной сделки. Думаю, так.
Здесь все закрыто и обнулено
Все еще проще. Заведите флаг - LastDir, например. Как только открыли длинную, присваивайте ему 1, короткую - 2. В init занулите флаг. При открытии очередной длинной позиции проверяйте флаг на равенство 1. Если равно, значит не открывайте вновь длинную, так как до этого уже была длинная поза. Точно также с короткой - проверяйте на равенство 2.
Флаг изменяйте только при успешном открытии позиции.
Спасибо, за помощь и участие. Обязательно учту ваши советы.
Сейчас походил по улице, подышал кислородом и сразу нашел ошибки. Одна из них отсутвие "{" после проверок пересечения плюс в логике есть один пробел!
}else {Wait_up=true;}
Логическая ошибка здесь. Эта часть постоянно включает проверку на разницу, поэтому позиция открывается на каждой новой свече. Если кто-то сталкивался с реализацией подобного, прошу поделиться опытом.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте!
Идея: (критерии открытия) при открытии новой свечи проверяется пересечение двух линий одного индикатора и разница между ними, если эти два условия соответсвуют, то открывается позиция. Если пересечение есть, а разница меньше необходимой, то при появлении дальнейших свечек проверяется только разница двух линий индикатора в направлении уже сформированного пересечения. Также в этот момент проверяется противоположное пересечение.
Проблема: Все работает как задумано, кроме одного. Как только закрывается позиция, то сразу же открывается новая. При чем в любом месте, то есть при открытии свечи (планировалось только так) и в любом другом месте.
ПОМОГИТЕ: Мне надо чтобы ордер открывался один раз в одном направлении после выполнения вышеуказанных условий!!!