Трендовая стратегия.
Atom Ответить
26.07.2012


icc

Фотография
Всем Здрасте.
Стратегия работала с февраля 2010 по январь 2012 после чего снята из-за посредственных результатов(изменился характер эквити), не ее сейчас время.

Суть стратегии проста, вставай по тренду, реж убытки, давай прибыли течь.
При помощи индикаторов определялись три тренда долгосрок, среднесрок, и в моменте, далее при их совпадении осуществлялся вход по свечной конфигурации "большой бар" или "уголок", выставлялся фиксированный стоп и ордер на доливку через 10ти дневный атр*кооф., коэф. в процессе торговли менялся(оптимизировался), закрытие на окончании дня.

Код системы для велс-лаб 4.0, и картинки(все без комисий и проскальзываний - голышом как есть):


Код
{#OptVar1 24;10;50;1}
var Bar,s,poz,p,p1,p2,po,i,b,per_pc,size_pc,flag: integer;
var atf1,atf10,at1,at10,at240f,at240,pane: integer;
var StpL,StpS,BuL,BuS,TpL,TpS: integer;
var time1,time2,time3,y: integer;
var stop,take,ep,pc,doliv: float;
var h,h1,h2,h3,h4,h5:float;
var l,l1,l2,l3,l4,l5:float;
var c1,c2,c3,c4,c5:float;
pane:=CreatePane(150,true,true);
i:=0;
po:=0;
y:=#OptVar1/10; // коэфициент от 10дневного атр для уровня доливки
StpL:=800; //размер стопа
StpS:=800;
BuL:=1000;  //уровень безубытка
BuS:=1000;
TpL:=9500;  //уровень тейка(люстры)
TpS:=9500;
time1:=1100;
time2:=1345;
time3:=2340;

SetScaleDaily;
atf1:=atrseries(1);
atf10:=atrseries(10);
RestorePrimarySeries;
at1:=IntradayFromDaily(atf1);
at10:=IntradayFromDaily(atf10);

 h:=0; h1:=0; h2:=0; h3:=0; h4:=0; h5:=0;
 l:=1000000; l1:=0; l2:=0; l3:=0; l4:=0; l5:=0;
 c1:=0; c2:=0; c3:=0; c4:=0; c5:=0;

for Bar := 2000 to BarCount - 1 do
begin
  if po=1 then inc(i);
  //p:=lastposition;
  If GetTime(bar)<GetTime(Bar-1) then
    Begin
      h5:=h4; h4:=h3; h3:=h2; h2:=h1; h1:=h; h:=PriceHigh(bar);
      l5:=l4; l4:=l3; l3:=l2; l2:=l1; l1:=l; l:=PriceLow(bar);
      c5:=c4; c4:=c3; c3:=c2; c2:=c1; c1:= PriceClose(bar-1);
      poz:=0;
      if (GetSeriesValue(bar,at1)>GetSeriesValue(bar,at10)) and
         (GetSeriesValue(bar-2,at1)<GetSeriesValue(bar-2,at10)) then s:=2000
      else s:=0;
    end;
  if h<PriceHigh(bar) then h:=PriceHigh(bar);
  if l>PriceLow(bar) then l:=PriceLow(bar);
  if not lastpositionactive then
    Begin
    // лонг
      if (s=0) and (poz<2) and
         (((PriceHigh(bar)-PriceLow(bar)>PriceHigh(bar-1)-PriceLow(bar-1)) and
         (PriceHigh(bar)-PriceLow(bar)>PriceHigh(bar-2)-PriceLow(bar-2)) and
         (PriceHigh(bar)-PriceLow(bar)>PriceHigh(bar-3)-PriceLow(bar-3))) or
         ((PriceHigh(bar)>PriceHigh(bar-1)) and (PriceHigh(bar-1)<PriceHigh(bar-2)))) and
         (PriceClose(bar)>PriceHigh(bar)-((PriceHigh(bar)-PriceLow(bar))/3))  and
         (ema(bar,#close,500)<ema(bar,#close,20)) and
         (PriceClose(bar)>ema(bar,#close,160)) and
         (PriceClose(bar)>Parabolic( Bar, 0.02, 0.02, 0.2 )) and
         ((time1<GetTime(bar)) and (GetTime(bar)<=time2))  then
           Begin
             buyatclose(bar,'long');
             ep:=PriceClose(bar)-1;
             stop:=ep-StpL;
             take:=ep+TpL;
             inc(poz);
             po:=1;
             p1:=lastposition;
             doliv:=ep+(GEtSeriesValue(bar,at10)/y);
             flag:=1;
           end;
     // шорт
       if (s=0) and (poz<2) and
          (((PriceHigh(bar)-PriceLow(bar)>PriceHigh(bar-1)-PriceLow(bar-1)) and
          (PriceHigh(bar)-PriceLow(bar)>PriceHigh(bar-2)-PriceLow(bar-2)) and
          (PriceHigh(bar)-PriceLow(bar)>PriceHigh(bar-3)-PriceLow(bar-3))) or
          ((PriceLow(bar)<PriceLow(bar-1)) and (PriceLow(bar-1)>PriceLow(bar-2)))) and
          (PriceClose(bar)<PriceLow(bar)+((PriceHigh(bar)-PriceLow(bar))/3)) and
          (ema(bar,#close,700)>ema(bar,#close,20)) and
          (PriceClose(bar)<ema(bar,#close,160)) and
          (PriceClose(bar)<Parabolic( Bar, 0.02, 0.02, 0.2 )) and
          ((time1<GetTime(bar)) and (GetTime(bar)<=time2))  then
            Begin
              shortatclose(bar,'short');
              ep:=PriceClose(bar)+1;
              stop:=ep+StpS;
              take:=ep-TpS;
              inc(poz);
              po:=1;
              p1:=lastposition;
              doliv:=ep-(GetSeriesValue(bar,at10)/y);
              flag:=-1;
            end;
     end
  else
     Begin
       if lastlongpositionactive then
         Begin
           if (flag=1) and (PriceHigh(bar)>=doliv) then
             Begin
               buyatstop(bar,doliv,'long doliv');
               p2:=lastposition;
               flag:=0;
             end;
           if stop<ep then
             Begin
               if PriceHigh(bar-1)>=ep+BuL then stop:=ep;
             //  if stop>=ep then stop:=ep;
             end;
           if (stop=ep) and (PriceHigh(bar)>=doliv) then stop:=(ep+doliv)/2;
           if PriceLow(bar)<=stop then
             Begin
               sellatstop(bar,stop,p1,'sl,bu');
               sellatstop(bar,stop,p2,'sl,bu');
               po:=0; i:=0; flag:=0;
             end;
           if PriceHigh(bar)>=take then
             Begin
               sellatlimit(bar,take,p1,'');
               sellatlimit(bar,take,p2,'');
               po:=0; i:=0;  flag:=0;
             end;
           if GetTime(bar)=time3 then
             Begin
               sellatclose (bar,p1,'prof');
               sellatclose (bar,p2,'prof');
               po:=0; i:=0;  flag:=0;
             end;

        end;
       if lastshortpositionactive then
         Begin
            if (flag=-1) and (PriceLow(bar)<=doliv) then
              Begin
                shortatstop(bar,doliv,'short doliv');
                p2:=lastposition;
                flag:=0;
             end;
           if stop>ep then
             Begin
               if PriceLow(bar-1)<=ep-BuS then stop:=ep;
            //   if stop<=ep then stop:=ep;
             end;
           if (stop=ep) and (PriceLow(bar)<=doliv) then stop:=(ep+doliv)/2;
           if PriceHigh(bar)>=stop then
             Begin
               coveratstop(bar,stop,p1,'sl,bu');
               coveratstop(bar,stop,p2,'sl,bu');
               po:=0; i:=0;  flag:=0;
             end;
           if PriceLow(bar)<=take then
             Begin
               coveratlimit(bar,take,p1,'');
               coveratlimit(bar,take,p2,'');
               po:=0; i:=0;   flag:=0;
             end;
           if GetTime(bar)=time3 then
             Begin
               coveratclose(bar,p1,'prof');
               coveratclose(bar,p2,'prof');
               po:=0; i:=0;  flag:=0;
             end;
     end;
     end;



end;



Спасибо:




6 Ответов
icc

Фотография
Дата: 26.07.2012
Ответить


картинки:
эквити.jpg 378 KB (0) резалты.jpg 192 KB (0) мае_мфе.jpg 393 KB (0)
Автор топика
Спасибо:

ra81

Фотография
Дата: 28.07.2012
Ответить


А реальные показатели увидеть можно? Что на рынке наторговалось.
Спасибо:

icc

Фотография
Дата: 28.07.2012
Ответить


ra81 Перейти
А реальные показатели увидеть можно? Что на рынке наторговалось.


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

Был эксперимент, попытка из минимально возможного депозита сделать миллион за год, за основу была выбрана именно эта стратегия и агрессивный риск-менеджмент, и по мере роста депо она разбивалась на все большее количество вариантов самой себя. Эксперимент провалился, не слился, но и к цели не приблизился. СмартТрейд умеет графики депозита по дням строить, могу выложить если чем то поможет...
Автор топика
Спасибо:

ra81

Фотография
Дата: 29.07.2012
Ответить


icc Перейти

Был эксперимент, попытка из минимально возможного депозита сделать миллион за год, за основу была выбрана именно эта стратегия и агрессивный риск-менеджмент

Сколько был стартовый депозит? ЧТобы прикинуть ожидания от стратегии.

И все равно не могу понять чего же она завернута была. График хороший, вроде бы растет даже в 2012. Видно что просадки подросли в конце, но все равно все не так и плохо. Каковы таки причины? Не пойму.

Спасибо:

icc

Фотография
Дата: 29.07.2012
Ответить


ra81 Перейти
icc Перейти

Был эксперимент, попытка из минимально возможного депозита сделать миллион за год, за основу была выбрана именно эта стратегия и агрессивный риск-менеджмент

Сколько был стартовый депозит? ЧТобы прикинуть ожидания от стратегии.

И все равно не могу понять чего же она завернута была. График хороший, вроде бы растет даже в 2012. Видно что просадки подросли в конце, но все равно все не так и плохо. Каковы таки причины? Не пойму.



Начальный депозит был 18т.р., минимум15т.р.+деньги под просадку, финальный 120т.р., прикрепляю скрин.
Завернута она была только с основного портфеля, эксперимент же был доведен до конца.
Прикрепляю скрин(добавил проскальзывание 100пунктов на круг для наглядности), там отметил кусок графика и эквити по этому графику, так вот это был первый звоночек, что что то не так, состояние рынка( довольно хороший тренд), не соответствовало поведению эквити, на тренде трендовые стратегии должны зарабатывать, а у тут полный штиль, значит что то изменилось, просто пока еще не знаем что. Тут нужно либо прекращать торговлю на какое то время пока она себя нормально не покажет, либо значительно сокращать объем входа из расчета на то, что возможны обновления максимальной просадки, я в этом случае деньги распределяю на паттерновые системы, когда что то не так они по статистики ведут себя лучше чем трендовые.
Как видим со второй половины декабря 2011 года большинство трендовых систем (покрайней мере внутредневных)оказались в очень затруднительном положении.
Автор топика
Спасибо:

ra81

Фотография
Дата: 29.07.2012
Ответить


icc Перейти


Начальный депозит был 18т.р., минимум15т.р.+деньги под просадку, финальный 120т.р., прикрепляю скрин.


Если это за год, то я считаю результат отличным. Даже супер. В 7 раз увеличить депозит. Миллион с 15 штук... фантастиш.

Картинки поглядел. Спасибо за полный расклад. В таком масштабе видно что работать стало хуже. Но 2012 год он такой... хрен поймешь.
Спасибо:


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

loading
clippy