Avalancha - página 520

 
DJDJ22:

No necesitas una historia. Somos caballeros, tomamos su palabra. Sólo los resultados en forma de al menos un mes de resultados. Realmente no insisto. Así de fácil:

Aquí probado en real del 17.04.2015-07.05.2015. Esta es la versión anterior, no funcionó durante un mes, la desactivé porque hice una nueva versión mejorada de red con menos drawdown y la puse en real el 14.05.2015.

 
khorosh:

Aquí fue la prueba en real de 17.04.2015-07.05.2015. Esta es la versión anterior, mes no funcionó, deshabilitado como hice una nueva versión mejorada de red con menos drawdown y ponerlo en real en 14.05.2015.

Gracias. Simplemente genial para un martin. Buena suerte, de alguna manera me separé de Martin bastante ignominiosamente. Decidí no cavar.
 
khorosh:

Cuántos inviernos, cuántos años). ¡Felicidades por su regreso a la Madre Rusia! Vuelvo a la avalancha.


Gracias por las felicitaciones - Maya - si alguien me hubiera preguntado hace un año si creía que llegaría a formar parte de Rusia, me habría reído, pero aquí he tenido que conducir un poco :)

¡Y qué suerte tenemos en comparación con Donbass! ... Mozgovoy fue asesinado, lo conocí aquí, le di la mano, vino a visitarnos... Es la tercera vez que cambio de país de residencia sin moverme del sofá :)

Pero aquí... nada cambia...

Miro - todo lo nuevo es lo viejo bien olvidado :) El mundo evoluciona en espiral y lo notamos para envejecer...

 
elmucon:

Gracias por las felicitaciones, hombre, si hace un año te hubieran preguntado si creías que ibas a formar parte de Rusia, me habría reído, pero aquí estás ;_ Hasta tuve que dar una vuelta :)

¡Y qué suerte tenemos en comparación con Donbass! ... Mozgovoy fue asesinado, lo conocí aquí, le di la mano, vino a visitarnos... Es la tercera vez que cambio de país de residencia sin moverme del sofá :)

Pero aquí... nada cambia...

Mira - todo lo nuevo está bien olvidado lo viejo :) El mundo se desarrolla en espiral y lo notamos por lo que envejecemos ...


++++++++
 
khorosh:

Aquí fue la prueba en real de 17.04.2015-07.05.2015. Esta es la versión anterior, mes no funcionó, deshabilitado como hice una nueva versión mejorada de red con menos drawdown y ponerlo en real en 14.05.2015.

Yuri, buenas tardes. ¿Está trabajando el asesor? Estabas hablando de una fórmula secreta para aumentar el lote de forma segura. ¿Sigue siendo un secreto? ¿Ha desarrollado un EA. Me gustaría añadir el cálculo.

 
Señores, tengo una propuesta. El valor del ángulo de pendiente MA de uno de los marcos de tiempo 1-2-3 se transmite desde el indicador al Asesor Experto a través de la variable global del terminal. En función de este valor, puede tomar diferentes multiplicadores de aumento de lote para diferentes direcciones en órdenes stop. Esto ayudará a reducir la reducción y aumentar las ganancias. También será posible tomar diferentes valores del trailing stop virtual durante un flat y una tendencia, esto es si el asesor roza el beneficio positivo total de un grupo de órdenes, o para que trabaje sobre diferentes valores de take profit. Y para no iniciar una nueva serie de pedidos cuando la pendiente es cercana a cero durante un piso, será fácil establecer un pequeño multiplicador para aumentar los lotes durante un piso. Rehice el indicador de alguien, hace su trabajo, el valor se transfiere a cualquier Asesor Experto a través del global. El problema es que soy un programador reciente y el indicador se ha reescrito torpemente. Es necesario que el indicador también se pueda usar para ejecuciones en el probador a través de iCustom (hay que hacer algo con los búferes, yo mismo estaré pensando durante mucho tiempo). Es muy posible que el rendimiento de Avalanche mejore a partir de esto. También sugiero evaluar el rendimiento de las diferentes versiones de Avalanche por el valor de dólares por hora de trabajo por lote de 0.01 establecido inicialmente en la configuración (SMDB - Broker Machine Milking Speed:-) ©. También la relación de reducción a este valor. Para muchos vehículos, este indicador es útil. Los asesores expertos podrán detectar el comienzo de una tendencia por la diferencia de ángulos entre la EMA y la SMA en algún lugar de las últimas 5-9 barras mejor que cuando se usan otros indicadores.
Se adjunta el código del indicador.
 //+------------------------------------------------------------------+
//|                                                   MA_Angle_E.mq4 |
//|                                                                  |
//+------------------------------------------------------------------+
/*


Период 13, 35 - значение порогового угла, ема.  На 5-минутках.
Можно 10 и 39.
*/
#property   copyright "Mr_A"
//---- indicator settings
#property   indicator_chart_window   
#property   indicator_buffers 5    
#property indicator_color1 Red
#property indicator_color2 LimeGreen
//#property  indicator_color1  LimeGreen
//#property  indicator_color2  Yellow
//#property  indicator_color3 FireBrick
#property   indicator_width1 1
#property   indicator_width2 2
//----
double CrossUp[];
double CrossDown[];
double prevtime;
double Range,AvgRange;
double fasterMAnow,fasterMAprevious,fasterMAafter;
double mediumMAnow,mediumMAprevious,mediumMAafter;
double slowerMAnow,slowerMAprevious,slowerMAafter;
//----
extern int FasterMA    =     5 ;
extern int FasterShift =   - 5 ;
extern int FasterMode= 1 ; // 0 = sma, 1 = ema, 2 = smma, 3 = lwma
extern int MediumMA    =   20 ;
extern int MediumShift =   - 5 ;
extern int MediumMode= 1 ; // 0 = sma, 1 = ema, 2 = smma, 3 = lwma
extern int SlowerMA    =   34 ;
extern int SlowerShift =     0 ;
extern int SlowerMode=     1 ; // 0 = sma, 1 = ema, 2 = smma, 3 = lwma
extern int SoundAlert=     1 ; // 0 = disabled
//#property  indicator_width3  

//---- indicator parameters
//extern int MAPeriod=21;
extern double MA_Period = 10 ;
extern double Coef = 0.0 ;
extern int SetPrice = 0 ;
//extern string  m = "--Moving Average Types--";
//extern string  m1 = " 1 = EMA";
//extern string  m2 = " 2 = SMMA";
//extern string  m3 = " 3 = LWMA";
//extern string  m4 = " 4 = LSMA";
extern int MA_Type = 1 ; //0=SMA, 1=EMA, 2=SMMA, 3=LWMA, 4=LSMA
//extern string  p0 = " 0 = close";
//extern string  p1 = " 1 = open";
//extern string  p2 = " 2 = high";
//extern string  p3 = " 3 = low";
//extern string  p4 = " 4 = median(high+low)/2";
//extern string  p5 = " 5 = typical(high+low+close)/3";
//extern string  p6 = " 6 = weighted(high+low+close+close)/4";
extern int MA_AppliedPrice = 0 ;   //0=close, 1=open, 2=high, 3=low, 4=median(high+low)/2, 5=typical(high+low+close)/3,
                                 //6=weighted(high+low+close+close)/4 --- способы расчёта значений
extern double AngleTreshold= 2 ; //чем больше значение, тем круче д.б. тренд для сигнала
extern int PrevMAShift= 1 ;
extern int CurMAShift= 0 ;

int MA_Mode;
string strMAType;
int ExtCountedBars= 0 ;   //сумма баров
//---- indicator buffers -- три массива буферов создаются
//double DownBuffer[];
//double ZeroBuffer[];
double LiniaBuffer[];
string GP_MA_E= "GV_GP_MA_E" ;
string GP_MA_S= "GV_GP_MA_S" ;
string GP_MA_Napr= "GV_GP_MA_Napr" ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   GlobalVariableSet (GP_MA_E, 0 );
   GlobalVariableSet (GP_MA_S, 0 );
   GlobalVariableSet (GP_MA_Napr, 0 );
//---- 2 additional buffers are used for counting.
   IndicatorBuffers( 4 );   //было 3        
