Чудеса в решете(3)

21 января, 2013

Как то в прошлой жизни, ко мне в лабораторию пришел студент 3-го курса.

Курс микропроцессоров, им читался с 4-го курса.

Он попросил меня дать ему что-нибудь поэкспериментировать с микропроцессором.

Я спросил, что он о них знает, ничего — ответил он.

Что тогда будешь делать?

Ну сказал он, подумав, буду изучать сигналы на выводах микросхемы.

Так их там 144 , и жизни не хватит , чтобы что-то понять. Надо бы для начала теорию изучить.

Теория не интересна,  я люблю паяльником паять ; жизнерабостно ответил студент.

~~~~~~~~~~~~~~~~~~~~~~~~~~~

Это я к тому, что алгоритмов на тему  «если свеча(цена) больше, то купить (продать)» можно написать бесконечное множество.

И , как это не удивательно, все они будут прибыльными на истории ,

при тайме 1 час и подбора 1-2 параметров,.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Ну вот к примеру алгоритм :

 

/*

 Math.Abs(Close[bar-3]-Open[bar-3])>(Math.Abs(Close[bar]-Open[bar])+Math.Abs(Close[bar-1]-Open[bar-1])+Math.Abs(Close[bar-2]-Open[bar-2])+Math.Abs(Close[bar-6]-Open[bar-6])+Math.Abs(Close[bar-5]-Open[bar-5]))

&

Close[bar-3]> Open[bar-3])

 

Body[bar-3]>(Body[bar]+Body[bar-1]+Body[bar-2]+Body[bar-6]+Body[bar-5])

&

Close[bar-3]> Open[bar-3])

Мы ловим белую свечу, величина тела которой больше суммы двух предыдущих, а также больше суммы трех последующих. Описать это можно так — цены были в боковике, совершили движение вверх и снова легли в боковик. Вот в такой ситуации входим в лонг на 50% счета по каждой из бумаг. В качестве инструментов я взял два Сбера, Транснефть и ХолМРСК.

Выходим аз позиции простым скользящим стопом

*/

 

Вот его реализация в Амиброкере:

 

Comission=0.06;

SetOption( «CommissionMode», 1); /* set commissions впроцентахоттрейда */

SetOption( «CommissionAmount», Comission); /* commissions величина */

FixedDollarAmount = 100000;

SetOption( «MaxOpenPositions»,  1);

PositionSize=FixedDollarAmount;

SetOption( «initialequity», FixedDollarAmount); /* starting capital */

 

White=IIf(C>O,True,False);

Body=abs(CO);

Buy=Ref(Body,-3)>(Body+Ref(Body,-1)+Ref(Body,-2)+Ref(Body,-6)+Ref(Body,-5) ) AND Ref(White,-3);

Sell=0;

ApplyStop( stopTypeTrailing, 1,  Optimize(«amount»,6,1, 40,1 ), 0, True );

 

Это результат тестирования на интервале 1 час, без реинвестирования.

 

 

All trades

Long trades

Initial capital

100000.00

100000.00

Net Profit %

188.38 %

188.38 %

Exposure %

52.95 %

52.95 %

Net Risk Adjusted Return %

355.74 %

355.74 %

Annual Return %

19.20 %

19.20 %

Risk Adjusted Return %

36.26 %

36.26 %

All trades

65

65 (100.00 %)

 Avg. Profit/Loss %

2.07 %

2.07 %

Winners

26 (40.00 %)

26 (40.00 %)

 Avg. Profit %

12.01 %

12.01 %

Losers

39 (60.00 %)

39 (60.00 %)

 Avg. Loss %

-4.56 %

-4.56 %

Max. trade % drawdown

-8.42 %

-8.42 %

Max. system % drawdown

-33.62 %

-33.62 %

Recovery Factor

2.76

2.76

CAR/MaxDD

0.57

0.57

RAR/MaxDD

1.08

1.08

Profit Factor

