2013-01-03

Russell Day Trade System от George Pruitt

В одном из журналов FuturesTruth за позапрошлый год George Pruitt опубликовал для подписчиков интересную внутридневную систему для фьючерса на индекс Russell 2000, которую впоследствии пытались доработать читатели, в результате чего получилась окончательная версия. Для торговли применяются пятиминутки фьючерса. Код для TradeStation находится во вложении.

Суть системы простая.
Если вчерашнее закрытие больше или равно позавчерашнему и диапазон торговли относительно небольшой, значит сегодня день покупок.
Если вчерашнее закрытие меньше позавчерашнего закрытия и диапазон торговли небольшой, значит сегодня день продаж.
В день покупок открываем длинную позицию величиной в два контракта по стоп ордеру по цене открытия сессии плюс приращение.
В день продаж открываем короткую позицию величиной в два контракта по стоп ордеру по цене открытия сессии минус приращение.
Если после открытия длинной позиции цена прошла определенное расстояние в направлении позиции, устанавливаем трейл-стоп на 1 контракт по цене хай дня минус определенное количество пунктов.
Если после открытия короткой позиции цена прошла определенное расстояние в направлении позиции, устанавливаем трейл-стоп на 1 контракт по цене лоу дня плюс определенное количество пунктов.
Если в позиции остался один контракт, то на второй выставляем стоп в безубыток.
Также изначально при открытии позиции устанавливается стоп-лосс по цене открытия позиции плюс/минус определенное количество пунктов.
Закрываем все что есть на закрытии сессии.


Вот как выглядят сделки


А это эквити со стандартными параметрами с 2000 года до апреля 2011 года, так как у меня есть только такие данные пятиминуток. У кого есть возможность, можете проверить на более свежих данных.
Но если попробовать прооптимизировать, можно добиться более плавной кривой. Для начала попробуем оптимизацию за последние три года в качестве in sample. А потом проверим как это будет работать на более раннем участке с 2000- го года. Получаем вот что:



Теперь смотрим in sample + out of sample за 12 лет


Надо учесть что это все проделывалось без учета комиссии и проскальзывания.
Можно, конечно, перенести логику системы и на другие инструменты, в том числе и на всеми любимый фьючерс РТС. Но при этом надо понимать что система не универсальна так как в ней применяются пункты, и и они характеризуют свойства именно фьючерса на индекс Russell. То что является, например 5 пунктов для Russell, это для фьючерса на РТС вообще ничто. Поэтому, неплохо было бы перевести с пунктов на универсальный язык, то есть на единицы волатильности, тогда систему можно применить для любого инструмента, независимо от величины его пунктов. В том смысле что если например, стоп 10 пунктов это для для Russell эквивалентно, например 2*ATR на пятиминутках. Значит и меняем все что связано с пунктами на соответствующую величину ATR.


Ну и сам код системы для TradeStation

inputs: atrLen(10),stopAmtPoints(10.00),offSetAmt(.2),profitObj1(5),endTradeTime(1530);
vars: atrAmt(0),smallRange(false),canBuy(true),canSell(true),stb(0),sts(0),tkpS(0),tkpL(0),yesTrueRange(0);
vars: buysToday(0),sellsToday(0),j(0),longLossPt(0),shortLossPt(0);

{Plot on 5 minute day session - programmed by George Pruitt}
{I used the OpenD(),HighD(),LowD(),CloseD() functions to get
the prior day’s highs and lows and closes }

value1 = 0;

for j = 1 to atrLen
begin
value1 = value1 + maxList(closeD(j+1),highD(j)) - minList(closeD(j+1),lowD(j));
end;

atrAmt = value1/atrLen;
yesTrueRange = maxList(closeD(2),highD(1)) - minList(closeD(2),lowD(1));
smallRange = yesTrueRange < atrAmt;

if(date<>date[1]) then // first bar of the day
begin
canBuy = false;
canSell = false;
buysToday = 0;
sellsToday = 0;
end;

if marketPosition = 1 then buysToday = 1; // if we already bot then no more buys
if marketPosition =-1 then sellsToday = 1;

stb = openD(0) + offSetAmt * atrAmt;
sts = openD(0) - offSetAmt * atrAmt;

if(closeD(1)>=closeD(2) and smallRange) then canBuy = true;
if(closeD(1)

if(canBuy and buysToday = 0 and time < endTradeTime) then buy("SFOBuy") 2 contracts next bar stb stop;
if(canSell and sellsToday = 0 and time < endTradeTime ) then sellShort("SFOSell") 2 contracts next bar sts stop;

if currentContracts = 2 and marketPosition = 1 and highD(0) > entryPrice + profitObj1 then sell("LongProf1") 1 contract next bar at highD(0) - 5 stop;
if currentContracts = 2 and marketPosition =-1 and lowD(0) < entryPrice - profitObj1 then buyToCover("ShrtProf1") 1 contract next bar at lowD(0) + 5 stop;

if currentContracts = 1 then sell("L-BreakEven") next bar at entryPrice stop;
if currentContracts = 1 then buyToCover("S-BreakEven") next bar at entryPrice stop;

if marketPosition = 1 then sell("MM-L-Out") next bar at entryPrice - stopAmtPoints stop;
if marketPosition =-1 then buyToCover("MM-S-Out") next bar at entryPrice + stopAmtPoints stop;
setExitOnClose;

1 комментарий:

  1. From the wildly in style Popiñata to the superbly animated Secret Jungle, Slots Empire has ticked every field with its choice of games. You’ll additionally get your payout inside one hour when you decide to use crypto, supplied that your account is ID verified beforehand. We like to play on 코인카지노 cell just as typically as we play on desktop — and Slots.lv delivers properly with its cell compatibility. We additionally beloved Slots.lv’s jackpot games, with a few of them surpassing the $100k jackpot mark .

    ОтветитьУдалить