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



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

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

Спасибо !!! Вот еще вопрос.Вот написал код. Условие- если разница между текущим параболиком и sar_100 более 200 (цена выше параболика), тогда запоминаем хай свечи как уровень входа. И, если любая следующая свеча этот хай пересекает до конца текущего параболика, тогда входим в шорт. Но он почему-то неправильно считает. Пример на скриншоте. Берет не текущий Parab, а самую верхнюю точку, когда уже произошло следующее пересечение. Тут по условиям вообще входа быть не должно.
Код:

Parab = SAR( 0.02, 0.2 );
SAR_100 = ValueWhen( Cross(O,Parab), Ref(Parab, -1));
EnterShort=ValueWhen((Parab-SAR_100)>=200 AND TradeTime AND H!=Parab AND C>Parab,H);
EnterShort=IIf(O>Parab,EnterShort,Null);
Short = Cross(H,EnterShort) AND C>Parab;
ShortPrice = EnterShort;
Посмотреть профиль Отправить личное сообщение
home30



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

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

Предыдущий вопрос все еще актуален. И еще вопрос. Как закодить, если сигналы на вход наступают в разное время - сначала один, чуть позже другой ? Например, средние пересеклись, а параболик еще не перескочил. Т.е. входим в позицию в момент пересечения параболика, учитывая, что пересечение произошло только когда цена была ниже параболика.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Июн 01, 2017 1:59 pm Ответить с цитатой Вернуться к началу

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

Как это?

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



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

СообщениеДобавлено: Чт Июн 01, 2017 2:21 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Цитата:
Т.е. входим в позицию в момент пересечения параболика, учитывая, что пересечение произошло только когда цена была ниже параболика.

Как это?

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


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

СообщениеДобавлено: Чт Июн 01, 2017 3:57 pm Ответить с цитатой Вернуться к началу

Код:
Cond1 = O < Parab;
Cond2 = Cross(MA1, Ma2);
Short = Cond1 AND Cond2;

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



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

СообщениеДобавлено: Пн Июн 05, 2017 11:56 pm Ответить с цитатой Вернуться к началу

Олег, подскажи по пирамидингу. Для примера возьмем простое условие. Если цена под параболиком, то покупаем на каждой свечке по 1 контракту (максимум 5). Если до следующего перескока параболика менее 5 свечей, тогда покупаем только по кол-ву свечей. Написал такой код
Код:

SetPositionSize(1, 5);
Buy1 = (Cross(Parab,O) OR Ref(Cross(Parab,O),-1) OR Ref(Cross(Parab,O),-2) OR Ref(Cross(Parab,O),-3) OR Ref(Cross(Parab,O),-4))  AND O<Parab;
Sell=Cross(O,Parab) OR TimeNum()==184359 OR TimeNum()==234859;
SellPrice=C;
Pos = Flip(Buy1, Sell);
Buy = IIf(Buy1 AND Ref(Pos, -1) == 0, 1, IIf(Buy1, sigScaleIn, 0));
BuyPrice=C;

Вроде работает. Но есть два вопроса.
1) А как сделать, чтобы входить на разных свечах разным числом контрактов. Например, на первой свече входим 2 контрактами, на второй еще 2 и на третьей оставшимся одним ?
2) Почему в детейлет лог показывает одно, а в трейд листе другое. Т.е. была сделка на 4 свечи (4 контракта). Детейлет лог показывает 4 сделки (1 бай и 3 скейл аут), а вот в трейд листе я вижу почему-то 5 контрактов и профит на 5 контрактов. И в трейд листе цена входа указана не средняя по всем контрактам, а только цена закрытия первой свечи, на которой входили.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Июн 06, 2017 9:18 am Ответить с цитатой Вернуться к началу

Цитата:

1) А как сделать, чтобы входить на разных свечах разным числом контрактов. Например, на первой свече входим 2 контрактами, на второй еще 2 и на третьей оставшимся одним ?

Типа так
Код:
SetPositionSize(IIf( Ref(Cross(Parab,O),-1), 2, 1), 5);

Цитата:

