|
|
|
|
Опции темы | Опции просмотра |
03.03.2013, 11:31 | #1 |
Любитель
|
Есть индикатор Forex off trend 3, он есть в сободном доступе и найти его не проблема. По нему пишу советника, но пока не могу реализивать следующее: Когда красная линия пересекает синюю СВЕРХУ в низ, то открывается селл. И наоборот, когда с низу - то бай. Когда поступает новый сигнал, то предыдущий ордер закрывается и открывается новый.
Нужен только алгоритм открытия при условиях пересечения "вверх" и "вниз", и условие открытия противоположного при закрытии предыдущего. Задача не сложная, но почему то встал в ступор. Хэлпаните, ели есть время. |
03.03.2013, 11:38 | #2 |
Мастер
Регистрация: 21.11.2012
Сообщений: 1,531
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Подскажите а он случайно не на пересечении двух машек? если они то не советую вам с ним заморачиватся, а по сути посоветую вам взять советник на пересечении скользящих и просто поменять(заменить) параметры МА на параметры Forex off trend 3 индикатора, я думаю что должно получиться , так как к примеру пересечение в советнике кросс ма нормально выражено .
|
03.03.2013, 14:13 | #3 |
Любитель
|
Спасибо за совет. Но я для себя это делаю и хочу докопаться до истины. А переделывать уже существующий - конечно можно, но возможны "помехи", так как код доннора под другую ТС заточен.
А судя по коду индикатора, там не просто МА с разными периодами. |
04.03.2013, 16:10 | #4 | |
Специалист
Регистрация: 15.09.2012
Сообщений: 919
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
if (val1 > val2) Comment("покупка buy ",val1); if (val1 < val2) Comment("продажа sell ",val2); в этих местах прописать OrderSend. Так будет намного проще. Но если вы используете много индикаторов то лучше не перегружать советника кодом и подгружать каждый индикатор отдельно через double val=iCustom(NULL, 0, "Forex off trend 3",13,1,0); |
|
05.03.2013, 08:35 | #5 | |
Любитель
|
Цитата:
if (val1 < val2) Comment("продажа sell ",val2); Эта функция просто выводит комментарий (строчку) на график с рекомендацией купить или продать. Ааа. Вы имеете ввиду просто прописать привязку советника к этим строчкам? Получится, если выполняется условие val1 > val2, то он просто открывает бай и если обратное, то селл. Идея не плохая. Мне останется только реализовать (при смене на противоположное значение) закрытие ордера. Тейкпрофит нет смысла задавать, т.к. уменьшится отдача. |
|
05.03.2013, 19:19 | #6 | |
Специалист
Регистрация: 15.09.2012
Сообщений: 919
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
Вы создадите ветку с данным советником? Очень уж мне он кажется перспективным. Если трал будет, ТП не обязателен) Могу предложить ещё если красная и синяя линия идут горизонтально то якобы это флет и не торопиться лесть в торговлю. Просто заметил что могут линии пересектись и идти нейкий промежуток вместе, а когда уже расходятся чтоб сразу открыть ордер |
|
06.03.2013, 09:54 | #7 | |
Любитель
|
Цитата:
Нов от незадача, я что то упустил. Прописал, что при if (val1 > val2) открыл бай и закрывал селл, а при if (val1 < val2) открывал селл и закрывал бай. Так теперь этот гаденышь открывает бай, тут же закрывает бай, и снова тут же открывает селл, опять же закрывает селл и так далее до без конечности. Он одно пересечение воспринимает как новое, отказывается его вести дальше, алгоритм срабатывает на нем же, а не на следующем пересечении. Теперь пытаюсь вылечить его от этого недуга. П.С. все же у меня лучше получается дорабатывать советники, чем писать самому с нуля. |
|
06.03.2013, 23:16 | #8 | |
Специалист
Регистрация: 15.09.2012
Сообщений: 919
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
Мне казалось дорабатывать сложнее, так как трудно пролистать 20 страниц советника и разобраться в чём идёт суть. Как я понимаю val1- красная линия. val2-синяя линия. И если красная выше синей, то сигнал на покупку. И никак не может в это же время быть сигнал на продажу, ведь мы знаем что красная выше синей. Или может быть вы вместо (>) поставили знак (>=). Или вместо (<) поставили знак (<=). Тогда при пересечении могло бы выполняться равенство и открывать и закрывать сделки. Ещё вариант что индикатор перерисовывается каждую секунду и возможно изменение красной линии над и под синей. Но посмотрел и он вроде стоит на месте. Может стоит его вывесить на обозрение? Или в личку. Одна голова хорошо, а две лучше) |
|
07.03.2013, 15:28 | #9 |
Любитель
|
Не могу отучить его открывать ордера на открытии следующей свечи. Скорее всега, ответ леэит на поверхности, я а копаю и углубляюсь в дебри.
Вот стандарное открытие ордера с рынка, открывает замечательно. if(Forexofftrend3 == OP_BUY) //Buy { res = OrderSend(Symbol(), OP_BUY, lots, Ask, slip, Bid - StopLoss*Point, Bid + TakeProfit*Point, NULL, Magic); if(res < 0) {Alert("Oreder Sent Error", GetLastError());} } Я подразумеваю (да что там, уверен), что у меня ошибка тут if(val1 > val2) return(OP_BUY); else if(val1 < val2) return(OP_SELL); Знак = в выражении val1 >= val2 никак на торги не влияют. Но если я не верну (return) функцию на первоначальное условие открытия ордера, то он его попросту его не откроет. И замкнутая цепь получается. Есть предложение, как его заставить открываться только не получении противоположного сигнала? Жду предложений. Пока прикрутил стоп и тейк, которые в последствии удалю конечно. Выкладываю исходник и индикатор. |
08.03.2013, 09:06 | #10 |
Специалист
Регистрация: 15.09.2012
Сообщений: 919
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
В данный момент я нахожусь не за своим рабочим компьютером и поэтому смогу протестировать своё предположение только после выходных.
Почему вы не хотите сделать что-то типо такого: double val1 = iCustom(NULL, 0, "Forexofftrend3", 0, 1); double val2 = iCustom(NULL, 0, "Forexofftrend3", 1, 1); if(val1 > val2) { OrderSend(Symbol(), OP_BUY, lots, Ask, slip, Bid - StopLoss*Point, Bid + TakeProfit*Point, NULL, Magic); } if(val1 < val2) { OrderSend(Symbol(), OP_SELL, lots, Bid, slip, Ask + StopLoss*Point, Ask - TakeProfit*Point, NULL, Magic); } return(0); Предложение как заставить открыть на получении противоположного сигнала: Смотрим есть ли открытые ордера. А также бай или селл они. Если открыт ордер бай, и появился сигнал (val1 > val2), то закрываем ордер бай и открываем ордер селл. И наоборот: Если открыт ордер селл, и появился сигнал (val1 > val2), то закрываем ордер селл и открываем ордер бай. |