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



Зарегистрирован: 01.06.2008
Сообщения: 6
Откуда: Барнаул

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

Техника входа на прорыве волатильности Лари Вильямса.
сигнал 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
Откуда: Барнаул

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

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

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

Привет!
Я не Олег, но сразу вижу грабли, на которых лично получал ...


Buy = H >= BuyLevel & L<BuyLevel;
BuyPrice = BuyLevel;
Short = L <ShortLevel>ShortLevel;
ShortPrice = ShortLevel;


Извини, что не получается вставить значок меньшеилиравно. Движок форума что-то дурит. Строчку Short =... надо переписать по аналогии с Buy = ...

Ну и дописать, что Sell = Cover = 0;
так как закрывается позиция, исходя из кода, по ApplyStop.

Успехов!
Посмотреть профиль Отправить личное сообщение
dymos



Зарегистрирован: 01.06.2008
Сообщения: 6
Откуда: Барнаул

СообщениеДобавлено: Чт Июл 03, 2008 8:56 am Ответить с цитатой Вернуться к началу

благодарю настырный! всё получилось как я и хотел.
вот что получилось:

_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

СообщениеДобавлено: Пт Мар 27, 2009 7:57 pm Ответить с цитатой Вернуться к началу

Моя любимая система (и мой любимый автор), которая дала не только хорошие результаты на тестах, но и породила другие интересные варианты))
Вообще я мало авторов читал, но после Ларри я понял, что получать прибыль на рынках можно.
Уж не знаю почему, но ваш код у меня вообще в минус уходит при любом раскладе.
Вот мой первый код, который сразу дал приемлемый результат:

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
Откуда: Воображляндия

СообщениеДобавлено: Сб Мар 28, 2009 9:28 pm Ответить с цитатой Вернуться к началу

Похоже системка и в правду рабочая Smile

_________________
Антон
Посмотреть профиль Отправить личное сообщение
kosbar



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

СообщениеДобавлено: Сб Мар 28, 2009 11:48 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Вс Мар 29, 2009 3:03 am Ответить с цитатой Вернуться к началу

А вот система, которая выдала у меня пока лучшие результаты:

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
Откуда: Воображляндия

СообщениеДобавлено: Вс Мар 29, 2009 11:08 am Ответить с цитатой Вернуться к началу

Немного доработал
+ убрал лишние сигналы
+ добавил стрелочки

Вот только возник вопрос: почему я не могу протестировать тестером эту систему на индексе РТС (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

СообщениеДобавлено: Вс Мар 29, 2009 1:19 pm Ответить с цитатой Вернуться к началу

Амиброкеровец писал(а):
Немного доработал
+ убрал лишние сигналы
+ добавил стрелочки
Твоя система дала везде отрицательные результаты, в тестере после оптимизации везде в минус.
Или я что-то не так делаю!?
Посмотреть профиль Отправить личное сообщение ICQ Number
Амиброкеровец



Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия

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

написал тебе в ICQ

_________________
Антон
Посмотреть профиль Отправить личное сообщение
Сергей



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

СообщениеДобавлено: Вс Мар 29, 2009 3:27 pm Ответить с цитатой Вернуться к началу

Вы неправильно указываете уровни цен, должно быть не BuyPrice = BuyLevel; и ShortPrice =ShortLevel; а вот так BuyPrice =Max(O, BuyLevel); ShortPrice =Min(O, ShortLevel); , тоже самое и для Sellprice и Coverprice.
Посмотреть профиль Отправить личное сообщение
kosbar



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

СообщениеДобавлено: Вс Мар 29, 2009 5:52 pm Ответить с цитатой Вернуться к началу

Сергей писал(а):
Вы неправильно указываете уровни цен, должно быть не BuyPrice = BuyLevel; и ShortPrice =ShortLevel; а вот так BuyPrice =Max(O, BuyLevel); ShortPrice =Min(O, ShortLevel); , тоже самое и для Sellprice и Coverprice.

Дык, цена покупки (и продажи) так и так выстраевается от Открытия, зачем же брать максимальное (минимальное) значение (если только в моём коде). И тем не менее, поменял в предложенном не мною коде, результат ни на каплю не улучшился.
А вот мой код действительно стал чуть лучше)))) если сделать эту замену.
Фильтровать давайте, предлагаю SARом =)
Сам займусь этим в апреле, а то дел накопил, ами такая штука, сядешь вечерком и вдруг восход и время шесть утра... Wink
Посмотреть профиль Отправить личное сообщение ICQ Number
Сергей



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

СообщениеДобавлено: Вс Мар 29, 2009 10:18 pm Ответить с цитатой Вернуться к началу

kosbar писал(а):
Сергей писал(а):
Вы неправильно указываете уровни цен, должно быть не BuyPrice = BuyLevel; и ShortPrice =ShortLevel; а вот так BuyPrice =Max(O, BuyLevel); ShortPrice =Min(O, ShortLevel); , тоже самое и для Sellprice и Coverprice.

Дык, цена покупки (и продажи) так и так выстраевается от Открытия, зачем же брать максимальное (минимальное) значение (если только в моём коде). И тем не менее, поменял в предложенном не мною коде, результат ни на каплю не улучшился.
А вот мой код действительно стал чуть лучше)))) если сделать эту замену.
Фильтровать давайте, предлагаю SARом =)
Сам займусь этим в апреле, а то дел накопил, ами такая штука, сядешь вечерком и вдруг восход и время шесть утра... Wink

С чего бы она бралась от открытия когда сигнал допустим покупки происходит во время касания H Buylevel ? Покупаете на Buylevel а тестер считает по ценам открытия бара, оригинально) Я добавил MAX потому что при гэпе бар откроется намного выше уровня покупки естественно сразу будет сигнал на покупку и только в этом случае она будет равнятся O.
Посмотреть профиль Отправить личное сообщение
kosbar



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

СообщениеДобавлено: Пн Мар 30, 2009 1:20 am Ответить с цитатой Вернуться к началу

Сергей писал(а):
С чего бы она бралась от открытия когда сигнал допустим покупки происходит во время касания H Buylevel ? Покупаете на Buylevel а тестер считает по ценам открытия бара, оригинально) Я добавил MAX потому что при гэпе бар откроется намного выше уровня покупки естественно сразу будет сигнал на покупку и только в этом случае она будет равнятся O.


Buylevel = Open + что-то там.
Buy = если BuyLevel < High.

По какой цене он купит!? Зачем тут брать Min Max!? Они ничего не изменят, т.к. условие покупки просто проверяет попала цена покупки в отрезок High-Open или нет. Собственно код это подтверждает, если выставить Min и Max ровным счётом ничего не меняется...
Чо тут думать-то, если цена покупки всегда включает цену открытия, то конечно она всегда будет больше её!

Грубо говоря, цена покупки определяется сразу же, как появляется открытие рынка, и тут же выставляется стоп-заявка на покупку или на продажу соотвественно. Торгуют то в тот же самый бар.
Посмотреть профиль Отправить личное сообщение ICQ Number
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen