[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 241232324»
Форум Трейдеров » Разное » Архив советников » Шаблоны стратегий для UTS
Шаблоны стратегий для UTS
Дата: Воскресенье, 06.06.2010, 15:53 | Сообщение # 1 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: Offline
Создание алгоритмов использования индикаторов, зачастую занимает 50% времени при программировании на заказ.

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

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

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










Мы лучшие
 
Дата: Воскресенье, 06.06.2010, 15:57 | Сообщение # 2 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: 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);
     }

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


Мы лучшие
 
Дата: Воскресенье, 06.06.2010, 15:59 | Сообщение # 3 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: 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);
}




Прикрепления: Vinin_HMA-UTS_v.rar(162Kb) · 0974815.gif(6Kb) · 0317813.gif(6Kb) · 2616053.gif(6Kb) · 7656793.gif(6Kb)


Мы лучшие
 
Дата: Воскресенье, 06.06.2010, 16:00 | Сообщение # 4 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: 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);
}


Мы лучшие
 
Дата: Понедельник, 07.06.2010, 11:31 | Сообщение # 5 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: 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);
}  

Прикрепления: Volatility.mq4(2Kb) · 3539536.gif(10Kb)


Мы лучшие
 
Дата: Понедельник, 07.06.2010, 11:31 | Сообщение # 6 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: 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);
}


Мы лучшие
 
Дата: Понедельник, 07.06.2010, 11:32 | Сообщение # 7 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: 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);}
Прикрепления: ZigZag_NK.rar(4Kb)


Мы лучшие
 
Дата: Вторник, 08.06.2010, 12:34 | Сообщение # 8 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: 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);
}

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


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


Мы лучшие
 
Дата: Среда, 09.06.2010, 17:09 | Сообщение # 9 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: 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);
}






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


Мы лучшие
 
Дата: Пятница, 11.06.2010, 11:14 | Сообщение # 10 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: 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

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


Мы лучшие
 
Форум Трейдеров » Разное » Архив советников » Шаблоны стратегий для UTS
Страница 1 из 241232324»
Поиск: