Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 След. |
Автор |
Сообщение |
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
000 писал(а): |
home30 писал(а): |
И как тогда писать в этом случае ? Если писать просто
тогда он рисует и считает входы на всех свечах, которые выше ShortLevel. |
А в каком таком? Тебе надо сначала определиться что именно надо, а потом решать как это реализовать.
Кроме того если сделать Short=C>ShortLevel то и ShortPrice=ShortLevel; надо переделывать потому, что скорее всего цены ShortLevel не было и продать по ней нельзя. |
Ну вот смотри.У меня ShortLevel вычисляется в момент пересечения параболика и средней. Может быть такое, что в момент появления сигнала и выставления заявки цена уже выше ShortLevel. Т.е. в данном случае мы запишем ShortLevel=C. Эта ситуация у нас на первом графике. Во втором случае по сигналу появился ShortLevel, но войдем в позицию, когда цена его пересечет,т.е. подождав несколько свечей. Как на 2 графике. Во втором случае понятно, используем функцию Cross(), а в первом как быть, ка цену записать,если ShortLevel в момент появления уже ниже текущей цены ? Короче, тут два условия на вход, их надо связать, но я не втыкаю как. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну и напиши
H > ShortLevel
ShortPrice = IIf(O > ShortLevel, O, ShortLevel); |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Какая то хрень. Вот полный код. В лонг входит даже по Cross(), в шорт не входит. См. картинку. В сделках то же самое-в шорт не входит, а в лонг входит,но в качестве цены входа ставит хай свечки, на которой прошел вход.
Код: |
NewDay = Day() != Ref(Day(), -1);
TradeTime = TimeNum() >= 100500 AND TimeNum() <= 184400;
Parab = SAR(0.02,0.2);
range_sma=Optimize("sma",15,5,60,1);
SMA =MA(C,range_sma);
SAR_0L = ValueWhen( Cross(Parab, O) AND TradeTime,Ref(Parab,-1));
SAR_100 = ValueWhen( Cross(O,Parab) AND TradeTime,Ref(Parab,-1));
direction = Flip(Cross(C, Parab), Cross(Parab,C));
SetPositionSize( 4, spsShares );
BuyCond=ValueWhen(direction == 0 AND Ref(direction, -1) == 0 AND Cross(SMA,Parab) AND Ref(Parab>C,-1) AND TradeTime,Parab);
BuyCond2 = BarsSince(Cross(O,Parab)) < BarsSince(NewDay);
BuyUr=BuyCond-(SAR_0L-BuyCond);
//покупаем, если цена дошла до заявки
BuyLevel = IIf(Flip(direction == 0 AND Ref(direction, -1) == 0 AND Cross(SMA,Parab) AND Ref(Parab > C,-1) AND TradeTime, Cross(parab,sma)) == 1, BuyUr, Null);
Buy= Cross(BuyLeveL,L) AND TradeTime AND Parab>C AND BuyCond2;
BuyPrice=BuyLevel;
Sell = Cross(Open,Parab) AND Ref(Parab>C,-1) OR TimeNum()>184400;
SellPrice=C;
ShortCond =ValueWhen(direction == 1 AND Ref(direction, -1) == 1 AND Cross(Parab,SMA) AND Ref(Parab<C,-1) AND TradeTime,Parab);
ShortCond2 = BarsSince(Cross(Parab,O)) < BarsSince(NewDay);
ShortUr=ShortCond+(ShortCond-SAR_100);
ShortLevel=IIf(Flip(direction == 1 AND Ref(direction, -1) == 1 AND Cross(Parab,SMA) AND Ref(Parab<C,-1) AND TradeTime, Cross(sma,Parab)) == 1, ShortUr, Null);//с форума
Short=Cross(ShortLevel,H) AND TradeTime AND ShortCond2 AND C>Parab;
ShortPrice = ShortLevel;
Cover=Cross(Parab,O) AND Ref(Parab<C,-1) OR TimeNum()>184400;
CoverPrice=C;
Plot(BuyLevel, "", colorGreen);
Plot(ShortLevel, "", colorRed);
Plot(SMA, "SMA", colorOrange);
PlotShapes( IIf( Buy, shapeDigit9, shapeNone ), colorWhite );
PlotShapes( IIf( Short, shapeDigit9, shapeNone ), colorYellow );
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Сложный код. Попробую поковырять, но не гарантирую.
Цену входа ставит High когда заданная цена BuyPrice выше максимума свечки |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Привет! Как описать вход в шорт, который на картинке. После параболика входим на 6-ой свечке, но она оказывается выше уровня ShortLevel. Т.е. Cross() тут не сработает, потому что на 6-ой свече нет пересечения. Сдвигать пересечение назад тоже не вариант,т.к. может быть ситуация, что предыдущая свеча тоже не пересекает уровень shortLevel Как описывать вход в таких случаях ? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Еще актуально? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
000 писал(а): |
Еще актуально? |
Да |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Собственно все просто.
Пишешь условия
Код: |
CondShort = L > ShortLevel; |
Код: |
Short = Ref( Cross( C, SAR(0.02, 0.2)), -6 ) AND CondShort; |
В общем то и все.
Но может так случится, что за 6 свечек САР обратно перескочет вверх. Тогда наверное вход не нужен. Если так, то добавь еще
Код: |
Short = Ref( Cross( C, SAR(0.02, 0.2)), -6 ) AND CondShort AND SAR(0.02, 0.2) < C; |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Не могу вспомнить, как описать выход, если 2 условия на выход. Например, если цена выше параболика и дошла до уровня SellLevel, то выходим из лонга. Если цена не дошла до SellLevel, тогда выходим из лонга на обратном пересечении параболика/ Пишу так, но считает неправильно.
Код: |
Sell = Cross(Parab,O) OR TimeNum()>184400;
SellPrice=IIf(Cross(H,SellLevel),SellLevel,Max(Parab,C));
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
home30 писал(а): |
Не могу вспомнить, как описать выход, если 2 условия на выход. Например, если цена выше параболика и дошла до уровня SellLevel, то выходим из лонга. Если цена не дошла до SellLevel, тогда выходим из лонга на обратном пересечении параболика/ Пишу так, но считает неправильно.
Код: |
Sell = Cross(Parab,O) OR TimeNum()>184400;
SellPrice=IIf(Cross(H,SellLevel),SellLevel,Max(Parab,C));
|
|
если цена выше параболика
Sell = O > Parab
и дошла до уровня SellLevel, то выходим из лонга
AND L < SellLevel
Если цена не дошла до SellLevel, тогда выходим из лонга на обратном пересечении параболика
OR Cross(Parab,O);
Итого
Код: |
Sell = (O > Parab AND L < SellLevel) OR Cross(Parab,O); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Marcello
Зарегистрирован: 30.05.2015
Сообщения: 69
|
Попробуй так:
Код: |
SCond1 = H > Parab AND H >= SellLevel;
SCond2 = H < SellLevel AND C < Parab;
Sell = SCond1 OR SCond2;
SellPrice = IIf( SCond1, Max( O, SellLevel ), C ); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Marcello писал(а): |
Попробуй так:
Код: |
SCond1 = H > Parab AND H >= SellLevel;
SCond2 = H < SellLevel AND C < Parab;
Sell = SCond1 OR SCond2;
SellPrice = IIf( SCond1, Max( O, SellLevel ), C ); |
|
Так то вроде правильно.Но вот еще условие добавил. После перескока параболика хай первой свечи запоминаем как SellLevel. Если на любой из следующих свечей, находящихся выше параболика, дошли до SellLevel, тогда выходим по SellLevel. Если не дошли, тогда выходим на обратном перескоке параболика по закрытию первой свечи после перескока. Написал так:
Код: |
SellLevel=ValueWhen( Cross(O,Parab) AND TradeTime, H);
BCond1 = H >= SellLevel AND H > Parab AND Ref(C,-1) > Parab;
BCond2 = H < SellLevel AND C < Parab;
Sell = BCond1 OR BCond2 OR TimeNum()==184400;
SellPrice = IIf( BCond1,SellLevel,C);
|
Почему-то выходит на первой свече после параболика, хотя этого не должно быть.Хай первой свечи - это уровень и выходить надо, если цена потом туда вернется. Что ей еще не хватает то ? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Чтобы было понятно, прилагаю скриншот. Хай первой свечи после параболика является SellLevel. Если вторая или любая из следующих свечей до него дошла, то выходим (на первой не выходим), если не дошли, тогда выходим на обратном перескоке параболика по закрытию. В это коде
Код: |
SellLevel=ValueWhen( Cross(O,Parab) AND TradeTime, H);
BCond1 = H >= SellLevel AND H > Parab AND Ref(C,-1) > Parab;
BCond2 = H < SellLevel AND C < Parab;
Sell = BCond1 OR BCond2 OR TimeNum()==184400;
SellPrice = IIf( BCond1,SellLevel,C);
|
почему-то упорно выходит на первой свече после параболика. Что не так то ? Пишу ведь BCond1 = H >= SellLevel AND H > Parab AND Ref(C,-1) > Parab. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Вот код. Они рисует такие линии (скриншот)
Код: |
ExitShort=ValueWhen( Cross(Parab,O) AND TradeTime, C);
ExitLong=ValueWhen( Cross(O,Parab) AND TradeTime, C);
Plot(ExitLong, "", colorGreen);
Plot(ExitShort, "", colorRed);
|
Как сделать, чтобы когда цена над параболиком, то была только зеленая полоска ExitLong, а когда цена под параболиком, то только ExitShort. Ну или другими словами, чтобы когда параболик переворачивается, то и сигнал обнулялся как-то. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
ExitShort=ValueWhen( Cross(Parab,O) AND TradeTime, C);
ExitLong=ValueWhen( Cross(O,Parab) AND TradeTime, C);
ExitShort = IIf(Parab > O, ExitShort, Null);
ExitLong = IIf(Parab < O, ExitLong, Null);
Plot(ExitLong, "", colorGreen);
Plot(ExitShort, "", colorRed); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 След. |
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|