Автор |
Сообщение |
dymos
Зарегистрирован: 01.06.2008
Сообщения: 6
Откуда: Барнаул
|
Техника входа на прорыве волатильности Лари Вильямса.
сигнал buy на уровне= Open(сегодня)+X(%от диапазона вчерашнего дня)
сигнал short на уровне= Open(сегодня)-X(%от диапазона вчерашнего дня)
закрытие позиции по Close или StopLoss=50%(диапазона вчерашнего дня).
х-необходимо оптимизировать
размер позиции расчитываеться=(остаток на счету*Y)/DD/100
где Y-процент риска от остатка на счету (необходимо оптимизировать)
DD-мах дродаун.
Олег предложил следующее решение:
SetTradeDelays(0, 0, 0, 0);
SetPositionSize(10, spsPercentOfEquity);
x = Optimize("x", 10, 10, 100, 1)/100;
DH = TimeFrameGetPrice( "H", inDaily, -1, expandFirst); // максимум вчерашнего дня
DL = TimeFrameGetPrice( "L", inDaily, -1, expandFirst); // минимум вчерашнего для
DOpen = TimeFrameGetPrice( "O", inDaily, 0, expandFirst); //сегодняшнее открытие
Range = DH - DL; // вчерашний диаппазон
BuyLevel = DOpen + Range*x; // уровень покупки
ShortLevel = DOpen - Range*x; // уровень шорта
Buy = H > BuyLevel; // покупка если максимум выше уровня покупки
BuyPrice = BuyLevel; // по цене уровня покупки
Short = L < ShortLevel; // шорт
ShortPrice = ShortLevel;
Sell = Cover = Day() != Ref(Day(), 1); // выход на последнем баре дня
SellPrice = CoverPrice = C; // выход по цене закрытия
ApplyStop(stopTypeLoss, stopModePoint, Range/2, ExitAtStop = 1); // стоп 50% вчерашнего диаппазона
Plot(C, "C", colorBlack, styleCandle);
Plot(BuyLevel, "DH", colorRed);
Plot(ShortLevel, "DL", colorRed);
Plot(dopen, "DO", colorBlue);
Если тестировать систему на дневках, то велика вероятность, что на одном баре сработает и покупка и продажа и стопы и тестер с такой кашей не разберется. Поэтому написал для внутредевных графиков. Фрейм можно использовать любой, но желатеьно помельче. Оптимизацию размера позиции писать не стал потому, что так не делают. Сперва тестируют с неким заданым сайзом, а потом подгоняют его к требуемой просадке. Например торговали 10% от капитала и получили по тесту DD 30%. Хотим иметь DD 15% значит сайз позиции надо уменьшить в два раза, т.е. 5% от капитала.
Установил сайз 10% от капитала. |
_________________ "Наличие противоречия есть критерий истины, отсутствие противоречия - критерий заблуждения..." Георг Гегель |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
dymos
Зарегистрирован: 01.06.2008
Сообщения: 6
Откуда: Барнаул
|
стараюсь изменить выходы. выход только по стопам. позиция одна, и до её закрытия не открываеться другая. торговля краткосрочная-
позиция может быть открыта несколько дней.
закрытие позиции по TakeProfit=50%(диапазона вчерашнего дня) или StopLoss=50%(диапазона вчерашнего дня).
---------
SetTradeDelays(0,0,0,0);
SetPositionSize(10, spsPercentOfEquity);
x =Optimize("x", 0.5, 0.1, 1, 0.1);
DH = TimeFrameGetPrice( "H", inDaily,-1,expandFirst);//Максимум вчерашнего дня
DL = TimeFrameGetPrice( "L", inDaily,-1,expandFirst);//минимум вчерашнего для
DOpen = TimeFrameGetPrice( "O", inDaily, 0, expandFirst); // сегодняшнее открытие
Range = DH - DL; // вчерашний диаппазон
BuyLevel = DOpen + Range*x;//уровень покупки
ShortLevel = DOpen -Range*x;//уровень шорта
Buy = H > BuyLevel; // покупка если максимум выше уровня покупки
BuyPrice = BuyLevel; // по цене уровня покупки
Short = L < ShortLevel; // шорт
ShortPrice = ShortLevel;
//Sell =? Cover = ?;
//SellPrice = CoverPrice = ?;
ApplyStop(stopTypeProfit, stopModePoint, Range/2, ExitAtStop = 1);
ApplyStop(stopTypeLoss, stopModePoint, Range/2, ExitAtStop = 1); // стоп 50% вчерашнего диаппазона
Plot(C, "C", colorBlack, styleCandle);
Plot(BuyLevel, "DH", colorRed);
Plot(ShortLevel, "DL", colorGreen);
Plot(dopen, "DO", colorBlue);
Олег плиз помоги разобраться... |
_________________ "Наличие противоречия есть критерий истины, отсутствие противоречия - критерий заблуждения..." Георг Гегель |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
настырный
Зарегистрирован: 15.06.2008
Сообщения: 67
|
Привет!
Я не Олег, но сразу вижу грабли, на которых лично получал ...
Buy = H >= BuyLevel & L<BuyLevel;
BuyPrice = BuyLevel;
Short = L <ShortLevel>ShortLevel;
ShortPrice = ShortLevel;
Извини, что не получается вставить значок меньшеилиравно. Движок форума что-то дурит. Строчку Short =... надо переписать по аналогии с Buy = ...
Ну и дописать, что Sell = Cover = 0;
так как закрывается позиция, исходя из кода, по ApplyStop.
Успехов! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
dymos
Зарегистрирован: 01.06.2008
Сообщения: 6
Откуда: Барнаул
|
благодарю настырный! всё получилось как я и хотел.
вот что получилось:
_SECTION_BEGIN("Lary_williams");
SetTradeDelays(0,0,0,0);
SetPositionSize(100, spsPercentOfEquity);//100 % эквити
x =Optimize("x", 0.6, 0.1, 1, 0.1);//определяет уровень buy/short, дефолт 60% от вчерашнего диапазона
DH = TimeFrameGetPrice( "H", inDaily,-1,expandFirst);//Максимум вчерашнего дня
DL = TimeFrameGetPrice( "L", inDaily,-1,expandFirst);//минимум вчерашнего для
DOpen = TimeFrameGetPrice( "O", inDaily, 0, expandFirst); // сегодняшнее открытие
Range = DH - DL; // вчерашний диапазон
BuyLevel = DOpen + Range*x;//уровень покупки
ShortLevel = DOpen -Range*x;//уровень шорта
Buy = H >= BuyLevel & L<BuyLevel;// покупка если максимум выше уровня покупки
BuyPrice = BuyLevel; // по цене уровня покупки
Short = L <ShortLevel>ShortLevel;
ShortPrice = ShortLevel;
Sell = Cover = 0;
ApplyStop(stopTypeLoss, stopModePoint, Range/2, ExitAtStop = 1); // стоп 50% вчерашнего диаппазона
ApplyStop(stopTypeProfit, stopModePoint, Range/2, ExitAtStop = 1);
//титры//
Title = "Система на пробой вчерашнего диапазона цен и уровни входов \n"+
Name() + " " + Interval()/60 + " мин. " + Date()+"\n\n"+
"Range :"+Range+"\n"+ EncodeColor(colorBlue)+
"Buylevel: "+Buylevel+ "\n"+ EncodeColor(colorRed)+
"Shortlevel:"+Shortlevel+"\n"+ EncodeColor(color=20)+
"High: "+H+"\n"+
"Low: "+L+"\n"+
"Open: "+O+"\n"+
"Close: "+C;
//уровни//
Plot(C, "C", colorBlack, styleBar);
Plot(BuyLevel, "DH", colorBlue);
Plot(ShortLevel, "DL", colorRed);
Plot(dopen, "DO", colorGreen);
_SECTION_END(); |
_________________ "Наличие противоречия есть критерий истины, отсутствие противоречия - критерий заблуждения..." Георг Гегель |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
Моя любимая система (и мой любимый автор), которая дала не только хорошие результаты на тестах, но и породила другие интересные варианты))
Вообще я мало авторов читал, но после Ларри я понял, что получать прибыль на рынках можно.
Уж не знаю почему, но ваш код у меня вообще в минус уходит при любом раскладе.
Вот мой первый код, который сразу дал приемлемый результат:
Koef = Optimize("koef",0.025,0.005,0.05,0.005);
BuyPrice = Open*(1+Koef);
SellPrice = Open*(1-Koef);
Buy = BuyPrice < High;
Sell = SellPrice > Low;
Plot(BuyPrice,"BuyPrice",4,1);
Plot(SellPrice,"SellPrice",6,1);
Где существенная разница между вашим и моим кодом пока понять не могу. Возможно в сигналах для выхода. Буду смотреть.
Естественно, что коэффициент надо выставлять в соотвествии с рынком, в данном случае стоит 0,5-5% прирост от открытия, для рынка ЦБ. На форексе будут другие значения.
К сожелению улучшить этот вариант стопами я так и не смог, но что интересно, это чуть ли не единственная система, которая умудряется быть в плюсе торгуя по одному сигналу в обе стороны, т.е. если выставить Buy = Cover и Sell = Short она всё равно будет в плюсе. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Похоже системка и в правду рабочая |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
dymos!
Вот твоя система в рабочем варианте:
x =Optimize("x", 0.6, 0.1, 1, 0.1);//определяет уровень buy/short, дефолт 60% от вчерашнего диапазона
DH = TimeFrameGetPrice( "H", inDaily,-1,expandFirst);//Максимум вчерашнего дня
DL = TimeFrameGetPrice( "L", inDaily,-1,expandFirst);//минимум вчерашнего для
DOpen = TimeFrameGetPrice( "O", inDaily, 0, expandFirst); // сегодняшнее открытие
Range = DH - DL; // вчерашний диапазон
BuyLevel = DOpen + Range*x;//уровень покупки
ShortLevel = DOpen -Range*x;//уровень шорта
Buy = H >= BuyLevel;// покупка если максимум выше уровня покупки
BuyPrice = BuyLevel; // по цене уровня покупки
Short = L <= ShortLevel;
ShortPrice = ShortLevel;
Sell = Short; |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
А вот система, которая выдала у меня пока лучшие результаты:
Koef = Optimize ("koef",0.025,0.001,0.06,0.001);
//Koef2 = Optimize ("koef2",0.025,0.005,0.06,0.005);
Range = Optimize ("daysAGO",2,1,10,1);
BP = Open*(1+Koef);
SP = Open*(1-Koef);
NBP = LLV(BP,Range);
NSP = HHV(SP,Range);
BuyPrice = IIf(BP > NBP, NBP, BP);
SellPrice = IIf(SP < NSP, NSP, SP);
CondBuy = BuyPrice > Open AND BuyPrice < High;
CondSell = SellPrice < Open AND SellPrice > Low;
Buy = Cover = CondBuy;
Sell = Short = CondSell;
Plot(BuyPrice,"BuyPrice",4,1);
Plot(SellPrice,"SellPrice",6,1);
Всё очень простенько и кажется, что робастно, что-то подобное можно слепить и на основе ATR.
Иногда выдаёт нереальные цифры, поэтому большущая просьба проверить код))))
Вообще уже было бы интересно добавить чего-нть к первоначальной идее, какой-нть фильтр что ли...
Я как-то пробовал, но ничего путного не получалось, может кто пробовал ещё?! |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Немного доработал
+ убрал лишние сигналы
+ добавил стрелочки
Вот только возник вопрос: почему я не могу протестировать тестером эту систему на индексе РТС (RTSI), сканер дает сигналы, а BackTester и Optimizer все по-нулям ?
===
_SECTION_BEGIN("Lary_williams");
SetTradeDelays(0,0,0,0);
SetPositionSize(100, spsPercentOfEquity);//100 % эквити
SetOption("MaxOpenPositions", 1 );
x =Optimize("x", 0.6, 0.1, 1, 0.1);//определяет уровень buy/short, дефолт 60% от вчерашнего диапазона
DH = TimeFrameGetPrice( "H", inDaily,-1,expandFirst);//Максимум вчерашнего дня
DL = TimeFrameGetPrice( "L", inDaily,-1,expandFirst);//минимум вчерашнего для
DOpen = TimeFrameGetPrice( "O", inDaily, 0, expandFirst); // сегодняшнее открытие
Range = DH - DL; // вчерашний диапазон
BuyLevel = DOpen + Range*x;//уровень покупки
ShortLevel = DOpen -Range*x;//уровень шорта
Buy = H >= BuyLevel;// покупка если максимум выше уровня покупки
BuyPrice = MAX(O,BuyLevel); // по цене уровня покупки
Short = L <= ShortLevel;
ShortPrice = MIN(O,ShortLevel);
Sell = Short; Cover= Buy;
ApplyStop(stopTypeLoss, stopModePoint, Range/2, ExitAtStop = 1); // стоп 50% вчерашнего диаппазона
ApplyStop(stopTypeProfit, stopModePoint, Range/2, ExitAtStop = 1);
//титры//
Title = "Система на пробой вчерашнего диапазона цен и уровни входов \n"+
Name() + " " + Interval()/60 + " мин. " + Date()+"\n\n"+
"Range :"+Range+"\n"+ EncodeColor(colorBlue)+
"Buylevel: "+Buylevel+ "\n"+ EncodeColor(colorRed)+
"Shortlevel:"+Shortlevel+"\n"+ EncodeColor(color=20)+
"High: "+H+"\n"+
"Low: "+L+"\n"+
"Open: "+O+"\n"+
"Close: "+C;
//уровни//
Plot(C, "C", colorBlack, styleBar);
Plot(BuyLevel, "DH", colorBlue);
Plot(ShortLevel, "DL", colorRed);
Plot(dopen, "DO", colorGreen);
Buy = ExRem( Buy, Sell );
Sell = ExRem( Sell, Buy );
Short = ExRem (Short, Cover);
Cover = ExRem (Cover, Short);
PlotShapes(IIf(Buy,shapeUpArrow,0),colorGreen,0,Graph0,-12);
PlotShapes(IIf(Short,shapeDownArrow,0),colorRed,0,Graph0,-24); |
_________________ Антон
Последний раз редактировалось: Амиброкеровец (Вс Мар 29, 2009 8:26 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
Амиброкеровец писал(а): |
Немного доработал
+ убрал лишние сигналы
+ добавил стрелочки |
Твоя система дала везде отрицательные результаты, в тестере после оптимизации везде в минус.
Или я что-то не так делаю!? |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
написал тебе в ICQ |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
Вы неправильно указываете уровни цен, должно быть не BuyPrice = BuyLevel; и ShortPrice =ShortLevel; а вот так BuyPrice =Max(O, BuyLevel); ShortPrice =Min(O, ShortLevel); , тоже самое и для Sellprice и Coverprice. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
Сергей писал(а): |
Вы неправильно указываете уровни цен, должно быть не BuyPrice = BuyLevel; и ShortPrice =ShortLevel; а вот так BuyPrice =Max(O, BuyLevel); ShortPrice =Min(O, ShortLevel); , тоже самое и для Sellprice и Coverprice. |
Дык, цена покупки (и продажи) так и так выстраевается от Открытия, зачем же брать максимальное (минимальное) значение (если только в моём коде). И тем не менее, поменял в предложенном не мною коде, результат ни на каплю не улучшился.
А вот мой код действительно стал чуть лучше)))) если сделать эту замену.
Фильтровать давайте, предлагаю SARом =)
Сам займусь этим в апреле, а то дел накопил, ами такая штука, сядешь вечерком и вдруг восход и время шесть утра... |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
kosbar писал(а): |
Сергей писал(а): |
Вы неправильно указываете уровни цен, должно быть не BuyPrice = BuyLevel; и ShortPrice =ShortLevel; а вот так BuyPrice =Max(O, BuyLevel); ShortPrice =Min(O, ShortLevel); , тоже самое и для Sellprice и Coverprice. |
Дык, цена покупки (и продажи) так и так выстраевается от Открытия, зачем же брать максимальное (минимальное) значение (если только в моём коде). И тем не менее, поменял в предложенном не мною коде, результат ни на каплю не улучшился.
А вот мой код действительно стал чуть лучше)))) если сделать эту замену.
Фильтровать давайте, предлагаю SARом =)
Сам займусь этим в апреле, а то дел накопил, ами такая штука, сядешь вечерком и вдруг восход и время шесть утра... |
С чего бы она бралась от открытия когда сигнал допустим покупки происходит во время касания H Buylevel ? Покупаете на Buylevel а тестер считает по ценам открытия бара, оригинально) Я добавил MAX потому что при гэпе бар откроется намного выше уровня покупки естественно сразу будет сигнал на покупку и только в этом случае она будет равнятся O. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
Сергей писал(а): |
С чего бы она бралась от открытия когда сигнал допустим покупки происходит во время касания H Buylevel ? Покупаете на Buylevel а тестер считает по ценам открытия бара, оригинально) Я добавил MAX потому что при гэпе бар откроется намного выше уровня покупки естественно сразу будет сигнал на покупку и только в этом случае она будет равнятся O. |
Buylevel = Open + что-то там.
Buy = если BuyLevel < High.
По какой цене он купит!? Зачем тут брать Min Max!? Они ничего не изменят, т.к. условие покупки просто проверяет попала цена покупки в отрезок High-Open или нет. Собственно код это подтверждает, если выставить Min и Max ровным счётом ничего не меняется...
Чо тут думать-то, если цена покупки всегда включает цену открытия, то конечно она всегда будет больше её!
Грубо говоря, цена покупки определяется сразу же, как появляется открытие рынка, и тут же выставляется стоп-заявка на покупку или на продажу соотвественно. Торгуют то в тот же самый бар. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|