Для того, чтобы использовать все возможности сайта, мы рекомендуем Вам person_addЗарегистрироваться или personВойти

  • Страница 1 из 24
  • 1
  • 2
  • 3
  • 23
  • 24
  • »
Архив - только для чтения
Форум Трейдеров » Разное » Архив советников » Шаблоны стратегий для UTS
Шаблоны стратегий для UTS
Дата: Воскресенье, 06.06.2010, 15:53 | Сообщение # 1 Написал: expforex
Группа: Администраторы
Сообщений: 9192
Награды: 30
Статус: Offline

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

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

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

На входе: Индикатор - алгоритм его использования.
На выходе: Файл стратегии на основе индикатора








gestureс Уважением, Владислав Expforex

Дата: Воскресенье, 06.06.2010, 15:57 | Сообщение # 2 Написал: expforex
Группа: Администраторы
Сообщений: 9192
Награды: 30
Статус: Offline

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

в настройки

Quote

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

в старт

Code

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

за пределы старта

Code

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);
     }

attach_file Прикрепления: Heiken_Ashi-TES.rar(116.1 Kb) · 6083201.gif(5.8 Kb)

gestureс Уважением, Владислав Expforex

Дата: Воскресенье, 06.06.2010, 15:59 | Сообщение # 3 Написал: expforex
Группа: Администраторы
Сообщений: 9192
Награды: 30
Статус: Offline

2)Функция индикатора VininI_HMA, по смене цвета, сигнальная функция.

в настройки

Code

extern int perHMA = 14;

в старт

Code

if(hma_buy())
{
открытие бай
}
if(hma_sell())
{
открытие селл
}


за пределы старта

Code

bool 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);
}




attach_file Прикрепления: Vinin_HMA-UTS_v.rar(162.4 Kb) · 0974815.gif(5.8 Kb) · 0317813.gif(5.6 Kb) · 2616053.gif(5.7 Kb) · 7656793.gif(5.9 Kb)

gestureс Уважением, Владислав Expforex

Дата: Воскресенье, 06.06.2010, 16:00 | Сообщение # 4 Написал: expforex
Группа: Администраторы
Сообщений: 9192
Награды: 30
Статус: Offline

3)Функция индикатора VininI_HMA, по цвету, фильтрующая функция по направлению цвета.

в настройки

Code
extern int    perHMA    = 14; //период  
extern int    shifthma  =  1; //бар

в старт

Code
if(hma_filtr()==1)
{
открытие бай HMA зеленая
}
if(hma_filtr()==2)
{
открытие селл HMA красная
}

за пределы старта

Code

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);
}

gestureс Уважением, Владислав Expforex

Дата: Понедельник, 07.06.2010, 11:31 | Сообщение # 5 Написал: expforex
Группа: Администраторы
Сообщений: 9192
Награды: 30
Статус: Offline

4)Функция волатильности, индикатор попался на днях, но я его уже видел, название изменено, почему не знаю автор не известен.
Определяет флет и волатильность, если линия находится выше или ниже другой линии типа двух машек.

Code

