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

В качестве эталона предложил идеальную торговую стратегию 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 час

 

This entry was posted on Среда, 27 июня, 2012 at 21:09 and is filed under QUIK и Amibroker, торговые роботы (МТС), Фондовый рынок. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

4 comments so far

Alexander
 1 

Ещё больше прибыли получится, если сторговать по-нарошку каждую свечку от high до low или от low до high. Даже с комиссией прибыль будет огромна и отображает «истинный» потенциал рынка. Примерно увеличение депозита за месяц в 10 раз. Но так угадывать никому не удавалось. Если бы удалось, то всё равно ему сделать это бы не дали…
По делу. Алгоритм интересный. Главное — параметр — время экстремума. Это очень важно! Спасибо.

9 августа, 2012 at 16:02
Kamynin
 2 

Вариант эталонной системы с суммированием разности High и Low очень плохой.
Дело в том, что при этом Мы не знаем что было раньше максимум или минимум.
Поэтому в этом алгоритме мы не только заглядываем в будущее, но и искажаем прошлое.
В моем же алгоритме мы ничего не искажаем, а лишь немного подглядываем.

9 августа, 2012 at 20:58
Denis
 3 

Николай, вопрос может и не по теме, но вссё же спрошу. Попробовал написать формулу в амиброкер для данной стратегии. Всё работает, но проблема в том, что немогу в амиброкере сделать так, чтобы максимальное количество контрактов увеличилось максимум до 15 и дальше, с увеличением депозита, больше 15 контрактов не торговала стратегия! Спасибо!

22 августа, 2012 at 12:42
Kamynin
 4 

Добрый день!
Такой режим я не программировал.
Могу лишь посоветовать встроить управление позицией в расчет Backtest,
используя функцию Status(«action»)

23 августа, 2012 at 08:28