17 August 2011

Fisher indicator - przykład

Wskażnik stara się wykryć trendy i wskazać ich siłę. Może być interesujący ponieważ wykres zysków strategii pracującej na 15 parach walutowych i opartej na wskazaniach Fisher'a z H4, H1, M15 i M1 wyodrębnia z rynku dość niską harmoniczną.
Kod wskaźnika jest czytelny i łatwy w obsłudze. Dla najprostrzej strategii wykorzystamy tylko bufor O którego indeks O zwraca aktualną wartość wskażnika. Dla nas interesujące jest jedynie to czy wskaźnik jest na + czy na -
Wskażnik przyjmuje jako parametr wejściowy okres na podstawie, którego określa minimum i maximum. Dłuższy okres skutkuje mniejszym "nieporozumieniem", ale daje spore opóźnienie. Przykład prostej strategii kończy się oczywiście fiaskiem - ale wykres "daje do myślenia". Trend fallower na podstawie Fisher'a oparty na money management (MM) może przynieść niewielkie zyski co aktualnie testuję.
Przykładowy kod oraz wskaźnik niezbędny do uruchomienia kodu - code.5w4
#property copyright "Copyright © 2011, FiveWithFour"
#property link      "http://www.fivewithfour.blogspot.com"

double   iLots = 0.1;
bool     bBUY  = false;
bool     bSELL = false;
    
bool fnCheckOrders()
   {
   int i = 0;
   
   while(OrderSelect(i,SELECT_BY_POS))
      {
      if (OrderSymbol() == Symbol())
         {
         if (OrderType() == OP_BUY)
            bBUY = true;
         if (OrderType() == OP_SELL)
            bSELL = true;
         }         
      i++;
      }
   return(false);
   }

int start()
   {
   bBUY  = false;
   bSELL = false;
   
   fnCheckOrders();
   
   double dFisherM_1    = iCustom(Symbol(), PERIOD_M1, "Fisher", 10, 0.3, 0.3, 0, 0);
   double dFisherM_15   = iCustom(Symbol(), PERIOD_M15,"Fisher", 10, 0.3, 0.3, 0, 0);
   double dFisherH_1    = iCustom(Symbol(), PERIOD_H1, "Fisher", 10, 0.3, 0.3, 0, 0);
   double dFisherH_4    = iCustom(Symbol(), PERIOD_H4, "Fisher", 10, 0.3, 0.3, 0, 0);
     
   if (!bBUY)
      if (dFisherH_4 > 0) 
         if (dFisherH_1 > 0)
            if (dFisherM_15 > 0)
               if (dFisherM_1 > 0)
                  OrderSend(Symbol(),OP_BUY,iLots,Ask,1,Ask-50*Point,0,"Fisher_simple",11111,0,Blue);
      
   if (!bSELL)
      if (dFisherH_4 < 0)  
         if (dFisherH_1 < 0)
            if (dFisherM_15 < 0)
               if (dFisherM_1 < 0)
                  OrderSend(Symbol(),OP_SELL,iLots,Bid,1,Bid+50*Point,0,"Fisher_simple",11111,0,Red);
   return(0);
   }