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

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

Однако, в Амиброкере можно смоделировать и лимитированный ордер.

Вот один из вариантов моделирования сделки по заданной цене:

Допустим, мы хотим купить или продать  по цене Price , определенной в момент i,

Для совершения сделки со следующего бара,  надо в цикле с начала

установить условие исполнения сделки, а затем определить цену Price :

Примерно так:

В начале программы

Price=0;  //начальное условие цена сделки равна нулю, если заявки нет

….

В цикле пишем условие совершения сделки следующим образом:

Buy[i]=Buy[i-1]; Sell[i]=Sell[i-1];  BuyPrice[i]=BuyPrice[i-1]; SellPrice[i]=SellPrice[i-1];

if (  Price>=Low[i]  AND High[i]>=Price AND Buy[i]==0  ) { Buy[i]=1; BuyPrice[i]=Price; Price=0; Sell[i]=0;  }  //покупка

if (  Price>=Low[i]  AND High[i]>=Price AND Sell[i]==0 ) { Sell[i]=1; SellPrice[i]=Price; Price=0; Buy[i]=0;  }  //продажа

Таким образом, если указанная Вами цена сделки попадает в диапазон

свечи, то сделка исполнится по заданной цене Price.

Далее следует правило определения цены Price

Таким образом, сделка всегда будет совершаться на следующем баре после

формирования заявки на сделку, т.е. установки Price.

Более сложный алгоритм предполагает учет объема свечи.

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

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

Попробую объяснить.
Есть две реалии:
1)  Торговля  на реальном счете. В этом случая я часто использую рыночную заявку .
2) Тестирование различных моделей торговых систем на  истории.
В действительности сделки на исторических данных получаются всегда по определенной цене и строго говоря  относятся к лимитированным.
Даже, если не реализовывать алгоритм, который  я написал ранее , сделки будут совершаться по вполне определенной цене Low,High,Open,close, по крайней мере в Амиброкере.
В  МТ4 есть возможность моделировать рыночные сделки, а в Амиброкер такой возможности нет
Поэтому системы, результаты которых я привожу в Амиброкере всегда реализуют лимированную заявку.

Tags: , , , , ,

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

Предлагаю Вашему вниманию результаты тестирования торговой системы.

Для того, чтобы Вы могли сравнить решения робота с Вашими собственными , я привожу подробный фрагмент сигналов торговой системы.

Скептики скажут, что это не реальный счет, а исторические данные.

Но, никто и не говорит обратное.

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

Попробуйте сделать это лучше, чем данная торговая система, хотя бы на исторических данных.

Исходные условия:

Система работает на временных интервалах от 5 до 60 минут.

Результаты не сильно отличаются.

В системе нет подгоняемых параметров.

Для определенности возьмем тайм фрейм 10 минут.

Система работает по неизменному алгоритму на интервале от 2007 года по настоящее время.

Система торгует лишь в лонг , без плечей и реинвестирования прибыли.

Депозит 10 000 рублей.  Комиссия брокера 0.03%

Торгуем акциями Сбербанка.

На рис приведены сигналы системы  с 30 июля по 7 августа текущего года.

За период с 1.01.2010 по 07.08.2010 система совершила 773 сделки, из них прибыльных 40%.

Прибыль составила 69%.

Максимальная просадка составила 4%.

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

Т.е. начало торговли до кризиса.

Система совершила 4146 сделок, из них прибыльных 40%

Прибыль составила 590%.

Максимальная просадка составила 14%.

На рисунки приведен график цены и прибыльности системы

Серым цветом отображена величина депозита, зеленым – свободная прибыль системы.

Tags: , , , , ,

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

В Амиброкер есть возможность программировать действия с векторами данных .

Этот метод позволяет существенно ускорить вычисления, но непривычен для начинающих.

Чтобы избежать ошибок и делать так как привычно предлагаю следующий  вариант заготовки для написания собственной системы:

//~~~~~Начало примера~~~~~~~~~~~~~~~

//Пример Николай Камынин 31072010
//сигналы формируем в цикле   покупка,  если Текущий High>Предыдущего
// продажа,  если Предыдущий Low больше текущего
// выводим на график вектором
// в примере задаем цену сделки равной цене закрытия бара установить в  Backtester в setting начальный капитал и тайм фрейм (1 час)
Buy[0]=0;
Sell[0]=1;
for( i = 1; i < BarCount; i++ ) { Buy[i]= Buy[i-1]; Sell[i]=Sell[i-1];
if ( High[i]>High[i-1] AND Buy[i]==0 ) { Buy[i]=1; Sell[i]=0; BuyPrice[i]=Close[i]; }
if (Low[i-1]>Low[i]  AND Sell[i]==0 ) { Sell[i]=1; Buy[i]=0; SellPrice[i]=Close[i];}

}
PlotShapes( IIf( Buy AND Ref(Buy,-1)==0 ,shapeUpArrow,shapeNone ),colorWhite,0,BuyPrice );
PlotShapes( IIf( Sell AND Ref(Sell,-1)==0 ,shapeDownArrow,shapeNone ),colorYellow,0,SellPrice);

//~~~~~~~конец примера

В этом примере формирование условий купли/продажи выполняется для каждой свечи в цикле,

а для отображения результатов на графике используется векторный вывод сигналов на график

Вот как выглядит результат для Сбербанка на интервале 1 час на дату 29.07.2010