//---- drawing settings
   SetIndexStyle( 0 , DRAW_LINE );  
   SetIndexShift( 0 , 0 );
   IndicatorDigits(MarketInfo( Symbol (),MODE_DIGITS)+ 2 );   //IndicatorDigits      Установка формата точности (количество знаков
   //после десятичной точки) для визуализации значений индикатора.
   
   SetIndexStyle( 3 , DRAW_ARROW ,EMPTY); //0 заменил на 2
   SetIndexArrow( 3 , 233 );
   SetIndexBuffer ( 3 ,CrossUp);
   SetIndexStyle( 4 , DRAW_ARROW ,EMPTY); //1 заменил на 3
   SetIndexArrow( 4 , 234 );
   SetIndexBuffer ( 4 ,CrossDown);
                                                         
//********SetIndexShift(0, MA_Shift);

int draw_begin = 0 ;
SetIndexDrawBegin( 0 , draw_begin); // с какого элемента начинаются значимые данные индикаторного массива.
SetIndexBuffer ( 0 , LiniaBuffer); //сделали индик. массивом
//---- 3 indicator buffers mapping  --- карта буферов
 // if(!SetIndexBuffer(0,UpBuffer) && !SetIndexBuffer(1,DownBuffer) && !SetIndexBuffer(2,ZeroBuffer))
     // Print("cannot set indicator buffers!");
switch (MA_Type)
   {
       case 1 : strMAType= "EMA" ; MA_Mode= MODE_EMA ; break ;
       case 2 : strMAType= "SMMA" ; MA_Mode= MODE_SMMA ; break ;
       case 3 : strMAType= "LWMA" ; MA_Mode= MODE_LWMA ; break ;
       case 4 : strMAType= "LSMA" ; break ;
       default : strMAType= "SMA" ; MA_Mode= MODE_SMA ; break ;
   }
//---- name for DataWindow and indicator subwindow label
   //IndicatorShortName("MA_" + strMAType+"_Angle("+MA_Period+","+AngleTreshold+","+PrevMAShift+","+CurMAShift+")");
   return ( 0 );
      
} /*
//+------------------------------------------------------------------+
//| LSMA with PriceMode                                              |
//| PrMode  0=close, 1=open, 2=high, 3=low, 4=median(high+low)/2,    |
//| 5=typical(high+low+close)/3, 6=weighted(high+low+close+close)/4  |
//+------------------------------------------------------------------+
double LSMA(int Rperiod, int prMode, int shift)
{
   int i, mshift;
   double sum, pr;
   int length;
   double lengthvar;
   double tmp;
   double wt;

   length = Rperiod;
 
   sum = 0;
   for(i = length; i >= 1  ; i--)
   {
     lengthvar = length + 1;
     lengthvar /= 3;
     tmp = 0;
     mshift = length-i+shift;
     switch (prMode)
     {
     case 0: pr = Close[mshift];break;
     case 1: pr = Open[mshift];break;
     case 2: pr = High[mshift];break;
     case 3: pr = Low[mshift];break;
     case 4: pr = (High[mshift] + Low[mshift])/2;break;
     case 5: pr = (High[mshift] + Low[mshift] + Close[mshift])/3;break;
     case 6: pr = (High[mshift] + Low[mshift] + 2 * Close[mshift])/4;break;
     }
     tmp = ( i - lengthvar)*pr;
     sum+=tmp;
    }
    wt = MathFloor(sum*6/(length*(length+1))/Point)*Point;
    return(wt);
}*/
//+------------------------------------------------------------------+
//| The angle for MA                                                |
//+------------------------------------------------------------------+
int start()
{
   double fCurMA, fPrevMA;
   double fCurMA_S, fPrevMA_S;
   double fAngle, fAngle_S, mFactor, dFactor; //mFactor - множитель для йены либо остальных валют
   int nLimit, i, n;                   //dFactor - величина обратная радиану
   int nCountedBars;
   ExtCountedBars = IndicatorCounted();
   if (ExtCountedBars < 0 ) return (- 1 );
   if (ExtCountedBars > 0 ) ExtCountedBars--;
   ema();
   //double angle;  //не использовано
   int ShiftDif;
   string Sym;
   if (CurMAShift >= PrevMAShift)
   {
       Print ( "Error: CurMAShift >= PrevMAShift" );
      PrevMAShift = 6 ;
      CurMAShift = 0 ;      
   }  
   nCountedBars = IndicatorCounted(); //Функция возвращает кол-во баров, не измененных после посл. вызова индикатора.
   if (nCountedBars< 0 ) 
       return (- 1 );
   if (nCountedBars> 0 ) 
      nCountedBars--; //---- last counted bar will be recounted
   nLimit = Bars -nCountedBars; //Bars - количество баров на текущем графике;
   dFactor = 3.14159 / 180.0 ;
   mFactor = 1000.0 ;
   Sym = StringSubstr ( Symbol (), 3 , 3 ); //отрезание первых трёх символов из названия пары
   if (Sym == "JPY" ) mFactor = 10.0 ;   //для йены свои особенные настройки
   ShiftDif = PrevMAShift-CurMAShift;   //на сколько значение изменилось
   for (i= 0 ; i<nLimit; i++) //---- main loop
   {
       if (MA_Type == 4 ) //не использовать
      {
         //fCurMA=LSMA(MA_Period,MA_AppliedPrice, i+CurMAShift);   //текущее значение 
         //fPrevMA=LSMA(MA_Period,MA_AppliedPrice, i+PrevMAShift); //предыдущее значение
      }
       else //вот это использовать
      {
        fCurMA= iMA ( NULL , 0 ,MA_Period, 0 ,MA_Mode,MA_AppliedPrice,i+CurMAShift); //значения для текущего
        fPrevMA= iMA ( NULL , 0 ,MA_Period, 0 ,MA_Mode,MA_AppliedPrice,i+PrevMAShift); //и предыдущего баров
      }
      fAngle = (fCurMA - fPrevMA)/ShiftDif;   //здесь тангенс угла получается
       // take ArcTan of value to get the angle in radians and convert to degrees
      fAngle = mFactor * MathArctan (fAngle) / dFactor * F146_Koeff(); //тут сам угол высчитывается; 
       if (i == 0 )
      {
         GlobalVariableSet (GP_MA_E, fAngle);
      }
   }
   nCountedBars = IndicatorCounted(); //Функция возвращает кол-во баров, не измененных после посл. вызова индикатора.
   if (nCountedBars< 0 ) 
       return (- 1 );
   if (nCountedBars> 0 ) 
      nCountedBars--; //---- last counted bar will be recounted
   nLimit = Bars -nCountedBars; //Bars - количество баров на текущем графике;
   ShiftDif = PrevMAShift-CurMAShift;   //на сколько значение изменилось
   for (n= 0 ; n<nLimit; n++)
   {
      fCurMA_S= iMA ( NULL , 0 ,MA_Period, 0 , MODE_SMA ,MA_AppliedPrice,n+CurMAShift); //значения для текущего
      fPrevMA_S= iMA ( NULL , 0 ,MA_Period, 0 , MODE_SMA ,MA_AppliedPrice,n+PrevMAShift); //и предыдущего баров//MODE_SMA
      fAngle_S = (fCurMA_S - fPrevMA_S)/ShiftDif;   //здесь тангенс угла получается
      fAngle_S = mFactor * MathArctan (fAngle_S) / dFactor * F146_Koeff(); //тут сам угол высчитывается
       if (n == 0 )
      {
         GlobalVariableSet (GP_MA_S, fAngle_S);
      }
   }
   //второй индикатор------------------------------ - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   int d,counter;
   int counted_bars=IndicatorCounted();
   if (counted_bars< 0 ) return (- 1 );
   if (counted_bars> 0 ) counted_bars--;
   int limit= Bars -counted_bars;
   if (counted_bars== 0 ) limit-= 1 + 9 ;
//----   
   for (d= 0 ; d<=limit; d++)
     {
      counter=d;
      Range= 0 ;
      AvgRange= 0 ;
       for (counter=d;counter<=d+ 9 ;counter++)
        {
         AvgRange=AvgRange+ MathAbs (High[counter]-Low[counter]);
        }
      Range=AvgRange/ 10 ;
       //----       
      fasterMAnow      = iMA ( NULL , 0 , FasterMA, FasterShift, FasterMode, PRICE_CLOSE , d+ 1 );
      fasterMAprevious = iMA ( NULL , 0 , FasterMA, FasterShift, FasterMode, PRICE_CLOSE , d+ 2 );
      fasterMAafter    = iMA ( NULL , 0 , FasterMA, FasterShift, FasterMode, PRICE_CLOSE , d- 1 );
       //----      
      mediumMAnow      = iMA ( NULL , 0 , MediumMA, MediumShift, MediumMode, PRICE_CLOSE , d+ 1 );
      mediumMAprevious = iMA ( NULL , 0 , MediumMA, MediumShift, MediumMode, PRICE_CLOSE , d+ 2 );
      mediumMAafter    = iMA ( NULL , 0 , MediumMA, MediumShift, MediumMode, PRICE_CLOSE , d- 1 );
       //----      
      slowerMAnow      = iMA ( NULL , 0 , SlowerMA, SlowerShift, SlowerMode, PRICE_CLOSE , d+ 1 );
      slowerMAprevious = iMA ( NULL , 0 , SlowerMA, SlowerShift, SlowerMode, PRICE_CLOSE , d+ 2 );
      slowerMAafter    = iMA ( NULL , 0 , SlowerMA, SlowerShift, SlowerMode, PRICE_CLOSE , d- 1 );
       //----      
       if ((fasterMAnow>slowerMAnow && 
         fasterMAprevious<=slowerMAprevious && 
         fasterMAafter>slowerMAafter && 
         mediumMAnow>slowerMAnow)
         || 
         (fasterMAnow>slowerMAnow && 
         mediumMAnow>slowerMAnow && 
         mediumMAprevious<=slowerMAprevious && 
         mediumMAafter>slowerMAafter))
        {
         CrossUp[d]=Low[i]-Range* 0.5 ;
        }
       if ((fasterMAnow<slowerMAnow && 
         fasterMAprevious>=slowerMAprevious && 
         fasterMAafter<slowerMAafter && 
         mediumMAnow<slowerMAnow)
         || 
         (fasterMAnow<slowerMAnow && 
         mediumMAnow<slowerMAnow && 
         mediumMAprevious>=slowerMAprevious && 
         mediumMAafter<slowerMAafter))
        {
         CrossDown[d]=High[i]+Range* 0.5 ;
        }
     }
   if ((CrossUp[ 0 ]> 2000 ) && (CrossDown[ 0 ]> 2000 )) { prevtime= 0 ; }
   if ((CrossUp[ 0 ]==Low[ 0 ]-Range* 0.5 ) && (prevtime!=Time[ 0 ]) && (SoundAlert!= 0 ))
   
     {
      prevtime=Time[ 0 ];
       Alert ( Symbol (), " 3 MA Cross Up @  Hour " ,Hour(), "  Minute " ,Minute());
       //глобалку менять здесь
     }
   if ((CrossDown[ 0 ]==High[ 0 ]+Range* 0.5 ) && (prevtime!=Time[ 0 ]) && (SoundAlert!= 0 ))
     {
      prevtime=Time[ 0 ];
       Alert ( Symbol (), " 3 MA Cross Down @  Hour " ,Hour(), "  Minute " ,Minute());
       //глобалку менять здесь
     }
//Comment("  CrossUp[0]  ",CrossUp[0]," ,  CrossDown[0]  ",CrossDown[0]," ,  prevtime  ",prevtime);
//Comment("");
   return ( 0 );
  }
//------------------------------------------------------------
void ema() {
   double pr;  
   if (Coef == 0.0 ) { 
      pr = 2.0 /(MA_Period+ 1 );
   } else {
      pr = Coef;
   }
   int pos = Bars - 2 ;
   if (ExtCountedBars > 2 ) pos = Bars - ExtCountedBars - 1 ;
//---- main calculation loop
   while (pos >= 0 ) {
       if (pos == Bars - 2 ) 
         LiniaBuffer[pos+ 1 ] = (Open[pos+ 1 ]+Close[pos+ 1 ])/ 2 ;
      LiniaBuffer[pos] = GetPrice(pos)*pr+LiniaBuffer[pos+ 1 ]*( 1 -pr);
           pos--;
   }
}


//-------------------------------------------------------------------------------------------------------------------

//+------------------------------------------------------------------+
double GetPrice( int Shift) {
   double price;
//----
   switch (SetPrice) {
       case 0 :  price = Close[Shift]; break ;
       case 1 :  price = Open[Shift]; break ;
       case 2 :  price = High[Shift]; break ;
       case 3 :  price = Low[Shift]; break ;
       case 4 :  price = (High[Shift]+Low[Shift])/ 2.0 ; break ;
       case 5 :  price = (High[Shift]+Low[Shift]+Close[Shift])/ 3.0 ; break ;
       case 6 :  price = (High[Shift]+Low[Shift]+ 2 *Close[Shift])/ 4.0 ; break ;
       case 7 :  price = (Open[Shift]+High[Shift]+Low[Shift]+Close[Shift])/ 4.0 ; break ;
       case 8 :  price = (Open[Shift]+Close[Shift])/ 2.0 ; break ;
       default : price = 0.0 ;
   }
//----
   return (price);
}
//=====================================================================================================//
//     ------------------ F146___ПОПРАВОЧНЫЕ КОЭФФИЦИЕНТЫ ДЛЯ РАЗНЫХ ТАЙМФРЕЙМОВ ------------------- 
//=====================================================================================================//
double F146_Koeff()
{
   switch ( Period ())
   {
       case PERIOD_M1 :     return ( 12.0 );
       case PERIOD_M5 :     return ( 12.0 );
       case PERIOD_M15 :   return ( 2.5 );
       case PERIOD_M30 :   return ( 0.8 );
       case PERIOD_H1 :     return ( 0.33 );
       case PERIOD_H4 :     return ( 0.55 );
       case PERIOD_D1 :     return ( 0.15 );
       case PERIOD_W1 :     return ( 0.2 );
       case PERIOD_MN1 :   return ( 0.09 );
   }
}
 
Ftor_007:
Señores, tengo esta sugerencia. El indicador envía al Asesor Experto a través de una variable global del terminal el valor del ángulo de inclinación de la MA de uno de los 1-2-3 marcos temporales. En base a este valor podemos tomar diferentes multiplicadores de incremento de lote para diferentes direcciones en las órdenes de stop. Ayudará a disminuir el drawdown y a aumentar el beneficio. También puede tomar diferentes valores del trailing stop virtual para un plano y una tendencia, si el Asesor Experto toma el beneficio total de un grupo de órdenes o si trabaja con diferentes valores de Take Profit. Y no debemos iniciar una nueva serie de órdenes cuando el ángulo de inclinación es cercano a cero durante la plana. He rediseñado el indicador de alguien, el valor se pasa a cualquier EA a través de global. El problema es que he estado programando recientemente y el indicador está mal reescrito. Es necesario habilitar el indicador para ser utilizado en el probador a través de iCustom (debería hacer algo con los buffers, me llevará mucho tiempo averiguarlo). Es muy posible que el rendimiento de Avalanche mejore a partir de esto. También propongo evaluar el rendimiento de las diferentes versiones de Avalanche por el valor de los dólares por hora de trabajo por 0,01 lote establecido inicialmente en la configuración (CMDB - Velocidad del corredor de ordeño de la máquina :-)©. También la relación entre la reducción de la deuda y este valor.
Se adjunta el código del indicador.
La esposa de mi compañero de clase, en los difíciles pero alegres años 90, interrogaba: "No me hables del consumo de gasolina por 100 km, dime, ¿cuál es el consumo del coche en rublos por día?
 
Los chistes son bromas, pero para este TS es posible reforzar la protección contra la pérdida de un depósito y aumentar la rentabilidad. Todo lo que se necesita es menos inundación y más código.
 
Ftor_007:
La broma es para mí, pero para esta ST es posible reforzar la protección contra la pérdida de un depósito y aumentar la rentabilidad. Todo lo que necesitas para esto es menos inundación y más código.

Vamos a dividir las tareas: yo hago menos cosas, tú haces más código.

Casi lo olvido: estoy dispuesto a ayudarte con la programación, si no tienes éxito.

 

El drawdown se ha vuelto mucho más bajo con dos corredores de órdenes - externo e interno, respectivamente con progresión geométrica y aritmética del crecimiento de los lotes. Durante un piso, ya no hay una gran cantidad de lotes establecidos, la probabilidad de MC también se reduce. El par USDJPY es el que ofrece los mejores resultados. En cuanto pueda insertar el indicador en la función de experto, intentaré aumentar la rentabilidad. El depósito en el probador se fijó en 70 dólares, lote 0,01.