if(Volatil()==-1){ //ФЛЕТ
if(Volatil()== 1){ //ВОЛАТИЛЬНОСТЬ

int Volatil()
    {   
    double Vol0  = iCustom  (Symbol(), 30, "Volatility", 20, 10, 0, 0, 500, 0, 0);                    
    double Vol1  = iCustom  (Symbol(), 30, "Volatility", 20, 10, 0, 0, 500, 1, 0);
     
    if(Vol0<Vol1)return(1);//ВОЛАТИЛЬНОСТЬ
    if(Vol0>Vol1)return(-1);//ФЛЕТ
return(0);
}  

attach_file Прикрепления: Volatility.mq4(2.0 Kb) · 3539536.gif(9.7 Kb)

gestureс Уважением, Владислав Expforex

Дата: Понедельник, 07.06.2010, 11:31 | Сообщение # 6 Написал: expforex
Группа: Администраторы
Сообщений: 9192
Награды: 30
Статус: Offline

5)Функция фрактал, определяет цену на которой находится фрактал
MODE_UPPER 1 Верхний фрактал
MODE_LOWER 2 Нижний фрактал

double fractUP = Fract(PERIOD_H1,MODE_UPPER);

или можно вот так проще написать будет тоже самое

Code

double fractUP = Fract(60,1);//цена уровня на котором находится верхний фрактал
double fractDN = Fract(60,2);//цена уровня на котором находится нижний фрактал

double Fract(int tf,int up_lw)  
{
for (int cnt = 1; cnt < Bars; cnt++) {
     if(iFractals(Symbol(),tf,up_lw,cnt)!=0.0){
     double frac=iFractals(Symbol(),tf,up_lw,cnt);
     break;}}

return(frac);
}  

=============================================================
Еще одна функция по фракталу, определяет какой сейчас фрактал последний, верхний или нижний.

Code
if(Fract()==1){  //верхний фрактал
if(Fract()==-1){ //нижний фрактал

int Fract()
{
for (int cnt = 1; cnt < Bars; cnt++) {
     if(iFractals(Symbol(),PERIOD_M15,MODE_UPPER,cnt)!=0.0){
     double Timefracup=Time[cnt];
     break;}}
for (cnt = 1; cnt < Bars; cnt++) {
     if(iFractals(Symbol(),PERIOD_M15,MODE_LOWER,cnt)!=0.0){
     double Timefracdn=Time[cnt];
     break;}}

if  (Timefracup>Timefracdn) return(1); //верхний фрактал
if  (Timefracup<Timefracdn) return(-1);//нижний фрактал
return(0);
}

gestureс Уважением, Владислав Expforex

Дата: Понедельник, 07.06.2010, 11:32 | Сообщение # 7 Написал: expforex
Группа: Администраторы
Сообщений: 9192
Награды: 30
Статус: Offline

6)Функция ZigZag_NK определяет куда смотрит луч ZZ, верх или вниз.

Code

if (Signal()== 0){//линия внизу
if (Signal()== 1){//линия верху  

за пределы старта

     int Signal(){
     int ind.filtr =-1;
     for (int i= 0; i < 100; i++){      
              if(iCustom(Symbol(),PERIOD_M15,"ZigZag_NK",12,5,3,0,i)!=0){
     int n_up=i;                    
     break; }}
     //-------------------------------    
     for (i= 0; i < 100; i++){     
              if(iCustom(Symbol(),PERIOD_M15,"ZigZag_NK",12,5,3,1,i)!=0){   
     int n_dn=i;                    
     break; }}
             
     if (n_up < n_dn) ind.filtr = 0; //линия внизу if (Signal()== 0){
     if (n_up> n_dn) ind.filtr = 1; //линия верху if (Signal()== 1){   

     return(ind.filtr);}

==============================================================================
функция ZigZag_NK определяет ценовой уровень последней вершины или впадины ZZ

Code
double ZZ_UP = ZZ_Price(PERIOD_M15, 0); // вершина
double ZZ_DN = ZZ_Price(PERIOD_M15, 1); // впадина

Code
double ZZ_Price(int tf, int mode)
     {
       for (int i= 0; i < 100; i++){      
                   if(iCustom(Symbol(),tf,"ZigZag_NK",12,5,3,mode,i)!=0){
          double zz = iCustom(Symbol(),tf,"ZigZag_NK",12,5,3,mode,i);                    
          break; }}  

return(zz);}

attach_file Прикрепления: ZigZag_NK.rar(3.6 Kb)

gestureс Уважением, Владислав Expforex

Дата: Вторник, 08.06.2010, 12:34 | Сообщение # 8 Написал: expforex
Группа: Администраторы
Сообщений: 9192
Награды: 30
Статус: Offline

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

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);
}

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


attach_file Прикрепления: i-Regr_TEST_UTS.rar(163.0 Kb) · 5221050.gif(6.1 Kb) · 6675820.gif(6.1 Kb) · 4595514.gif(5.9 Kb)

gestureс Уважением, Владислав Expforex

Дата: Среда, 09.06.2010, 17:09 | Сообщение # 9 Написал: expforex
Группа: Администраторы
Сообщений: 9192
Награды: 30
Статус: Offline

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

Code
bool 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);
}






attach_file Прикрепления: HMAHMA2.rar(191.6 Kb) · 6383517.gif(5.9 Kb) · 2979674.gif(5.8 Kb) · 0870753.gif(5.3 Kb) · 3232945.gif(5.9 Kb) · 3078725.gif(5.4 Kb) · 2585238.gif(5.6 Kb)

gestureс Уважением, Владислав Expforex

Дата: Пятница, 11.06.2010, 11:14 | Сообщение # 10 Написал: expforex
Группа: Администраторы
Сообщений: 9192
Награды: 30
Статус: Offline

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

Code

   if (NumberStrategy==10)
    {
   

if(TMADecision() == 1){
return(1);
}
if(TMADecision() == -1){
return(2);
}
   
   
  }

Code

  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

attach_file Прикрепления: UTS_v_1.1_Strat.rar(266.0 Kb) · 2640701.gif(6.0 Kb) · 7154077.gif(6.0 Kb) · 1568640.gif(6.0 Kb) · 5719676.gif(6.0 Kb) · 0945755.gif(5.5 Kb)

gestureс Уважением, Владислав Expforex

Форум Трейдеров » Разное » Архив советников » Шаблоны стратегий для UTS
  • Страница 1 из 24
  • 1
  • 2
  • 3
  • 23
  • 24
  • »
Поиск: