NKIS- Идеальная торговая стратегия

27 июня, 2012

В статье «Новая парадигма тестирования торговых стратегий и роботов» я описал мою концепцую для оценки эффективности торговых стратегий и роботов.

В качестве эталона предложил идеальную торговую стратегию NKIS.

В статье приведен алгоритм на языке программирования C++.

//NKIS сигнал Buy=Cover — «купить или  закрыть шорт»:

if (j-iS->x.last()==1) {

if (iS->x.pref()>=iR->x.last() && iS->y.pref()>iS->y.last() ) Buy[iS->x.pref()]=0;

            Buy[iS->x.last()]=1;   BuyPrice[iS->x.last()]=iS->y.last();

}

//NKIS  сигнал Sell=Short — «продать или  открыть шорт»:

if (j-iR->x.last()==1) {

if (iR->x.pref()>=iS->x.last() && iR->y.last()>iR->y.pref() ) Sell[iR->x.pref()]=0;

            Sell[iR->x.last()]=1; SellPrice[iS->x.last()]=iR->y.last();

}

где j — текущее время;

iS->x.last(),iS->y.last()  — время и значение последнего локального минимума;

iR->x.last(),iR->y.last()  — время и значение последнего локального максимума;

iS->x.pref(),iS->y.pref()   — время и значение предыдущего локального минимума;

iR->x.pref(),iR->y.pref() — время и значение предыдущего локального максимума

Учитывая  просьбу читателей пояснить данный алгоритм для возможности его реализации на других языках программирования, попробую рассказать его иначе.

Исходными данными для реализации NKIS являются отсчеты экстремальных значений цены.

Такие значение можно получить, например, функцией fraktal , встроенной в QUIK,

любой другой функцией, определяющей локальные максимумы и минимумы.

Обозначим значения максимумов R, а значения минмумумов S.

алгоритм NKIS сожно перемисать так:

Buy=S — сигнал «купить» в момент возникновения минимума и по цене минимума;

Sell=R — сигнал «продать» в момент возникновения максимума и по цене максимума.

Кроме того, необходимо обеспечить следующее условие:

Обычно сигналы R и S чередуются.

Но, при сильных трендах,  возможна ситуация, когда два одноименных сигнала появляются последовательно. в этом случае надо отменить Buy, если подряд следуют S и отменить Sell , если подряд следуют R.

NKIS реализуется на любом тайме и позволяет сравнивать различные торговые алгоритмы на различных рынках.

Для наглядности приведу графики сигналов NKIS:

тайм 5 минут

 

 

 

 

 

 

 

тайм 1 час

 

Новая парадигма тестирования торговых стратегий и роботов

26 июня, 2012

Автор: Николай Камынин

Данная статья посвящена новому авторскому принципу оценки эффективности торговых стратегий и роботов.

В настоящее время оценку эффективности торговых стратегий помимо расчета различных коэффициентов , осуществляют путем сравнения с результатом стратегии «купил и держи».

При этом, стратегия «купил и держи» фактически отражает движение цены и малопригодна для количественной оценки эффективности созданной стратегии.

 Кроме того, применяемые числовые коэффициенты , такие как:

Net Profit %, Exposure %, Net Risk Adjusted Return %,Annual Return %,Risk Adjusted Return %, Avg. Profit %, Avg. Loss %,Max. Consecutive,Max. trade % drawdown,Max. system % drawdown,Recovery Factor,CAR/MaxDD,RAR/MaxDD,Profit Factor,Payoff Ratio,Risk-Reward Ratio,Ulcer Index,Ulcer Performance Index,Sharpe Ratio of trades,K-Ratio не позволяют оценить эффективность торгового робота или стратегии при его работе на различных рынках,таймах и инструментах.

Например, если робот на ациях сбербанка показал прибыль в 100%, а другой робот на акциях газпрома показал прибыль в 90%, то как сравнить эффективность торговых алгоритмов между собой.

Мною разработана  новая авторская концепция , позволяющая оценивать эффективность роботов для различных рынков и таймов.

Данная концепция основана на сравнении эффективности работы робота или стратегии с идельным алгоритмом торговли.

Для этой цели , я ввел понятие «идеальная стратегия» и назвал ее —NKIS.

В настоящее время алгоритм  NKIS на языке С++  следующий:

//NKIS сигнал Buy=Cover — «купить или  закрыть шорт»:

if (j-iS->x.last()==1) {

if (iS->x.pref()>=iR->x.last() && iS->y.pref()>iS->y.last() ) Buy[iS->x.pref()]=0;

            Buy[iS->x.last()]=1;   BuyPrice[iS->x.last()]=iS->y.last();

}

//NKIS  сигнал Sell=Short — «продать или  открыть шорт»:

if (j-iR->x.last()==1) {

if (iR->x.pref()>=iS->x.last() && iR->y.last()>iR->y.pref() ) Sell[iR->x.pref()]=0;

            Sell[iR->x.last()]=1; SellPrice[iS->x.last()]=iR->y.last();

}

где j — текущее время;

iS->x.last(),iS->y.last()  — время и значение последнего локального минимума;

iR->x.last(),iR->y.last()  — время и значение последнего локального максимума;

iS->x.pref(),iS->y.pref()   — время и значение предыдущего локального минимума;

iR->x.pref(),iR->y.pref() — время и значение предыдущего локального максимума

Проведем оценку параметров алгоритма NKIS для акции сбербанка,

на истории сделок с 01.01.2007 г по 25.06.2012.

Условия торговли примем следующие:

Комиссия — 0.

Сумма депозита постоянная для любой сделки и равна  100 000.

Cделка на всю сумму депозита.

Без плеча.

Без реинвестирования прибыли.

Тайм — 5 минут

All trades

Long trades

Short trades

Net Profit %

34255.55 %

17269.95 %

16985.60 %

Exposure %

1.79 %

0.87 %

0.92 %

Net Risk Adjusted Return %

1916787.03 %

1981175.21 %

1855474.59 %

Annual Return %

191.21 %

157.04 %

156.26 %

Risk Adjusted Return %

10699.47 %

18014.81 %

17069.56 %

All trades

43915

21958 (50.00 %)

21957 (50.00 %)

 Avg. Profit/Loss

780.04

786.50

773.58

 Avg. Profit/Loss %

0.78 %

0.79 %

0.77 %

 Avg. Bars Held

3.96

3.94

3.98

Winners

43810 (99.76 %)

21899 (49.87 %)

21911 (49.89 %)

 Avg. Profit %

0.78 %

0.79 %

0.78 %

 Avg. Bars Held

3.95

3.93

3.97

 Max. Consecutive

2022

2377

1781

 # bars in largest win

6

2

6

Losers

105 (0.24 %)

59 (0.13 %)

46 (0.10 %)

 Avg. Loss %

-0.29 %

-0.29 %

-0.29 %

 Avg. Bars Held

7.62

7.64

7.59

 Max. Consecutive

1

1

1

 # bars in largest loss

13

10

13

Max. trade % drawdown

-5.33 %

-3.69 %

-5.33 %

Max. system % drawdown

-1.13 %

-1.64 %

-0.37 %

Recovery Factor

5959.61

4620.16

2955.07

CAR/MaxDD

169.07

95.66

425.50

RAR/MaxDD

9460.36

10973.49

46481.15

Profit Factor

1123.76

1002.86

1280.78

Payoff Ratio

2.69

2.70

2.69

Risk-Reward Ratio

3.90

3.89

3.91

Ulcer Index

0.01

0.01

0.00

Ulcer Performance Index

25068.62

14924.67

33942.83

Sharpe Ratio of trades

71.80

71.19

72.46

K-Ratio

0.0171

0.0170

0.0171

Для наглядности приведу результаты Робота Вася при тех же условиях:

All trades

Long trades

Short trades

Net Profit %

3156.91 %

1597.34 %

1559.57 %

Exposure %

12.79 %

7.62 %

5.17 %

Net Risk Adjusted Return %

24678.85 %

20963.42 %

30152.32 %

Annual Return %

89.20 %

67.92 %

67.23 %

Risk Adjusted Return %

697.30 %

891.41 %

1299.85 %

All trades

2773

1387 (50.02 %)

1386 (49.98 %)

 Avg. Profit/Loss

1138.44

1151.65

1125.23

 Avg. Profit/Loss %

1.14 %

1.15 %

1.13 %

 Avg. Bars Held

47.67

54.98

40.35

Winners

1873 (67.54 %)

907 (32.71 %)

966 (34.84 %)

 Avg. Profit %

2.03 %

2.18 %

1.90 %

 Avg. Bars Held

53.36

63.62

43.73

 Max. Consecutive

50

31

34

 # bars in largest win

88

48

88

Losers

900 (32.46 %)

480 (17.31 %)

420 (15.15 %)

 Avg. Loss %

-0.72 %

-0.78 %

-0.66 %

 Avg. Bars Held

35.82

38.67

32.58

 Max. Consecutive

6

8

5

 # bars in largest loss

285

285

72

Max. trade % drawdown

-15.33 %

-15.33 %

-12.06 %

Max. system % drawdown

-4.55 %

-6.30 %

-3.31 %

Recovery Factor

132.71

89.10

128.40

CAR/MaxDD

19.59

10.79

20.30

RAR/MaxDD

153.11

141.59

392.44

Profit Factor

5.84

5.25

6.66

Payoff Ratio

2.81

2.78

2.90

Risk-Reward Ratio

2.78

3.00

2.48

Ulcer Index

0.36

0.55

0.45

Ulcer Performance Index

232.68

113.56

137.60

Sharpe Ratio of trades

9.05

8.15

10.20

K-Ratio

0.0121

0.0131

0.0108

Эффективность роботВася относительно NKIS:

Net Profit= 3156/34255= 9%

Profit Factor    =5.8/1120 =0.5%

Max. trade % drawdown

для NKIS составляет 5.3%, для робота Вася 15.3%,что в 3 раза хуже,

и так далее.

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

Предложен базовый алгоритм идеальной торговой стратегии NKIS.

Концепция позволяет сравнивать по единой методике различные алгоритмы на различных рынках,  различных таймах и различных условиях торговли, путем сравнительной оценки результаов с результатами идеальной стратегии NKIS.