Как то в прошлой жизни, ко мне в лабораторию пришел студент 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(C—O);
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 |
Ну и так далее, до бесконечности, все простые алгоритмы на истории будут всегда прибыльными — это аксиома