Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 След. |
Автор |
Сообщение |
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Оживлю ветку ))) Не могу вспомнить как описать ситуацию выбора цены. Вход в шорт по параболику. Выход, если цена дошла до скользящей MA (правый кружок). Если не дошла, тогда закрываем шорт на перескоке параболика (левый кружок).
Пишу так:
Код: |
Parab = SAR( 0.02, 0.2 );
SAR_0L = ValueWhen( Cross(Parab, O), Ref(Parab, -1));
sma=MA(Close,21);
ShortLevel = sma;
Conditions2 = BarsSince(BeginDay) > BarsSince(ShortLevel);
Cond_short=SAR_0L>sma AND Ref(L,-1)>Ref(sma,-1);
Short = Ref(Parab<C,-1) AND Parab>C AND Ref(Parab < C, -1) AND TradeTime AND Conditions2 AND Cond_short;
ShortPrice = C;
Cover = Cross(L,sma) AND Ref(Parab>C,-1) OR TimeNum()>184400;
CoverPrice =IIf(Cross(O,Parab),C,sma);
|
Не могу вспомнить, как правильно описать CoverPrice ?Входит правильно, выходит не правильно. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Посмотрел картинку глазами. Не понял чем отличается ситуация в левом и правом кружке.
Стал читать код.
В строке
Код: |
Conditions2 = BarsSince(BeginDay) > BarsSince(ShortLevel); |
Написана ерунда. BarsSince(ShortLevel) безсмылица.
в строке
Код: |
Short = Ref(Parab<C,-1) AND Parab>C AND Ref(Parab < C, -1) AND TradeTime AND Conditions2 AND Cond_short; |
непонятно зачем 2 раза Ref(Parab<C,-1) …
В общем не смог понять что надо было.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Код: |
BuyLevel = sma;
BeginDay = Day() != Ref(Day(), -1);
Conditions = BarsSince(BeginDay) > BarsSince(BuyLevel);
|
Это чтобы не открывалось в начале дня сразу после первого перескока параболика.
Отличие картинок в том, что входы одинаковые (в шорт на параболике). А вот выходы разные. В левой картинке выходим из шорта по обратному перескоку параболика (не дошли до средней sma), а во втором случае выходим по средней.
Я не могу вспомнить как записать цену в зависимости от того, что исполнилось. Если сработало в левом кружочке, то цена выхода равна закрытию первой свечки после параболика, а если сработало то, что в правом кружочке, то цена выхода равна sma. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну так и пиши. Если L < sma, то CoverPrice = sma в противном случае close
Код: |
CoverPrice = IIf(L < sma, sma, Close); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Привет ! Вопрос по картинке.
В момент, когда средняя пересекает параболик как на графике (выделено кружочками), фиксируем значение параболика и от него на определенно расстояние ставим заявку. Если цены выше параболика, то заявку на шорт, если ниже, то на лонг. Выход из позиции по обратному пересечению параболика.Если параболик перескакивает среднюю одновременно с ценой, такое пропускаем. Слева это видно на картинке (не выделил просто). Написал так:
Код: |
TradeTime = TimeNum() >= 100500 AND TimeNum() <= 184400;
Parab = SAR(0.02,0.2);
range_sma=Optimize("sma",21,15,30,1);
SMA = MA(C,range_sma);
direction = Flip(Cross(C, Parab), Cross(Parab,C));
SetPositionSize( 4, spsShares );
range_buy=Optimize("buy",200,200,700,50);
//запоминаем значение параболика в момент пересечения
BuyCond=ValueWhen(direction == 0 AND Ref(direction, -1) == 0 AND Cross(SMA, Parab) AND Ref(Parab>C,-1) AND TradeTime,Parab);
//отсчитываем расстояние для заявки
BuyLevel=BuyCond-range_buy;
//покупаем, если цена дошла до заявки
Buy=Cross(BuyLeveL,L);
BuyPrice=BuyLevel;
//продаем на обратном пересечении параболика.
Sell = Cross(Open,Parab) AND Ref(Parab>C,-1) OR TimeNum()>184400;
SellPrice=C;
|
Вопрос. Как сделать так, чтобы BuyLevel обнулялся до следующего пересечения. А то у меня получается, что он его держит и в следующий раз, когда цена дойдет до этого уровня,Ю но пересечения нет, то входит в позицию. Ну т.е. если цена в течение этого параболика не дошла до BuyLevel, то на перевороте параболика BuyLevel убираем. Ну и для шорта все наоборот. Тоже выделил пример и для шорта на графике. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
DMITRY
Зарегистрирован: 18.09.2009
Сообщения: 179
|
Так пойдет
Код: |
TradeTime = TimeNum() >= 100500 AND TimeNum() <= 184400;
Parab = SAR(0.02,0.2);
range_sma=Optimize("sma",21,15,30,1);
SMA = MA(C,range_sma);
direction = Flip(Cross(C, Parab), Cross(Parab,C));
SetPositionSize( 4, spsShares );
range_buy=Optimize("buy",200,200,700,50);
//запоминаем значение параболика в момент пересечения
BuyCond=ValueWhen(direction == 0 AND Ref(direction, -1) == 0 AND Cross(SMA, Parab) AND Ref(Parab>C,-1) AND TradeTime,Parab);
//отсчитываем расстояние для заявки
BuyUr=BuyCond-range_buy;
//покупаем, если цена дошла до заявки
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);
BuyPrice=BuyLevel;
//продаем на обратном пересечении параболика.
Sell = Cross(Open,Parab) AND Ref(Parab>C,-1) OR TimeNum()>184400;
SellPrice=C; |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Вроде правильно. А для шорта как ?
Код: |
ShortUr=ShortCond+range_buy;
ShortLevel=IIf(Flip(direction == 1 AND Ref(direction, -1) == 1 AND Cross(Parab, SMA) AND Ref(Parab<C,-1) AND TradeTime, Cross(SMA,Parab)) == 0, ShortUr, Null);
|
Так что-то неправильно. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
DMITRY
Зарегистрирован: 18.09.2009
Сообщения: 179
|
А так
Код: |
ShortUr=ShortCond+range_buy;
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); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Почему-то не всегда входит в позицию. Код такой
Код: |
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 );
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(H,ShortLevel) AND TradeTime AND C>Parab AND ShortCond2;
ShortPrice=ShortLevel;
Cover=Cross(Parab,O) AND Ref(Parab<C,-1) OR TimeNum()>184400;
CoverPrice=C;
|
Что ему не нравится ? На графике уровень входа (горизонтальная красная линия) вычисляется правильно.
И еще не могу понять работу функции Cross(). Если мы выставляем заявку, а в этот момент свеча выше, то он не будет открывать сделку. Надо чтобы тело свечи резало уровень, если используем Cross() ? Что тогда использовать. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Думаю, что не выполняется вот это условие
Cross(H,ShortLevel)
но проверить не могу. Ты на рисунке ShortLevel не показал, какая бумага, дата и фрейм мне тоже не известно... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
ShortLevel - на графике красная горизонтальная линия. Это фьючерс РТС, минутка. 21.04.16, время 15:15 |
|
|
Посмотреть профиль Отправить личное сообщение |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Тут вот входит, код тот же самый. На лонгах таких косяков нет. Или там не входит из-за того, что когда появляется ShortLevel по сигналу пересечения Parab и SMA, то текущая свеча и последующие стоят выше ShortLevel. Т.е. я неправильно использую функцию Cross() ???
Еще какой-то левый вход в шорт 13:30 на этом графике. Он же должен ShortLevel обнулять после перескока параболика. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Не правильно понимаешь работу функции Cross.
Cross(a, b) выполняется когда A было ниже B а потом стало выше B. На прошлом баре ниже а на этом выше. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
000 писал(а): |
Не правильно понимаешь работу функции Cross.
Cross(a, b) выполняется когда A было ниже B а потом стало выше B. На прошлом баре ниже а на этом выше. |
И как тогда писать в этом случае ? Если писать просто
тогда он рисует и считает входы на всех свечах, которые выше ShortLevel. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
home30 писал(а): |
И как тогда писать в этом случае ? Если писать просто
тогда он рисует и считает входы на всех свечах, которые выше ShortLevel. |
А в каком таком? Тебе надо сначала определиться что именно надо, а потом решать как это реализовать.
Кроме того если сделать Short=C>ShortLevel то и ShortPrice=ShortLevel; надо переделывать потому, что скорее всего цены ShortLevel не было и продать по ней нельзя. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 След. |
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|