Индикаторы: Rabbit - страница 9

 

Скрипт AutoRabbit v19.06.10 для автоматического выставления ордеров по новой стратегии использования индикатора Rabbit:

// AutoRabbit v19.06.10
#property copyright "Jon Katana"
#property show_inputs
extern double Up=0;
extern double Down=0;
extern int Step=0;
extern string Expiration="2010.00.00 23:00";
extern int Levels=5;
extern double Vol=0;
extern int Spread=0;
int start()
{datetime R=StrToTime(Expiration);
for(int i=0;i<Levels;i++)
{OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(i*Step+Spread)*Point,0,Up+(i-0.5)*Step*Point,Up+(i+1)*Step*Point,0,0,R);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+i*Step*Point,0,Up+((i+0.5)*Step+Spread)*Point,Up+((i-1)*Step+Spread)*Point,0,0,R);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Down-i*Step*Point,0,Down-((i-0.5)*Step-Spread)*Point,Down-((i+1)*Step-Spread)*Point,0,0,R);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down-(i*Step-Spread)*Point,0,Down-(i+0.5)*Step*Point,Down-(i-1)*Step*Point,0,0,R);}
Alert(" AutoRabbit OK");
return(0);}

Параметры, которые нужно ввести при запуске скрипта на графике:

Up - цена первой линии индикатора Rabbit над ценой, с которой скрипт начнет ставить пары ордеров вверх (например, 1.4550);

Down - цена первой линии индикатора Rabbit под ценой, с которой скрипт начнет ставить пары ордеров вниз (например, 1.4500);

Step - расстояние между соседними уровнями Rabbit (отображается в верхнем левом углу графика) (например, 50);

Expiration - дата и время удаления не сработавших отложенных ордеров, ставить нужно до конца текущего дня (например, 2010.06.19 23:00);

Levels - количество уровней Rabbit, на которых будут выставлены парные ордера (например, 5 - тогда AutoRabbit поставит ордера на 5 уровнях вверх от цены и на 5 уровнях вниз от цены);

Vol - объем одного ордера (например, 0.1);

Spread - размер спреда для текущего инструмента (например, 3), если значение задать равным 0, то скрипт не будет смещать ордера для привязки к цене Bid.

Неизвестно по какой причине (возможно, округление последней цифры), но скрипт чуть смещает ордера относительно уровней - первые ставит точно, ордера на 2-3 уровнях от цены смещает на 1 пункт, на 4-5 - на два пункта и так далее. Пытался побороть это всеми известными мне способами - пока безрезультатно. Но так как смещение невелико, скрипт вполне можно использовать - скорость его работы около 30 ордеров в минуту, каждый со Stop Loss, Take Profit и датой истечения.

 

Скрипт AutoRabbit v23.06.10 для выставления ордеров по новой стратегии использования уровней индикатора Rabbit с увеличенным масштабом (Take Profit равен 2*Step, Stop Loss равен Step), а также со скорректированными Take Profit (смещаются на 3 Spread'а для сохранения соотношения 1 Take Profit = 2 Stop Loss):

// AutoRabbit v23.06.10
#property copyright "Jon Katana"
#property show_inputs
extern double Up=0;
extern double Down=0;
extern int Step=0;
extern string Expiration="2010.00.00 23:00";
extern int Levels=5;
extern double Vol=0;
extern int Spread=0;
int start()
{datetime R=StrToTime(Expiration);
for(int i=0;i<Levels;i++)
{OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(i*Step+Spread)*Point,0,Up+(i-1)*Step*Point,Up+((i+2)*Step+3*Spread)*Point,0,0,R);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+i*Step*Point,0,Up+((i+1)*Step+Spread)*Point,Up+((i-2)*Step-2*Spread)*Point,0,0,R);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Down-i*Step*Point,0,Down-((i-1)*Step-Spread)*Point,Down-((i+2)*Step+2*Spread)*Point,0,0,R);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down-(i*Step-Spread)*Point,0,Down-(i+1)*Step*Point,Down-((i-2)*Step-3*Spread)*Point,0,0,R);}
Alert(" AutoRabbit OK");
return(0);}
 

Еще один скрипт для флетовых инструментов, выставляет только перевернутые ордера (Buy Limit и Sell Limit) с Take Profit = Stop Loss = Step:

// AutoRabbit v10.07.10
#property copyright "Jon Katana"
#property show_inputs
extern double Up=0;
extern double Down=0;
extern int Step=0;
extern string Expiration="2010.00.00 23:00";
extern int Levels=5;
extern double Vol=0;
extern int Spread=0;
int start()
{datetime R=StrToTime(Expiration);
for(int i=0;i<Levels;i++)
{OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+i*Step*Point,0,Up+((i+1)*Step+Spread)*Point,Up+((i-1)*Step+Spread)*Point,0,0,R);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down-(i*Step-Spread)*Point,0,Down-(i+1)*Step*Point,Down-(i-1)*Step*Point,0,0,R);}
Alert(" AutoRabbit OK");
return(0);}
 

Скрипт StrikeRabbit v21.07.10 для выставления прямых ордеров (Buy Stop и Sell Stop) на уровнях индикатора Rabbit с Take Profit и Stop Loss равными расстоянию между соседними уровнями (Step):

// StrikeRabbit v21.07.10
#property copyright "Jon Katana"
#property show_inputs
extern double Up=0;
extern double Down=0;
extern int Step=0;
extern string Expiration="2010.00.00 23:00";
extern int Levels=0;
extern double Vol=0;
extern int Spread=0;
int start()
{datetime R=StrToTime(Expiration);
for(int i=0;i<Levels;i++)
{OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(i*Step+Spread)*Point,0,Up+(i-1)*Step*Point,Up+(i+1)*Step*Point,0,0,R);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Down-i*Step*Point,0,Down-((i-1)*Step-Spread)*Point,Down-(i+1)*Step*Point,0,0,R);}
Alert(" StrikeRabbit OK");
return(0);}
 

Привяжи эту сетку к Open Daily и картина станет вконец красивой

 

Предлагаю на сегодняшний день самый прибыльный алгоритм выставления ордеров с использованием уровней Rabbit. Алгоритм флетовый с защитой от тренда ограничением числа ордеров. Так как сильному трендовому движению обычно предшествует сжатие хода цены в предыдущий день, а, значит, и расстояния между уровнями Rabbit, то даже в случае безоткатного тренда убыток получается небольшой из-за маленького расстояния между уровнями. Зато после тренда уровни расходятся широко и почти наверняка в такой день будет флет - с шириной коридора в несколько раз больше трендового, что позволяет отыграть убыток за один - два сработавших в плюс ордера. Любое флетовое движение автоматически приносит прибыль. Ордера не нуждаются в обслуживании - выставив их с утра, можно до следующего утра к ним не возвращаться.

Принцип выставления - на двух ближайших к цене уровнях Rabbit ставятся перевернутые ордера Buy Limit и Sell Limit с Take Profit и Stop Loss равными Step:

// Double Reverse Rabbit v31.07.10
#property copyright "Jon Katana"
#property show_inputs
extern double Up=0;
extern double Down=0;
extern int Step=0;
extern string Expiration="2010.08.00 23:00";
extern double Vol=0;
extern int Spread=0;
int start()
{datetime R=StrToTime(Expiration);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up,0,Up+(Step+Spread)*Point,Up+(Spread-Step)*Point,0,0,R);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+Step*Point,0,Up+(2*Step+Spread)*Point,Up+Spread*Point,0,0,R);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down+Spread*Point,0,Down-Step*Point,Down+Step*Point,0,0,R);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down-(Step-Spread)*Point,0,Down-2*Step*Point,Down,0,0,R);
Alert(" Double Reverse Rabbit OK");
return(0);}
 
Aleks_Ivan:

Привяжи эту сетку к Open Daily и картина станет вконец красивой

Цены Open и Close не имеют никакого значения - они мусорные и получены в результате разделения непрерывного потока цен временными интервалами. Торговля в мире не останавливается и не начинается заново, когда проходит, например, минута. Просто для удобства восприятия информации на исторических данных цена искусственно обрывается по прошествии выбранного отрезка времени и на графике начинается отрисовка новой свечи/бара. Наиболее верная картина потоковой цены - это представление графика в виде минутных баров, сдвинутых масштабом друг к другу так, чтобы не было видно поперечных веток. Это истинное лицо форекса.

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

 

Небольшое, но важное дополнение к флетовой стратегии использования Rabbit. У ближних к цене перевернутых ордеров Stop Loss сдвигается на два Step вместо одного и на ближайшие к цене уровни ставятся прямые ордера Buy Stop и Sell Stop с Take Profit = Step и Stop Loss = 2 Step. Это повышает прибыльность предыдущей стратегии для всех возможных траекторий движения цены, причем все возможные убытки в точности равны таковым в предыдущей стратегии. Новый скрипт Flat Rabbit v23.08.10:

// Flat Rabbit v23.08.10
#property copyright "Jon Katana"
#property show_inputs
extern double Up=1.0;
extern double Down=1.0;
extern int Step=500;
extern string Expiration="2010.08.24 23:00";
extern double Vol=0.01;
extern int Spread=28;
int start()
{datetime R=StrToTime(Expiration);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up,0,Up+(2*Step+Spread)*Point,Up+(Spread-Step)*Point,0,0,R);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+Step*Point,0,Up+(2*Step+Spread)*Point,Up+Spread*Point,0,0,R);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Down,0,Down+(2*Step+Spread)*Point,Down-(Step-Spread)*Point,0,0,R);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down+Spread*Point,0,Down-2*Step*Point,Down+Step*Point,0,0,R);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down-(Step-Spread)*Point,0,Down-2*Step*Point,Down,0,0,R);
OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+Spread*Point,0,Up-2*Step*Point,Up+Step*Point,0,0,R);
Alert(" Double Reverse Rabbit OK");
return(0);}
 

Привет. Спасибо за индюк и за скрипт.

Никаких больше новых версий индюка или скрипта не выходило?

Уровни отрабатываются хорошо.

Откуда ты взял цифры процентных пропорций? Ну 0,618 это золотое сечение, а остальные проценты которые ты перечислял ниже?

 
0.618 - это золотое сечение, если его отсчитать от 0. Если же его отложить от 1 к 0, то получится 1 - 0.618 = 0.382, где единица - это размах между минимальным и максимальным значениями, достигнутыми ценой за предыдущий день. Золотое сечение откладывается от 0 (минимального значения) вверх к 1 (максимальному значению), а потом наоборот, от 1 к 0 потому что неизвестно, куда двинется цена сегодня. Расстояние между 0.618 и 0.382 (0.618 - 0.382 = 0.236) - это шаг между уровнями (Step в индикаторе Rabbit). Первые два уровня - это значения 0.618 и 0.382, от которых с шагом 0.236 в обе стороны строятся остальные уровни в любом нужном количестве.