1.62

1.62

Payoff Ratio

2.43

2.43

Risk-Reward Ratio

1.41

1.41

Ulcer Index

14.75

14.75

Ulcer Performance Index

0.94

0.94

Sharpe Ratio of trades

0.86

0.86

K-Ratio

0.0212

0.0212

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

Теперь обратимся к теории и построим еще один простой алгоритм на основе МА.

Если посмотрите мои предыдущие статьи, то найдете простейшую волновую модель рынка.

Вот на ее основе и построим алгоритм торговли:

Если минимум свечи превысит МА (скользящую среднюю) то покупаем,

если  максимум свечи ниже MA — продаем.

Кроме того, добавим скользящий стоп-лосс.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Программа в Амиброкере будет такой:

 

Comission=0.06;

SetOption( «CommissionMode», 1); /* set commissions впроцентахоттрейда */

SetOption( «CommissionAmount», Comission); /* commissions величина */

FixedDollarAmount = 100000;

SetOption( «initialequity», FixedDollarAmount); /* starting capital */

SetOption( «MaxOpenPositions»,  1); /* I don’t want to comit more than 60% of Equity at any one time */

PositionSize=FixedDollarAmount;

N1=Optimize(«Len»,6,1, 40,1 );

y1=MA(C,N1);

Buy=Cross(L,y1);

Sell=Cross(y1,H);

ApplyStop( stopTypeTrailing, 1,  Optimize(«amount»,6,1, 40,1 ), 0, True );

~~~~~~~~~~~~~~~~~~~~~~~~~~~

А вот ее результат:

All trades

Long trades

Initial capital

100000.00

100000.00

Net Profit %

314.46 %

314.46 %

Exposure %

52.09 %

52.09 %

Net Risk Adjusted Return %

603.70 %

603.70 %

Annual Return %

26.59 %

26.59 %

Risk Adjusted Return %

51.05 %

51.05 %

All trades

290

290 (100.00 %)

 Avg. Profit/Loss %

0.63 %

0.63 %

Winners

101 (34.83 %)

101 (34.83 %)

 Avg. Profit %

5.26 %

5.26 %

Losers

189 (65.17 %)

189 (65.17 %)

 Avg. Loss %

-1.84 %

-1.84 %

Max. trade % drawdown

-13.08 %

-13.08 %

Max. system % drawdown

-55.84 %

-55.84 %

Recovery Factor

3.36

3.36

CAR/MaxDD

0.48

0.48

RAR/MaxDD

0.91

0.91

Profit Factor

1.46

1.46

Payoff Ratio

2.74

2.74

Risk-Reward Ratio

1.30

1.30

Ulcer Index

18.87

18.87

Ulcer Performance Index

1.12

1.12

Sharpe Ratio of trades

0.97

0.97

K-Ratio

0.0196

0.0196

Ну и так далее, до бесконечности, все простые алгоритмы на истории будут всегда прибыльными — это аксиома

Чудеса в решете(2)

18 января, 2013

В продолжении вопроса о способах тестирования,

попробую объяснить свое видение как же тестировать системы на длительном интервале истории.

Вы можете спросить, как же так, если депозит в начале теста 10 тысяч, а потом вырос до 10 миллионов, то почему же надо торговать лишь на 10 тысяч?

Но, позвольте, почему же на 10?

Моя аксиома определяет лишь сумму в сделке.

Эта сумма должна быть постоянной на всем интервале.

Но никто Вас не ограничивает в количестве сделок, которые Вы используете для формирования позиции.

Т е если у Вас на счете 10 миллионов, то вполне разумно не входить в позицию сразу на все 10 миллионов, а постепенно наращивать позицию по мере развития тренда.

Таким образом, вторая аксиома звучит так:

Использование реинвестирования прибыли надо реализовывать путем строительства пирамиды.

Т е позиция создается из множества сделок, но размер каждой сделки постоянный на всем интервале тестирования.