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



Зарегистрирован: 03.05.2011
Сообщения: 212
Откуда: Новосибирск

СообщениеДобавлено: Пн Дек 17, 2012 9:41 am Ответить с цитатой Вернуться к началу

К примеру, мы имеем случай, представленный на картинке. Смотрим только вход, отмечен красной стрелкой.

На момент входа у нас имеется размах между Хай (151750) и Лоу (150380). Размах равен 1370 пунктов. Задача состоит в том, чтобы выйти из шорта в тот момент, когда цена в падении пересечет расширение фибы 61.8% от диапазона Хай-Лой, ИМЕЮЩЕГО МЕСТО БЫТЬ на МОМЕНТ ВХОДА. Т.е. в районе 149530.

Пока что я могу сделать выход только на пробое текущего лоя. Ну это легко и понятно.

Т.е. я так понимаю, в момент входа необходимо запомнить параметры хай/лой, рассчитать нужный диапазон и задать условия нужного пересечения. Но вот как запомнить эти параметры. И чтобы при обновлении экстремумов, значения в памяти не менялись.

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


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

СообщениеДобавлено: Пн Дек 17, 2012 11:22 am Ответить с цитатой Вернуться к началу

2 варианта.
1. Геморойный. Воспользоваться функцией ValueWhen()
Типа ЗначениеКогда(Шорт, посчитаный уровень выхода)
2. Посчитать уровень выхода, Цена входа - цена выхода и запихать это в ApplyStop()

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



Зарегистрирован: 03.05.2011
Сообщения: 212
Откуда: Новосибирск

СообщениеДобавлено: Пн Дек 17, 2012 11:49 am Ответить с цитатой Вернуться к началу

000 писал(а):
2 варианта.
1. Геморойный. Воспользоваться функцией ValueWhen()
Типа ЗначениеКогда(Шорт, посчитаный уровень выхода)
2. Посчитать уровень выхода, Цена входа - цена выхода и запихать это в ApplyStop()


Через стопы очень нежелательно.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Почему?

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



Зарегистрирован: 03.05.2011
Сообщения: 212
Откуда: Новосибирск

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

000 писал(а):
Почему?


Ну я не знаю, будет ли робот отрабатывать Амишные стопы. Он настроен на buy/short/cover/sell.

Сделал следующую вставку:

Код:
H1 = ValueWhen(B1, NewHigh, n = 1);
L1 = ValueWhen(S1, NewLow, n = 1);
Delta = H1-L1;
D161H = L1 + Delta*1.618;
D161S = H1 - Delta*1.618;

Lout3 = Cross (H, D161H);

Sout3 = Cross (D161S, L);


Иногда отрабатывается правильно. Иногда невнятно, как будто берет предыдущий или наоборот следующий диапазон экстремумов.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Пффф.
Давай не будем смешивать мух и котлеты.
Для теста проще и значит лучше использовать ApplyStop()
Для робота вот так

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



Зарегистрирован: 03.05.2011
Сообщения: 212
Откуда: Новосибирск

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

000 писал(а):
Пффф.
Давай не будем смешивать мух и котлеты.
Для теста проще и значит лучше использовать ApplyStop()
Для робота вот так


Олег, да просто у меня другой робот стоит. Там под стопы переделка понадобится.

А то, что я выше киданул - правильно с точки зрения геморойного варианта?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Наверное правильно. Я не знаю что у тебя B1 и S1. Только там одно но.
Если после открытия сделки и до ее закрытия появился еще один сигнал на сделку, то и B1 и S1 изменяться....

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



Зарегистрирован: 03.05.2011
Сообщения: 212
Откуда: Новосибирск

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

000 писал(а):
Наверное правильно. Я не знаю что у тебя B1 и S1. Только там одно но.
Если после открытия сделки и до ее закрытия появился еще один сигнал на сделку, то и B1 и S1 изменяться....


B1 и S1 - это Buy и Short. Т.е. условия для бая и шорта загнал в переменную дабы проставить в два места.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Бррр. Не правильно написал. Изменится не B1 и S1 а H1 и L1...

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


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

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

Кстати говоря. Даже если у тебя другой робот, ничто не мешает тебе использовать тот же принцип (запись уровня в файл).

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



Зарегистрирован: 03.05.2011
Сообщения: 212
Откуда: Новосибирск

СообщениеДобавлено: Вт Дек 18, 2012 7:10 am Ответить с цитатой Вернуться к началу

000 писал(а):
Бррр. Не правильно написал. Изменится не B1 и S1 а H1 и L1...


Вот такой код:

Код:
H1 = ValueWhen(B1, NewHigh, n = 0);
L1 = ValueWhen(S1, NewLow, n = 0);
Delta = H1-L1;
D161H = L1 + Delta*1.61;
D161S = H1 - Delta*1.61;

Lout3 = Cross (H, D161H);

Sout3 = Cross (D161S, L);


И несмотря на n = 0, просходит перерисовка сигналов. Печаль.

А через файл - вообще не понимаю, как делать.
Посмотреть профиль Отправить личное сообщение
AntColonel



Зарегистрирован: 03.05.2011
Сообщения: 212
Откуда: Новосибирск

СообщениеДобавлено: Вт Дек 18, 2012 8:20 am Ответить с цитатой Вернуться к началу

Поставил n=1, что бы брало первое слева выражение, дабы не заглядывало в будущее.

Однако рассчитывает неверно. К примеру, если обратимся к картинке. В 10:20 проходит первый сигнал (B1), H1 и S1, соответсвенно сужаются. Однако, сужается не до нужных позиций. Если H1 должна быть на 148728 (сетка фибы натянута на хай/лой), то здесь он очевидна выше.

