Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Возможно ли такое написать ? Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
home30



Зарегистрирован: 17.06.2015
Сообщения: 105

СообщениеДобавлено: Пт Авг 12, 2016 4:44 pm Ответить с цитатой Вернуться к началу

000 писал(а):
home30 писал(а):

И как тогда писать в этом случае ? Если писать просто
Код:

Short=C>ShortLevel

тогда он рисует и считает входы на всех свечах, которые выше ShortLevel.

А в каком таком? Тебе надо сначала определиться что именно надо, а потом решать как это реализовать.
Кроме того если сделать Short=C>ShortLevel то и ShortPrice=ShortLevel; надо переделывать потому, что скорее всего цены ShortLevel не было и продать по ней нельзя.

Ну вот смотри.У меня ShortLevel вычисляется в момент пересечения параболика и средней. Может быть такое, что в момент появления сигнала и выставления заявки цена уже выше ShortLevel. Т.е. в данном случае мы запишем ShortLevel=C. Эта ситуация у нас на первом графике. Во втором случае по сигналу появился ShortLevel, но войдем в позицию, когда цена его пересечет,т.е. подождав несколько свечей. Как на 2 графике. Во втором случае понятно, используем функцию Cross(), а в первом как быть, ка цену записать,если ShortLevel в момент появления уже ниже текущей цены ? Короче, тут два условия на вход, их надо связать, но я не втыкаю как.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Авг 12, 2016 5:18 pm Ответить с цитатой Вернуться к началу

Ну и напиши
H > ShortLevel
ShortPrice = IIf(O > ShortLevel, O, ShortLevel);

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
home30



Зарегистрирован: 17.06.2015
Сообщения: 105

СообщениеДобавлено: Пт Авг 12, 2016 8:06 pm Ответить с цитатой Вернуться к началу

Какая то хрень. Вот полный код. В лонг входит даже по 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

СообщениеДобавлено: Пт Авг 12, 2016 9:53 pm Ответить с цитатой Вернуться к началу

Сложный код. Попробую поковырять, но не гарантирую.
Цену входа ставит High когда заданная цена BuyPrice выше максимума свечки

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
home30



Зарегистрирован: 17.06.2015
Сообщения: 105

СообщениеДобавлено: Пт Мар 24, 2017 10:14 pm Ответить с цитатой Вернуться к началу

Привет! Как описать вход в шорт, который на картинке. После параболика входим на 6-ой свечке, но она оказывается выше уровня ShortLevel. Т.е. Cross() тут не сработает, потому что на 6-ой свече нет пересечения. Сдвигать пересечение назад тоже не вариант,т.к. может быть ситуация, что предыдущая свеча тоже не пересекает уровень shortLevel Как описывать вход в таких случаях ?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Мар 28, 2017 5:40 pm Ответить с цитатой Вернуться к началу

Еще актуально?

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
home30



Зарегистрирован: 17.06.2015
Сообщения: 105

СообщениеДобавлено: Вт Мар 28, 2017 8:35 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Еще актуально?

Да
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Мар 29, 2017 11:43 am Ответить с цитатой Вернуться к началу

Собственно все просто.
Пишешь условия
Код:
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

СообщениеДобавлено: Пн Май 15, 2017 5:19 pm Ответить с цитатой Вернуться к началу

Не могу вспомнить, как описать выход, если 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

СообщениеДобавлено: Пн Май 15, 2017 7:57 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Пн Май 15, 2017 8:01 pm Ответить с цитатой Вернуться к началу

Попробуй так:
Код:
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

СообщениеДобавлено: Ср Май 17, 2017 2:48 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Чт Май 18, 2017 11:32 am Ответить с цитатой Вернуться к началу

Чтобы было понятно, прилагаю скриншот. Хай первой свечи после параболика является 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

СообщениеДобавлено: Пт Май 19, 2017 10:52 pm Ответить с цитатой Вернуться к началу

Вот код. Они рисует такие линии (скриншот)
Код:

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

СообщениеДобавлено: Сб Май 20, 2017 6:54 am Ответить с цитатой Вернуться к началу

Код:
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
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen