Перейти к содержимому

Theme© by Fisana
 

Фотография
- - - - -

Алгоритмы индикаторов + тестирование алгоритмов в торговле


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 expforex

expforex

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 21 сообщений

Отправлено 08 June 2010 - 06:57

Создание алгоритмов использования индикаторов, зачастую занимает 50% времени при программировании на заказ.


Каждый программист знает, что Функции использованные в торговли в 90 % случаев - повторяются. Но для того чтобы написать эксперта - для начала нужно изучить индикаторы, использующиеся в нем.

В Этой ветке я буду представлять алгоритмы использования индикаторов. Более того, чтобы не быть голословным, все эти алгоритмы я буду встраивать в UTS( Universal Traiding System) и далее тестировать возможности индикатора в EaMultitester.

На входе: Индикатор - алгоритм его использования.
На выходе: Система на основе индикатора - Тест по 6 основным валютным парам(EURUSD EURGBP GBPUSD USDJPY USDCHF EURCHF) и одновременно на 5 ТФ(M1-M5-M15-M30-H1)


 
 

#2 expforex

expforex

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 21 сообщений

Отправлено 08 June 2010 - 07:02

Первым индикатором, опубликованным в этой ветке будет: Heiken_Ashi_Smoothed

1) Функция индикатора Heiken_Ashi_Smoothed
Сигналы функции, являются фильтром если применять по цвету то фильтр работает по направлению цвета, если Lime то тенденция бай, если Red то тенденция селл, сигнал нулевой показывает на окончание тенденции так же является фильтром, нельзя применять его совместно с сигналами Lime или Red.


extern int MaMetod =2; 
  extern int MaPeriod=6; 
  extern int  MaMetod2 =3; 
  extern int MaPeriod2=2; 
  extern int limit_bars=6;  //кол-во одинаковых сигналов

в старт

 
   if(Heiken()==1) // цвет Lime 
  { 
  открытие бай 
  } 
   if(Heiken()==2) // цвет Red   
  { 
  открытие селл 
  } 
   if(Heiken()==0) // нет сигнала, <- хороший фильтр для других  индикаторов применяется как для бай так и для селл   
  указывает на  окончание тенденции направления.   
  { 
  открытие 
  }
за пределы старта



   int  Heiken()                     
      { 
       double buy=0,sell=0; 
       for(int  i=1; i<=limit_bars; i++) 
           { 
           if(iCustom(Symbol(),60,"Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaMetod2,MaPeriod2,0,i)<  
           iCustom(Symbol(),6  0,"Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaMetod2,MaPeriod2,1,i))buy++;  
           } 
        for(i=1; i<=limit_bars; i++) 
           {  
           if(iCustom(Symbol(),60,"Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaMetod2,MaPeriod2,0,i)>  
           iCustom(Symbol(),6  0,"Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaMetod2,MaPeriod2,1,i))sell++;     
           }  
             
           if(buy  == limit_bars){return(1);} 
           if(sell  == limit_bars){return(2);} 
        
       return(0); 
      }

UTS v 1.1EURUSDH12010.01.012010.04.01.gif

Прикрепленные файлы



#3 expforex

expforex

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 21 сообщений

Отправлено 08 June 2010 - 08:37

UTS v 1.1USDCHFH12010.04.012010.05.30.gif
2)Функция индикатора VininI_HMA, по цвету, фильтрующая функция по направлению цвета.

в настройки
extern int    perHMA    = 14; //период 
extern int    shifthma  =  1; //бар 
в старт
if(hma_filtr()==1)
{
открытие бай HMA зеленая
}
if(hma_filtr()==2)
{
открытие селл HMA красная
}
за пределы старта
int hma_filtr()
 {
  double HMARed,HMAGreen;

  HMAGreen  = iCustom(Symbol(),0,"VininI_HMA",perHMA, 3, 0, 0, 1, shifthma);
  HMARed    = iCustom(Symbol(),0,"VininI_HMA",perHMA, 3, 0, 0, 2, shifthma);

  if (HMAGreen  != EMPTY_VALUE) return(1);
  if (HMARed    != EMPTY_VALUE) return(2);
return(0);
}


UTS v 1.1USDJPYH12010.04.012010.05.30.gif
UTS v 1.1USDJPYH12010.04.012010.05.30.gif
UTS v 1.1EURUSDH12010.04.012010.05.30.gif
UTS v 1.1EURCHFH12010.04.012010.05.30.gif

Прикрепленные файлы



#4 expforex

expforex

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 21 сообщений

Отправлено 08 June 2010 - 11:38

индикатором регрессии, правда можно по разному определять по нему направление,
индикатором регрессии, правда можно по разному определять по нему направление,

Code
extern  int Regr.degree1 = 6; // порядок регрессии  
 extern double  Regr.kstd1 = 1.6; // ширина канала, если =0 то рисуется только средняя  линия 
 extern int kanal=2; // вариант работы с границами канал, при  =2 не открывааем позиции за границами канала, =1 только за пределами  одной границы, = 0 не учитываем границы только измененгие основной линии  регресс 
 int Regr.shift1 = 0; // смещение относительно текущего  бара 
 extern int SPer = 800; // период баров 
 extern int  TFS=7;     // таймфрейм на котором работает индикатор 

 int  mper[10]={0,1,5,15,30,60,240,1440,10080,43200}; 

       if  (alerts(1)>0 ) ... // LongTrade 
       if (alerts(-1)<0) ....  // ShortTrade 

 int alert(int d6)        
 { 

    int  x=0; 
    string ind_name = "i-Regr"; 
    double ma =  iCustom(NULL, mper[TFS], ind_name,    Regr.degree1, Regr.kstd1, SPer,  Regr.shift1,0, 0); 
    double ma1 = iCustom(NULL, mper[TFS],  ind_name,    Regr.degree1, Regr.kstd1, SPer, Regr.shift1,0, 1);   

    if  (kanal==1) 
    { 
    double m_up = iCustom(NULL, mper[TFS],  ind_name,    Regr.degree1, Regr.kstd1, SPer, Regr.shift1,1, 0); 
    double  m_d = iCustom(NULL, mper[TFS], ind_name,    Regr.degree1, Regr.kstd1,  SPer, Regr.shift1,2, 0);       
    if (ma>ma1 &&  Bid>m_d) x=1; 
    if (ma<ma1  && Ask<m_up) x=-1; 
    }  
    if (kanal==0) 
    { 
    if (ma>ma1) x=1; 
    if  (ma<ma1) x=-1; 
    }    
    if (kanal==2) 
    { 
    m_up  = iCustom(NULL, mper[TFS], ind_name,    Regr.degree1, Regr.kstd1, SPer,  Regr.shift1,1, 0); 
    m_d = iCustom(NULL, mper[TFS],  ind_name,    Regr.degree1, Regr.kstd1, SPer, Regr.shift1,2, 0);       
    if  (ma>ma1 && Bid>m_d && Ask<m_up ) x=1; 
    if  (ma<ma1  && Ask<m_up && Bid>m_d ) x=-1; 
    }    
  return(x); 
 }






Тестирование показало следующие результаты:
Изображение
Изображение
Изображение

Прикрепления: i-Regr_TEST_UTS.rar(163Kb) · 5221050.gif(6Kb) · 6675820.gif(6Kb) · 4595514.gif(6Kb)


С Уважением Expforex!

#5 expforex

expforex

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 21 сообщений

Отправлено 09 June 2010 - 16:10

Code  if (NumberStrategy==9) 
    { 
   
  if(hma_filtr()==1 && hma_buy()) 
 { 
 return(1); 
 } 
  if(hma_filtr()==2 && hma_sell()) 
 { 
 return(2); 
  }  
   
  }   

Codebool  hma_buy() 
 { 
 double HMAGreen0,HMAGreen1,HMAGreen2; 

  HMAGreen0 = iCustom(Symbol(),0,"VininI_HMA",perHMA, 3, 0, 0, 1, 0); 
  HMAGreen1 = iCustom(Symbol(),0,"VininI_HMA",perHMA, 3, 0, 0, 1, 1); 
  HMAGreen2 = iCustom(Symbol(),0,"VininI_HMA",perHMA, 3, 0, 0, 1, 2); 

  if(HMAGreen2==EMPTY_VALUE && HMAGreen1!=EMPTY_VALUE &&  HMAGreen0!=EMPTY_VALUE) 
 return(true); else return(false); 
 } 

  bool hma_sell() 
 { 
 double HMARed0,HMARed1,HMARed2; 

  HMARed0 = iCustom(Symbol(),0,"VininI_HMA",perHMA, 3, 0, 0, 2, 0); 
  HMARed1 = iCustom(Symbol(),0,"VininI_HMA",perHMA, 3, 0, 0, 2, 1); 
  HMARed2 = iCustom(Symbol(),0,"VininI_HMA",perHMA, 3, 0, 0, 2, 2); 

  if(HMARed2==EMPTY_VALUE && HMARed1!=EMPTY_VALUE &&  HMARed0!=EMPTY_VALUE) 
 return(true); else return(false); 
 }

Изображение
Изображение
Изображение
Изображение
Изображение
Изображение

Прикрепления: HMAHMA2.rar(192Kb) · 6383517.gif(6Kb) · 2979674.gif(6Kb) · 0870753.gif(5Kb) · 3232945.gif(6Kb) · 3078725.gif(5Kb) · 2585238.gif(6Kb)



#6 expforex

expforex

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 21 сообщений

Отправлено 11 June 2010 - 10:17

Triple moving averages, aka TMA.
На стандартной машке, очень хорош для работы в долгосрочном тренде.

if (NumberStrategy==10)
   {
 

if(TMADecision() == 1){
return(1);
}
if(TMADecision() == -1){
return(2);
}
 
 
 } 
 
 
 
  int     TMA_TF                  = 0;
 int     TMA_Method              = 3;//0 SMA, 1 EMA, 2 SMMA, 3 LWMA
 int     TMA_Price               = PRICE_CLOSE; //0 close, 1 open, 2 high, 3 low, 4 median, 5 typical, 6 weighted
 int     Short_MA_Period         = 3;
 int     Med_MA_Period           = 20;
 int     Long_MA_Period          = 50;









int TMADecision() //tradeDirection=1: long, tradeDirection=-1: short 
{
   double MA3_0 = iMA(NULL, TMA_TF, Short_MA_Period, 0, TMA_Method, TMA_Price, 0);
   double MA3_1 = iMA(NULL, TMA_TF, Short_MA_Period, 0, TMA_Method, TMA_Price, 1);
   double MA20_0 = iMA(NULL, TMA_TF, Med_MA_Period, 0, TMA_Method, TMA_Price, 0);
   double MA20_1 = iMA(NULL, TMA_TF, Med_MA_Period, 0, TMA_Method, TMA_Price, 1);
   double MA50_0 = iMA(NULL, TMA_TF, Long_MA_Period, 0, TMA_Method, TMA_Price, 0);
   double MA50_1 = iMA(NULL, TMA_TF, Long_MA_Period, 0, TMA_Method, TMA_Price, 1);
      
     
   if (MA50_0<MA50_1 && MA20_0<MA20_1 && MA3_0<MA3_1 && MA3_0<MA20_0) return (-1);
   if (MA50_0>MA50_1 && MA20_0>MA20_1 && MA3_0>MA3_1 && MA3_0>MA20_0) return (1);
   return(0);
}
 
По данным индикаторам получились такие результаты:

EURCHF H1
Изображение
EURCHF M1
Изображение
EURCHF M5
Изображение
EURCHF M15
Изображение
EURUSD D1
Изображение

Прикрепленные файлы



#7 expforex

expforex

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 21 сообщений

Отправлено 29 June 2010 - 18:21

Стратегия от ОЛЕГА

Codeif (NumberStrategy==1)

{

double AO1=iAO(Symbol(),PERIOD_W1,0);
double AO2=iAO(Symbol(),PERIOD_W1,1);
double AO3=iAO(Symbol(),PERIOD_W1,2);
double AO4=iAO(Symbol(),PERIOD_W1,3);
double CCI=iCCI(Symbol(),PERIOD_H4,30,PRICE_WEIGHTED,0);
double StochM=iStochastic(Symbol(),PERIOD_H1,7,5,3,MODE_SMA,1,0,0);
double StochM1=iStochastic(Symbol(),PERIOD_H1,7,5,3,MODE_SMA,1,0,1);
double StochS=iStochastic(Symbol(),PERIOD_H1,7,5,3,MODE_SMA,1,1,0);
double StochS1=iStochastic(Symbol(),PERIOD_H1,7,5,3,MODE_SMA,1,1,1);


if (AO4>AO3 &&AO3>AO2 && AO2>AO1 && (CCI>120 || CCI<-120) ) // dwn
if (StochS1>StochM1 && StochS<StochM) return(2);



if (AO4<AO3 &&AO3<AO2 && AO2<AO1 && (CCI>120 || CCI<-120) ) // up
if (StochS1<StochM1 && StochS>StochM) return(1);





}
Изображение
Изображение
Изображение
Изображение
Изображение

Прикрепления: AO__.rar(706Kb) · 7991145.gif(7Kb) · 6700061.gif(7Kb) · 4156817.gif(7Kb) · 6655323.gif(7Kb) · 2442423.gif(7Kb)



#8 expforex

expforex

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 21 сообщений

Отправлено 02 August 2010 - 08:13

Стратегия на EMA:

В данной системе используются стандартные индикаторы входящие в комплект МТ4.
RSI 14, ЕМА 14 close, EMA 6 close, EMA 4 close .

Правила входа в рынок:


Buy
1. RSI пересекает на закрывшейся свече, уровень 50 снизу вверх. Это первый момент, далее проверяем машки.
2. ЕМА 4 должна быть выше ЕМА 6, а ЕМА 6 выше ЕМА 14.


Код:

if (NumberStrategy==1)
       
      {
        
   
  int RSIperiod=14;
  int EMA1period=14;
  int EMA1ma_shift=0;
  int EMA2period=6;
  int EMA2ma_shift=0;
  int EMA3period=4;
  int EMA3ma_shift=0;
  int applied_price=0;        

double RSI1=iRSI(Symbol(),0,RSIperiod,applied_price,1);
double RSI2=iRSI(Symbol(),0,RSIperiod,applied_price,2);
double RSI3=iRSI(Symbol(),0,RSIperiod,applied_price,3);

double EMA1_1= iMA(Symbol(),0,EMA1period,EMA1ma_shift,MODE_EMA,applied_price,1);
double EMA2_1= iMA(Symbol(),0,EMA2period,EMA2ma_shift,MODE_EMA,applied_price,1);
double EMA3_1= iMA(Symbol(),0,EMA3period,EMA3ma_shift,MODE_EMA,applied_price,1);

double EMA1_2= iMA(Symbol(),0,EMA1period,EMA1ma_shift,MODE_EMA,applied_price,2);
double EMA2_2= iMA(Symbol(),0,EMA2period,EMA2ma_shift,MODE_EMA,applied_price,2);
double EMA3_2= iMA(Symbol(),0,EMA3period,EMA3ma_shift,MODE_EMA,applied_price,2);

    if(   ((RSI2<50&&RSI1>50) ||(RSI3<50&&RSI2>50)) &&EMA3_1>EMA2_1 && EMA2_1>EMA1_1   ){Signal=1; }
    if(   ((RSI2>50&&RSI1<50) ||(RSI3>50&&RSI2<50)) &&EMA3_1<EMA2_1 && EMA2_1<EMA1_1   ){Signal=2; }
          
      
return(Signal);     
      
      }  
    
   

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

Из прибыльных графиков я выделил:

Все графики имеют имена с валютной парой - ТФ тестирования и стратегией тестирования.

Полный архив стейтов проверки этой стратегии в прикреплении.


Изображение
Изображение

Прикрепления: Exp-UTS_v_1.2-R.rar(963Kb)



Copyright © 2024 Your Company Name