Дальше сигналы идут в пределах имеющегося хая/лоя, поэтому H1/S1 не меняется. В 11:15 снова проходит B1. На этот момент хай/лой уже другие, соответсвенно расширяется и H1/S1. А вот здесь они уже встают верно.

Ничего не понимаю. Откуда ошибки в первом случае?

Ну и конечно это не дело. Все таки надо рассматривать для теста значению исключительно по первому сигналу.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Попытался разобраться. Не получилось. Давай свой код и описание что именно надо.

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



Зарегистрирован: 03.05.2011
Сообщения: 212
Откуда: Новосибирск

СообщениеДобавлено: Ср Дек 19, 2012 6:32 am Ответить с цитатой Вернуться к началу

000 писал(а):
Попытался разобраться. Не получилось. Давай свой код и описание что именно надо.


Значит ситуация такова. Имеется код (следует чуть ниже). Что делает он на данный момент? Определяет хай/лой дня, определяет в этом диапазоне три уровня коррекции - 61.8%, 50%, 38.2%. Вход в позицию происходит в том случае, когда цена доходит до одного из этих уровней коррекции и определенным образом тестирует его. Плюс фильтр. Выход осуществляется на пересечении экстремума. Т.е. либо ТП, либо стоп.

Что хочется сделать? Выход по ТП на пересечении экстремума - это слишком рано. Часто бывает, что цена уходит далеко дальше. Поэтому, задача состоит в том, что заставить систему выходить из позы по достижению расширения фибы 161.8%. Диапазон для этого расщирения должен браться от хай до лоу в том месте, ГДЕ БЫЛ ВХОД. На картинке это 150960. Т.е. если после входа в позу, хай/лоу были обновлены, но цены еще не достигли 161.8% и снова ушли на коррекции, где прошел очередной сигнал (который не отработан, поскольку уже в позе), то диапазон все равно должен остаться первоначальный.

Код:

Код:

// получение данных с форинг-источников
SB = Foreign("RIZVSP", "Close");   
VT = Foreign("RIZVPR", "Close"); 

// расчет фильтров и адаптивная оптимизация
spred = SB/VT; 
spred2 = SB-VT;

n = Optimize ("n", 17, 2, 100, 1);
Const1 = Optimize("Const1", 2.84, 0, 4, 0.02);
n2 = round(ATR(n)*Const1);
MA1 = MA (spred, n2);

CCIT = CCI (n);

// установка временных параметров работы
TMin = Param ("TMin", 100000, 100000, 230000, 10000);
TMout = Param ("TMout", 190000, 100000, 230000, 10000);
TM4 = TimeNum() >= TMin AND TimeNum() < TMout;

BeginDay = Ref(Day(), -1) != Day();   
DayBars = BarsSince(BeginDay)+1;   
TM = TimeNum() == 234000;
TM2 = TimeNum() < 190000;
TM3 = TimeNum() > 100000;

// определение хай/лоу дня и уровней коррекции
NewHigh = Ref(HHV(H, DayBars), -1);
 
NewLow = Ref(LLV(L, DayBars), -1); 


Delta50 = (NewHigh + NewLow)/2;
Delta161 = (NewHigh - NewLow)*1.6 + NewLow;
Delta161L = NewHigh - (NewHigh - NewLow)*1.6;
Delta61 = NewLow + (NewHigh - NewLow)*0.618;
Delta38 = NewLow + (NewHigh - NewLow)*0.382;
Delta236 = NewLow + (NewHigh - NewLow)*0.236;
Delta764 = NewLow + (NewHigh - NewLow)*0.764;

// условия входа/выхода
BC1 = L < Delta50 AND O > Delta50 AND C > Delta50;
BC2 = MA1 > Ref (MA1, -1);
BC3 = L < Delta61 AND O > Delta61 AND C > Delta61;
BC4 = L < Delta38 AND O > Delta38 AND C > Delta38;
BC5 = spred2 > 0;

SC1 = H > Delta50 AND O < Delta50 AND C < Delta50;
SC2 = MA1 < Ref (MA1, -1);
SC3 = H > Delta61 AND O < Delta61 AND C < Delta61;
SC4 = H > Delta38 AND O < Delta38 AND C < Delta38;
SC5 = spred < 0;

Lout1 = Cross (H, NewHigh);
Lout2 = Cross (NewLow, C);
Lout4 = Cross (300, CCIT);

Sout1 = Cross (NewLow, L);
Sout2 = Cross (C, NewHigh);
Sout4 = Cross (CCIT, -300);

// попытка сделать запоминание диапазона в момент входа и выход по 161.8%. Неудачная. Считает неверно, перерисовывает после новых сигналов
B1 = (BC1 OR BC4 OR BC3) AND BC2 AND TM4;
S1 = (SC1 OR SC3 OR SC4) AND SC2 AND TM4;

H1 = ValueWhen(B1, NewHigh, n = 1);
L1 = ValueWhen(S1, NewLow, n = 1);
Delta = H1-L1;
D161H = L1 + Delta*1.618;
D161S = H1 - Delta*1.618;

Lout3 = Cross (H, D161H);

Sout3 = Cross (D161S, L);

// сигналы
Buy = (BC1 OR BC4 OR BC3) AND BC2 AND TM4;
Short = (SC1 OR SC3 OR SC4) AND SC2 AND TM4;
Sell = Lout1 OR Lout2 OR Lout4 OR TM;
Cover = Sout1 OR Sout2 OR Sout4 OR TM;



Plot( NewHigh, "NewHigh", colorRed, 32);
Plot( NewLow, "NewLow", colorGreen, 32);
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen