Ayuda a la codificación - página 743

 
mladen:
El análisis de espectro singular (SSA) recalcula a menos que se trate de una versión de punto final. Como ese indicador utiliza el SSA "normal", también recalcula
MUCHAS GRACIAS
 
mladen:

Me temo que del código no puedo ver cuál es su intención en absoluto

Si lo que pretendes es tener medias con niveles, utiliza la que he colgado como plantilla

Hola,

si voy a usar tu ma avanzado con niveles, (tiene más precios, etc.. ma de colores, etc..)

pero traté de crear uno por mi cuenta para entender cómo crear un indicador personalizado,

mi idea es crear el mismo componente (básicamente una MA con 2 niveles..)

Utilizo un MA central, y otros 2 MA trazados usando líneas de puntos para dar el mismo efecto que los niveles...
para cada nivel relleno el buffer usando el evento de cálculo... como me dijiste, pero algo está mal ;-(
las 2 MAs que simulan el nivel se desplazan verticalmente... pero no funciona

 
baraozemo:

Hola,

si voy a usar tu ma avanzado con niveles, (tiene más precios, etc.. ma de colores, etc..)

pero traté de crear uno por mi cuenta para entender cómo crear un indicador personalizado,

mi idea es crear el mismo componente (básicamente un MA con 2 niveles..)

Utilizo un MA central, y otros 2 MA trazados usando líneas de puntos para dar el mismo efecto que los niveles...
para cada nivel relleno el buffer usando el evento de cálculo... como me dijiste, pero algo está mal ;-(
las 2 MAs que simulan el nivel se desplazan verticalmente... pero no funciona

Sí, eso es lo que quería decir

La cosa es de lo más sencilla:

  • crear ma (media)
  • añadir alguna diferencia hacia arriba y hacia abajo para el nivel 1 (haciendo dos topes más)
  • añadir alguna diferencia hacia arriba y hacia abajo para el nivel 2 (haciendo dos topes más)

No hay que cambiar nada en el cálculo de las medias ni nada más : sólo una simple suma o resta del buffer central (ma)

 

double pipLevel1 = -10;
double pipLevel2 = 10;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtLineBuffer,INDICATOR_DATA); //MA Buffer
   SetIndexBuffer(1,ExtLv1Buffer,INDICATOR_DATA); //MA lv1 Buffer
   SetIndexBuffer(2,ExtLv2Buffer,INDICATOR_DATA); //MA lv2 Buffer
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- sets first bar from what index will be drawn

   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); //MA Style
   PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_DOT);   //MA lvl1 Style
   PlotIndexSetInteger(2,PLOT_LINE_STYLE,STYLE_DOT);   //MA lvl2 Style

                                                       //IndicatorSetInteger(INDICATOR_LEVELS,1,InpLevel1); //MA lvl1 Value
//IndicatorSetInteger(INDICATOR_COLOR2,1,Cyan);
//IndicatorSetInteger(INDICATOR_STYLE2,1,STYLE_DOT);
//IndicatorSetInteger(INDICATOR_IDTH,1,1);

//IndicatorSetInteger(INDICATOR_LEVELS,2,InpLevel2); //MA lvl2 Value
//IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,Cyan);
//IndicatorSetInteger(INDICATOR_LEVELSTYLE,2,STYLE_DOT);
//IndicatorSetInteger(INDICATOR_LEVELWIDTH,2,1);  

   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpMAPeriod); //MA
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpMAPeriod); //MA lvl1
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,InpMAPeriod); //MA lvl2
//---- line shifts when drawing

   PlotIndexSetInteger(0,PLOT_SHIFT,InpMAShift); //MA
   PlotIndexSetInteger(1,PLOT_SHIFT,InpMAShift); //MA lvl1
   PlotIndexSetInteger(2,PLOT_SHIFT,InpMAShift); //MA lvl2

//--- name for DataWindow
   string short_name="unknown ma";
   switch(InpMAMethod)
     {
      case MODE_EMA :  short_name="EMA";  break;
      case MODE_LWMA : short_name="LWMA"; break;
      case MODE_SMA :  short_name="SMA";  break;
      case MODE_SMMA : short_name="SMMA"; break;
     }
   IndicatorSetString(INDICATOR_SHORTNAME,short_name+"("+string(InpMAPeriod)+")");
//---- sets drawing line empty value--
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);  //MA
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);  //MA lvl1
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);  //MA lvl2
//---- initialization done
  }
//+------------------------------------------------------------------+
//|  Moving Average                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   double pipMultiplier=_Point*MathPow(10,MathMod(_Digits,2));
   pipLevel1 = InpLevel1 * pipMultiplier;
   pipLevel2 = InpLevel2 * pipMultiplier;
//Print("point:"+_Point+" Digits:"+_Digits+ "pipMul:"+pipMultiplier);
//pipLevel1 = InpLevel1 / 10;
//pipLevel2 = InpLevel2 / 10;  

//--- check for bars count
   if(rates_total<InpMAPeriod-1+begin)
      return(0);// not enough bars for calculation
//--- first calculation or number of bars was changed
   if(prev_calculated==0)
     {
      ArrayInitialize(ExtLineBuffer,0);  //MA
      ArrayInitialize(ExtLv1Buffer,1);  //MA level1
      ArrayInitialize(ExtLv2Buffer,2);  //MA level2
     }
//--- sets first bar from what index will be draw
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpMAPeriod-1+begin); //MA
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpMAPeriod-1+begin); //MA lvl1
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,InpMAPeriod-1+begin); //MA lvl2

//--- calculation
   switch(InpMAMethod)
     {
      case MODE_EMA:  
                      CalculateEMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
                      ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
                      //Print ("rates_total:"+rates_total+" prev:"+prev_calculated+" begin:"+begin+" price:"+price[rates_total-1]);
                      break;
      case MODE_LWMA:
                      CalculateLWMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
                      ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
                      break;
      case MODE_SMMA:
                      CalculateSmoothedMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
                      ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
                      break;
      case MODE_SMA:  
                      CalculateSimpleMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
                      ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
                      break;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
mladen
:

Sí, eso es lo que quería decir

La cosa es de lo más sencilla:

  • crear ma (media)
  • añadir alguna diferencia hacia arriba y hacia abajo para el nivel 1 (haciendo dos topes más)
  • añadir alguna diferencia hacia arriba y hacia abajo para el nivel 2 (haciendo dos búferes más)

No hay necesidad de cambiar nada en el cálculo de los promedios o cualquier otra cosa : sólo una simple adición o sustracción del buffer central (ma)

¿podrías mostrar un código de ejemplo para sumar/restar (verticalmente) el ma? lo he intentado pero mi código falla..

 
baraozemo:

¿podría mostrar un código de ejemplo para sumar/restar (verticalmente) la ma? Lo he intentado pero mi código falla..

Lo tienes en la versión que he publicado. Por favor, comprueba el código de nuevo
 
mladen:
Ese indicador utiliza la TMA centrada - se recalcula. Las alertas no tendrían sentido

ok lo de la flecha cuando el cambio de color

 
dotmund:

ok que de flecha cuando el cambio de color

Las señales (flechas) no tendrían sentido debido a su naturaleza de recálculo/repintado
 
mladen:
Las señales (flechas) no tendrían sentido debido a su naturaleza de recálculo/repintado

Estimado @mladen,

¿Puede un experto que no tiene soporte Ecn ser utilizado con un broker de tipo Ecn sin problema?

En algunos expertos hay opciones para brokers de tipo Ecn.

Esto me llevó a pensar que podría ser mejor optimizar o añadir algunos códigos para los brokers de tipo Ecn.

 
oguz:

Estimado @mladen,

¿Puede un experto que no tiene soporte Ecn ser utilizado con un broker de tipo Ecn sin problema?

En algunos expertos hay opciones para brokers de tipo Ecn.

Esto me llevó a pensar que podría ser mejor optimizar o añadir algunos códigos para brokers de tipo Ecn.

Sí, si no se utiliza el stop loss y el take profit al abrir las órdenes

Si está hecho para ecn/stp por otro lado, funcionará en cualquier broker sin ningún problema. La única diferencia es en el momento de abrir las órdenes - no se necesita ningún otro cambio (u optimización) en absoluto

 
oguz:

Gracias por detallar su respuesta.

Por lo que sé el ea adjunto no tiene soporte de broker tipo Ecn.

Quiero usar este ea en un broker de tipo Ecn usando SL y TP.

Estaré muy feliz si usted proporciona el apoyo de tipo Ecn broker.

Ese ea necesitaría una reescritura para que todo el mundo lo entienda

Pero como no hablo el idioma que se utiliza en él, no puedo ayudar. Lo siento