2) Почему в детейлет лог показывает одно, а в трейд листе другое. Т.е. была сделка на 4 свечи (4 контракта). Детейлет лог показывает 4 сделки (1 бай и 3 скейл аут), а вот в трейд листе я вижу почему-то 5 контрактов и профит на 5 контрактов. И в трейд листе цена входа указана не средняя по всем контрактам, а только цена закрытия первой свечи, на которой входили.

У тебя в коде вообще нету SigScaleOut. Я вообще не понимаю как он может его показывать.

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



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

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

Не получается. Этот код
Код:

SetPositionSize(IIf( Ref(Cross(Parab,O),-1), 2, 1), 5);
Buy1 = (Cross(Parab,O) OR Ref(Cross(Parab,O),-1) OR Ref(Cross(Parab,O),-2) OR Ref(Cross(Parab,O),-3) OR Ref(Cross(Parab,O),-4))  AND O<Parab;
Sell=Cross(O,Parab) OR TimeNum()==184359 OR TimeNum()==234859;
SellPrice=C;
Pos = Flip(Buy1, Sell);
Buy = IIf(Buy1 AND Ref(Pos, -1) == 0, 1, IIf(Buy1, sigScaleIn, 0));
BuyPrice=C;

Все равно докидывает по одному контракту. На каждой свечке. Я тут немного упростил задачу. На первой свечке после перескока параболика (цена под параболиком) входим в лонг 3 контрактами, на второй свечке после перескока еще 2.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Июн 06, 2017 1:38 pm Ответить с цитатой Вернуться к началу

Чета я не обратил сразу внимания.
Вот тут

Код:
SetPositionSize(1, 5);

У тебя 5. ЭТО ЧТО? Там 5 вообще никогда быть не должно. Поставь 4 и все заработает.

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



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

СообщениеДобавлено: Вт Июн 06, 2017 1:43 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Чета я не обратил сразу внимания.
Вот тут

Код:
SetPositionSize(1, 5);

У тебя 5. ЭТО ЧТО? Там 5 вообще никогда быть не должно. Поставь 4 и все заработает.

Да, я это сам догнал, что надо 4 ставить. Тогда правильно все. Добирает по одному контракту на каждой свече. А если нужно 3 контракта на первой свече и 1 на второй ? Всего 4.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Код:
SetPositionSize(IIf( Cross(Parab, O), 3, 1), 4);

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



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

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

000 писал(а):
Код:
SetPositionSize(IIf( Cross(Parab, O), 3, 1), 4);

Нет, все равно добирает по 1 контракту. Что-то в коде не так, не пойму.
Код:

Buy1 = (Cross(Parab,O) OR Ref(Cross(Parab,O),-1))  AND O<Parab;
Sell=Cross(O,Parab) OR TimeNum()==184359 OR TimeNum()==234859;
SellPrice=C;
Pos = Flip(Buy1, Sell);
Buy = IIf(Buy1 AND Ref(Pos, -1) == 0, 1, IIf(Buy1, sigScaleIn, 0));
BuyPrice=C;
SetPositionSize(IIf( Cross(Parab, O), 3, 1), 4);

нужно 3 контракта на первой свече и 1 на второй. Всего 4.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Ну. Открывает 3 контракта и потом добирает по 1

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



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

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

Привет, Олег !
Вот код
Код:

Parab = SAR( 0.02, 0.2 );
SAR_1 = ValueWhen( Cross(Parab, O), Ref(Parab, -1));
BuyLevel=...
Buy = Cross(EnterLong,L) AND O<Parab  AND SAR_1>ref(SAR_1,-1);

Ситуация видна на графике. Под SAR2 имел ввиду ref(SAR_1,-1). В общем, если пересечение свечи и BuyLevel (красной линии) происходит на первой свечи после перескока параболика (где SAR_1), тогда покупает. А если на последующих свечах, то не покупает, потому что ref(SAR_1,-1) уже стал другим. Т.е. как обратиться к прошлому значению SAR_1 в такой ситуации ?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Июн 13, 2017 9:26 pm Ответить с цитатой Вернуться к началу

Хм
Вот тут
Код:

... AND O<Parab  AND SAR_1>ref(SAR_1,-1)

O<Parab Значит параболик выше цены. В таком случае он всегда идет вниз.
дальше.
SAR_1>ref(SAR_1,-1) Значит парабоик растет.

Не кажется, что это взаимоисключающие условия?

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen