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

 

Ок. Понял.

Ты писал, что выставляешь ордера в 7:30. Это как то слишком рановато :) Останется ли стратегия эффективной если выставлять ордера скажем в 12:00 по Москве (после открытия Лондона)?

И можно ли выставлять ордера ночью, перед азиатской сессией? (часа в два-три по мск)

 

Пробуйте. Уровни - это опорные линии, на которых выставляются ордера. Как и когда их ставить - личное дело каждого.

Немного модифицировал предыдущую схему, заменив прямые ордера "Крыльями ангела" и сделав размер Take Profit и Stop Loss для всех перевернутых ордеров равными Step. Безстоповые прямые ордера не имеют ограничения по времени для безопасности:

// Krabbit v10.09.10
#property copyright "Jon Katana"
#property show_inputs
extern double Up=0.0;
extern double Down=0.0;
extern int Step=0;
extern string Expiration="2010.09.00 23:00";
extern double Vol=0.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_SELLSTOP,Vol,Down,0,0,0,0,0,0);
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);
OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+Spread*Point,0,0,0,0,0,0);
Alert(" Krabbit Ready");
return(0);}
 

Спасибо Вам за ответы. Я слегка запутался во всех этих стратегиях.

Насколько я понял "Крылья ангела" это стратегия, где прибыль стоп ордеров нужно закрывать вручную (либо закрывать лок). Последняя версия // Krabbit v10.09.10. Немного не ясно для каких движений эта стратегия подходит, для флэта или для трэнда?

Есть другая стратегия, флетовая, версия Flat Rabbit v23.08.10. В ней тоже есть прямые ордера, но у всех ордеров есть тейкпрофит и стоплосс, то есть вручную закрывать сделки не надо.

Правильно ли я понимаю?

 

Я пытаюсь сделать универсальную схему, одинаково хорошо работающую на тренде и при флете. Самая последняя схема - самая прибыльная. Flat Rabbit работает только при флете, ордера в нем закрываются сами. При тренде получается небольшой убыток.

В Krabbit'е убытки тоже возможны, но при обычном флете или тренде он приносит прибыль. Схема такая: на ближайших к цене уровнях Rabbit ставятся свободные прямые ордера Buy Stop и Sell Stop без Take Profit, Stop Loss и без ограничения по времени. Затем на двух первых от цены уровнях в обе стороны ставятся перевернутые ордера Buy Limit и Sell Limit с Take Profit и Stop Loss равными Step, то есть шагу между соседними уровнями.

"Крылья ангела" - это основа. Если с утра начинается и идет хороший тренд - уровней на 4-6 или более, открыв только один ордер "Крыльев ангела", то закрываем его когда захочется либо ставим Trailing Stop в надежде на дальнейшее движение в ту же сторону. Из двух перевернутых ордеров в плюсе может закрыться только дальний при откате, скомпенсировав убыток первого перевернутого ордера. Либо оба закроются с убытком при безоткатном тренде. Итого: 2 прохода между уровнями в минусе, зато 6 (например) в плюсе - в сумме +4 уровня. А может быть и +10 на сильном тренде.

Если открываются оба прямых ордера, то между ними остается один коридор в минусе, не зависящий от дальнейшего движения цены. Но чтобы открыть оба прямых ордера, цена должна закрыть в плюсе тот же коридор первым перевернутым ордером. То есть в сумме 0. А дальше, если флет продолжится, четыре перевернутых ордера соберут с него все, что возможно, максимум 4 коридора в плюсе. Итого, с учетом минуса между прямыми ордерами, на флете можно максимум получить +3 коридора. Даже если цена пролетит с разгона два уровня, а потом откатит на уровень, все равно остается один коридор в плюсе.

Поэтому для этой стратегии одинаково хорош как флет в пределах первых трех (от цены) уровней Rabbit, не цепляя третий, либо тренд любой мощи - чем он сильнее, тем больше прибыли будет.

 

Предлагаю универсальную схему выставления ордеров с использованием уровней Rabbit. Скрипт для автоматического выставления ордеров по этой схеме:

// Diablo v16.09.10
#property copyright "Jon Katana"
#property show_inputs
extern double Up=0;
extern double Down=0;
extern int Levels=0;
extern int Step=0;
extern double Vol=0;
extern int Spread=0;
int start()
{for(int i=0;i<Levels;i++)
{OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(2*i*Step+Spread)*Point,0,0,0,0,0);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Down-2*i*Step*Point,0,0,0,0,0);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+(2*i+1)*Step*Point,0,0,0,0,0);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down-((2*i+1)*Step-Spread)*Point,0,0,0,0,0);
OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(2*i*Step+Spread)*Point,0,Up+(2*i-1)*Step*Point,Up+(2*i+2)*Step*Point,0,0);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+(2*i+2)*Step*Point,0,Up+((2*i+3)*Step+Spread)*Point,Up+((2*i+1)*Step+Spread)*Point,0,0);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Down-2*i*Step*Point,0,Down-((2*i-1)*Step-Spread)*Point,Down-((2*i+2)*Step+Spread)*Point,0,0);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down-((2*i+2)*Step-Spread)*Point,0,Down-(2*i+3)*Step*Point,Down-(2*i+1)*Step*Point,0,0);}
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up,0,Up+(Step+Spread)*Point,Down-(Step-Spread)*Point,0,0);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down+Spread*Point,0,Down-Step*Point,Up+Step*Point,0,0);
return(0);}
Переменные:

Up - значение ближайшего к цене верхнего уровня Rabbit, (например, 1.3040);

Down - значение ближайшего к цене нижнего уровня Rabbit (например, 1.3000);

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

Step - шаг между уровнями Rabbit в пунктах (например, 40);

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

Spread - спред (например, 2).

Diablo при любых траекториях движения цены за день закрывается либо в прибыли (от одного до нескольких коридоров между уровнями Rabbit), либо в нуле (за вычетом спредов). Минусовое закрытие бывает только при сильных (более одного коридора) откатах от уровней прямых свободных ордеров (Buy Stop или Sell Stop), начиная с пятого уровня Rabbit, считая от цены. Сильный откат от пятого уровня приносит убыток в один коридор, от седьмого - два и так далее. Остальные траектории приносят прибыль (от одного до десятков коридоров) либо ноль. В Diablo часть ордеров закрывается по Take Profit либо Stop Loss, а часть не имеет стопов, образуя взаимные замки, которые нужно закрывать вручную либо по окончании дня, либо на следующее утро. Цена не должна выходить за пределы сетки ордеров, поэтому количество уровней нужно брать с запасом.

Схема состоит из четырех частей:

1) Начиная с ближайшего к цене уровня Rabbit ставятся прямые свободные ордера на уровни индикатора в таком порядке: Buy Stop - Sell Limit - Buy Stop - Sell Limit... и так далее. То же самое в другую сторону: Sell Stop - Buy Limit - Sell Stop - Buy Limit... У этих ордеров нет ни Stop Loss, ни Take Profit, их нужно закрывать вручную по окончании дня.

2) На те же позиции прямых свободных ордеров (Buy Stop и Sell Stop) ставятся ордера такого же типа, но с Take Profit равным 2хStep и Stop Loss = Step. То есть там же, где стоит свободный Buy Stop, ставится второй Buy Stop, но уже со стопами.

3) На все те же позиции прямых ордеров ставятся перевернутые ордера (Sell Limit и Buy Limit) с Take Profit и Stop Loss равными Step.

4) Только на первые ближайшие к цене уровни Rabbit ставятся перевернутые ордера Sell Limit и Buy Limit с Take Profit = 2xStep и Stop Loss = Step.

 
// Tank v15.09.10
#property copyright "Jon Katana"
#property show_inputs
extern double Up=0;
extern double Down=0;
extern int Step=0;
extern double Vol=0;
extern int Spread=0;
bool b=1;
int start()
{
while (b==1)
{
 DelAllorders();
 OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+Spread*Point,0,0,0,0,0);
 if(GetLastError()!=0) b=1; else b=0;
 OrderSend(Symbol(),OP_SELLSTOP,Vol,Down,0,0,0,0,0);
  if(GetLastError()!=0) b=1;
 OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+Step*Point,0,0,0,0,0);
  if(GetLastError()!=0) b=1;
 OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down-(Step-Spread)*Point,0,0,0,0,0);
  if(GetLastError()!=0) b=1;
 OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+Spread*Point,0,Down,Up+Step*Point,0,0);
  if(GetLastError()!=0) b=1;
 OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up,0,Up+(Step+Spread)*Point,Down-(Step-Spread)*Point,0,0);
  if(GetLastError()!=0) b=1;
 OrderSend(Symbol(),OP_SELLSTOP,Vol,Down,0,Up+Spread*Point,Down-(Step-Spread)*Point,0,0);
  if(GetLastError()!=0) b=1;
 OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down+Spread*Point,0,Down-Step*Point,Up+Step*Point,0,0);
  Sleep(10000);
}
Alert(" Tank Ready");
return(0);}
void DelAllorders () // удаляет все отложенные ордера 
   {
   int i,ticket1;
   for( i=OrdersTotal()-1; i >= 0; i--)         
   {
      if(OrderSelect(i,SELECT_BY_POS)==true) 
       {                                   
           if(OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT || OrderType()==OP_BUYSTOP ||
              OrderType()==OP_SELLSTOP )
            {
             ticket1=OrderTicket() ;
             OrderDelete(ticket1) ;
            }
       }
    }   
   return(0) ;
   }
   
Мне кажется так будет вернее, чтобы обязательно поставились все ордера, это защита от близкой цены к каналу
 
Мы нашли траекторию, которая приносит убыток в схеме Tank, модифицировали схему, упростив ее и удалив этот недостаток, но схема требует присмотра - при одной определенной траектории убыток также возможен. Поэтому при закрытии одного или двух коридоров в прибыли остальные ордера нужно удалить и запустить скрипт заново. Из-за этого пока новый скрипт Tank не выкладываю.
 


Скрипт Diablo изменен - схема упрощена, укорочены до Step величины Take Profit для первых перевернутых (Sell Limit и Buy Limit) ордеров, код сократился на 15%:

// Diablo v18.09.10
#property copyright "Jon Katana"
#property show_inputs
extern double Up=0;
extern double Down=0;
extern int Levels=0;
extern int Step=0;
extern double Vol=0;
extern int Spread=0;
int start()
{for(int i=0;i<(Levels-1);i++)
{OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(2*i*Step+Spread)*Point,0,0,0,0,0);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Down-2*i*Step*Point,0,0,0,0,0);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+(2*i+1)*Step*Point,0,0,0,0,0);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down-((2*i+1)*Step-Spread)*Point,0,0,0,0,0);
OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(2*i*Step+Spread)*Point,0,Up+(2*i-1)*Step*Point,Up+(2*i+2)*Step*Point,0,0);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+2*i*Step*Point,0,Up+((2*i+1)*Step+Spread)*Point,Down+(2*i*Step+Spread)*Point,0,0);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Down-2*i*Step*Point,0,Down-((2*i-1)*Step-Spread)*Point,Down-((2*i+2)*Step+Spread)*Point,0,0);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down-(2*i*Step-Spread)*Point,0,Down-(2*i+1)*Step*Point,Up-2*i*Step*Point,0,0);}
return(0);}

Теперь схема выглядит так:

1) Начиная с ближайшего к цене уровня Rabbit ставятся прямые свободные ордера на уровни индикатора в таком порядке: Buy Stop - Sell Limit - Buy Stop - Sell Limit... и так далее. То же самое в другую сторону: Sell Stop - Buy Limit - Sell Stop - Buy Limit... У этих ордеров нет ни Stop Loss, ни Take Profit, их нужно закрывать вручную по окончании дня.

2) На те же позиции прямых свободных ордеров (Buy Stop и Sell Stop) ставятся ордера такого же типа, но с Take Profit равным 2хStep и Stop Loss = Step. То есть там же, где стоит свободный Buy Stop, ставится второй Buy Stop, но уже со стопами.

3) На все те же позиции прямых ордеров ставятся перевернутые ордера (Sell Limit и Buy Limit) с Take Profit и Stop Loss равными Step.

 
// Diablo v28.09.10
#property copyright "Jon Katana"
#property show_inputs
extern double Up=0;
extern double Down=0;
extern int Levels=0;
extern int Step=0;
extern double Vol=0;
extern int Spread=0;
int start()
{for(int i=0;i<(Levels-1);i++)
{OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(2*i*Step+Spread)*Point,0,0,0,0,0);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Down-2*i*Step*Point,0,0,0,0,0);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+(2*i+1)*Step*Point,0,0,0,0,0);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down-((2*i+1)*Step-Spread)*Point,0,0,0,0,0);
OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(2*i*Step+Spread)*Point,0,Up+(2*i-1)*Step*Point,Up+(2*i+2)*Step*Point,0,0);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+2*i*Step*Point,0,Up+((2*i+1)*Step+Spread)*Point,Up+(2*Step*(i-1)+Spread)*Point,0,0);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Down-2*i*Step*Point,0,Down-((2*i-1)*Step-Spread)*Point,Down-((2*i+2)*Step+Spread)*Point,0,0);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down-(2*i*Step-Spread)*Point,0,Down-(2*i+1)*Step*Point,Down-2*Step*(i-1)*Point,0,0);}
return(0);}


Изменения в Diablo v28.09.10:

+ повысилась прибыльность траекторий типа "односторонний тренд с сильным откатом" - теперь они прибыльны все (в предыдущей версии скрипта - через одну, остальные закрывались с нулем), кроме ближайшей (до второго уровня и обратно), которая закрывается в нуле, как и раньше;

+ полностью решена проблема часто встречающейся траектории "захват уровня и тренд в обратную сторону", так называемый "удар по стопам" - теперь все траектории такого типа прибыльны либо закрываются в нуле (ранее захват нечетного уровня и тренд в обратном направлении закрывался с минус одним коридором);

+ возможные убытки на треугольном флете уменьшились еще сильнее (ранее это была самая рискованная траектория, теперь вполне обычная).

 
Объясните пожалуйста, в какое время выставлять скриптом ордера и когда все закрывать????? Я понимаю что это дело хозяйское вообще... но кто как делает?
Причина обращения: