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



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

СообщениеДобавлено: Чт Авг 04, 2016 2:10 pm Ответить с цитатой Вернуться к началу

Оживлю ветку ))) Не могу вспомнить как описать ситуацию выбора цены. Вход в шорт по параболику. Выход, если цена дошла до скользящей 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

СообщениеДобавлено: Чт Авг 04, 2016 3:39 pm Ответить с цитатой Вернуться к началу

Посмотрел картинку глазами. Не понял чем отличается ситуация в левом и правом кружке.
Стал читать код.
В строке
Код:
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

СообщениеДобавлено: Чт Авг 04, 2016 3:48 pm Ответить с цитатой Вернуться к началу

Код:

BuyLevel = sma;
BeginDay = Day() != Ref(Day(), -1);
Conditions = BarsSince(BeginDay) > BarsSince(BuyLevel);

Это чтобы не открывалось в начале дня сразу после первого перескока параболика.
Отличие картинок в том, что входы одинаковые (в шорт на параболике). А вот выходы разные. В левой картинке выходим из шорта по обратному перескоку параболика (не дошли до средней sma), а во втором случае выходим по средней.
Я не могу вспомнить как записать цену в зависимости от того, что исполнилось. Если сработало в левом кружочке, то цена выхода равна закрытию первой свечки после параболика, а если сработало то, что в правом кружочке, то цена выхода равна sma.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Ну так и пиши. Если L < sma, то CoverPrice = sma в противном случае close

Код:
CoverPrice = IIf(L < sma, sma, Close);

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



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

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

Привет ! Вопрос по картинке.
В момент, когда средняя пересекает параболик как на графике (выделено кружочками), фиксируем значение параболика и от него на определенно расстояние ставим заявку. Если цены выше параболика, то заявку на шорт, если ниже, то на лонг. Выход из позиции по обратному пересечению параболика.Если параболик перескакивает среднюю одновременно с ценой, такое пропускаем. Слева это видно на картинке (не выделил просто). Написал так:
Код:

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

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

Так пойдет
Код:
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

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

Вроде правильно. А для шорта как ?
Код:

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

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

А так
Код:
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

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

Почему-то не всегда входит в позицию. Код такой
Код:

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

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

Думаю, что не выполняется вот это условие
Cross(H,ShortLevel)
но проверить не могу. Ты на рисунке ShortLevel не показал, какая бумага, дата и фрейм мне тоже не известно...

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



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

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

ShortLevel - на графике красная горизонтальная линия. Это фьючерс РТС, минутка. 21.04.16, время 15:15
Посмотреть профиль Отправить личное сообщение
home30



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

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

Тут вот входит, код тот же самый. На лонгах таких косяков нет. Или там не входит из-за того, что когда появляется ShortLevel по сигналу пересечения Parab и SMA, то текущая свеча и последующие стоят выше ShortLevel. Т.е. я неправильно использую функцию Cross() ???
Еще какой-то левый вход в шорт 13:30 на этом графике. Он же должен ShortLevel обнулять после перескока параболика.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Не правильно понимаешь работу функции Cross.
Cross(a, b) выполняется когда A было ниже B а потом стало выше B. На прошлом баре ниже а на этом выше.

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



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

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

000 писал(а):
Не правильно понимаешь работу функции Cross.
Cross(a, b) выполняется когда A было ниже B а потом стало выше B. На прошлом баре ниже а на этом выше.

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

Short=C>ShortLevel

тогда он рисует и считает входы на всех свечах, которые выше ShortLevel.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

home30 писал(а):

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

Short=C>ShortLevel

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

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

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen