Новые сообщения · Участники · Правила форума · Поиск · RSS · Вход · Регистрация ·

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

expforexДата: Воскресенье, 06.06.2010, 15:53 | Сообщение # 1
Главный Администартор
Группа: Администраторы
Сообщений: 8959
Награды: 29
Статус: Offline


[Бонусы за сообщения ]

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

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

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

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










Программирование на заказ || Наши Разработки

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

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

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

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









Автор - expforex
Дата добавления - 06.06.2010 в 15:53

expforexДата: Воскресенье, 06.06.2010, 15:57 | Сообщение # 2
Главный Администартор
Группа: Администраторы
Сообщений: 8959
Награды: 29
Статус: 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)


Программирование на заказ || Наши Разработки

 
Сообщение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);
     }


Автор - expforex
Дата добавления - 06.06.2010 в 15:57

expforexДата: Воскресенье, 06.06.2010, 15:59 | Сообщение # 3
Главный Администартор
Группа: Администраторы
Сообщений: 8959
Награды: 29
Статус: 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)


Программирование на заказ || Наши Разработки

 
Сообщение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);
}





Автор - expforex
Дата добавления - 06.06.2010 в 15:59

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



Программирование на заказ || Наши Разработки

 
Сообщение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);
}

Автор - expforex
Дата добавления - 06.06.2010 в 16:00

expforexДата: Понедельник, 07.06.2010, 11:31 | Сообщение # 5
Главный Администартор
Группа: Администраторы
Сообщений: 8959
Награды: 29
Статус: 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)


Программирование на заказ || Наши Разработки

 
Сообщение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);
}  


Автор - expforex
Дата добавления - 07.06.2010 в 11:31

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



Программирование на заказ || Наши Разработки

 
Сообщение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);
}

Автор - expforex
Дата добавления - 07.06.2010 в 11:31

expforexДата: Понедельник, 07.06.2010, 11:32 | Сообщение # 7
Главный Администартор
Группа: Администраторы
Сообщений: 8959
Награды: 29
Статус: 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)


Программирование на заказ || Наши Разработки

 
Сообщение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);}

Автор - expforex
Дата добавления - 07.06.2010 в 11:32

expforexДата: Вторник, 08.06.2010, 12:34 | Сообщение # 8
Главный Администартор
Группа: Администраторы
Сообщений: 8959
Награды: 29
Статус: 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)


Программирование на заказ || Наши Разработки

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

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

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



Автор - expforex
Дата добавления - 08.06.2010 в 12:34

expforexДата: Среда, 09.06.2010, 17:09 | Сообщение # 9
Главный Администартор
Группа: Администраторы
Сообщений: 8959
Награды: 29
Статус: 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)


Программирование на заказ || Наши Разработки

 
Сообщение
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);
}







Автор - expforex
Дата добавления - 09.06.2010 в 17:09

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


Программирование на заказ || Наши Разработки

 
Сообщение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


Автор - expforex
Дата добавления - 11.06.2010 в 11:14
Форум трейдеров » Разное » Архив советников » Шаблоны стратегий для UTS
Страница 1 из 241232324»
Поиск:


WebMoney Яндекс цитирования.