Aiuto per la codifica - pagina 743

 
mladen:
L'analisi dello spettro singolare (SSA) ricalcola, a meno che non si tratti di una versione end-point. Dato che quell'indicatore usa l'SSA "regolare", anche lui ricalcola
GRAZIE MILLE
 
mladen:

Temo che dal codice non riesco a vedere quale sia la tua intenzione

Se stai cercando di avere medie con livelli, usa quello che ho postato come modello

Ciao,

sì, userò la tua ma avanzata con livelli, (ha più prezzi, ecc... ma colorata, ecc...)

ma ho cercato di crearne una da solo per capire come creare un indicatore personalizzato,

la mia idea è di creare lo stesso componente (fondamentalmente un MA con 2 livelli..)

Uso una MA centrale, e altre 2 MA tracciate con linee di punti per dare lo stesso effetto dei livelli...
per ogni livello popolo il buffer usando su calcola evento... come mi hai detto tu, ma qualcosa non va ;-(
le 2 MA che simulano il livello saranno spostate verticalmente... ma non funziona

 
baraozemo:

Ciao,

sì, userò la vostra ma avanzata con livelli, (ha più prezzi, ecc. ma colorata, ecc.)

ma ho provato a crearne una da solo per capire come creare un indicatore personalizzato,

la mia idea è di creare lo stesso componente (fondamentalmente un MA con 2 livelli...)

Uso una MA centrale, e altre 2 MA tracciate con linee di punti per dare lo stesso effetto dei livelli...
per ogni livello popolo il buffer usando su calcola evento... come mi hai detto tu, ma qualcosa non va ;-(
le 2 MA che simulano il livello saranno spostate verticalmente... ma non funziona

Sì, è quello che intendevo

La cosa è semplice come diventa:

  • creare una ma (media)
  • aggiungere un po' di differenza in alto e in basso per il livello 1 (facendo due buffer in più)
  • aggiungere un po' di differenza in alto e in basso per il livello 2 (facendo altri due buffer)

Non c'è bisogno di cambiare nulla nel calcolo delle medie o altro: solo una semplice aggiunta o sottrazione dal buffer centrale (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ì, è quello che volevo dire

La cosa è semplice come diventa:

  • creare ma (media)
  • aggiungere un po' di differenza in alto e in basso per il livello 1 (facendo altri due buffer)
  • aggiungere qualche differenza in alto e in basso per il livello 2 (facendo altri due buffer)

Non c'è bisogno di cambiare nulla nel calcolo delle medie o altro: solo una semplice aggiunta o sottrazione dal buffer centrale (ma)

Potresti mostrare un codice di esempio per aggiungere/sottrarre (verticalmente) il ma? Ho provato ma il mio codice non funziona...

 
baraozemo:

Potresti mostrare un codice di esempio per aggiungere/sottrarre (verticalmente) il ma? Ho provato ma il mio codice non funziona.

Lo hai nella versione che ho postato. Per favore controlla di nuovo il codice
 
mladen:
Quell'indicatore usa il TMA centrato - ricalcola. Gli avvisi sarebbero inutili

ok cosa della freccia quando il colore cambia

 
dotmund:

ok cosa della freccia quando il colore cambia

I segnali (frecce) sarebbero inutili a causa della sua natura di ricalcolo/rimpaginazione
 
mladen:
I segnali (frecce) sarebbero inutili a causa della sua natura di ricalcolo/rimpaginazione

Caro @mladen,

Un esperto che non ha il supporto Ecn può essere usato senza problemi con un broker di tipo Ecn?

In alcuni esperti ci sono opzioni per broker di tipo Ecn.

Questo mi ha portato a pensare che potrebbe essere meglio ottimizzare o aggiungere alcuni codici per i broker di tipo Ecn.

 
oguz:

Caro @mladen,

Un esperto che non ha il supporto Ecn può essere usato senza problemi con un broker di tipo Ecn?

In alcuni esperti ci sono opzioni per broker di tipo Ecn.

Questo mi ha fatto pensare che potrebbe essere meglio ottimizzare o aggiungere alcuni codici per i broker di tipo Ecn.

Sì, se non usi stop loss e take profit quando apri gli ordini

Se è fatto per ecn/stp dall'altra parte, funzionerà su qualsiasi broker senza alcun problema. L'unica differenza è al momento dell'apertura degli ordini - non è necessario nessun altro cambiamento (o ottimizzazione)

 
oguz:

Grazie per la risposta dettagliata.

Per quanto ne so, l'ea allegato non ha il supporto di un broker di tipo Ecn.

Voglio usare questo ea in un broker di tipo Ecn usando SL e TP.

Sarò molto felice se mi fornirete il supporto per i broker di tipo Ecn.

Questo ea avrebbe bisogno di una riscrittura in modo che tutti lo capiscano

Ma dal momento che non parlo la lingua utilizzata in esso, non posso aiutare. Mi dispiace

Motivazione: