Aide au codage - page 743

 
mladen:
L'analyse de spectre singulier (SSA) recalcule, sauf s'il s'agit d'une version de point final. Puisque cet indicateur utilise une SSA "normale", il recalcule aussi.
MERCI BEAUCOUP
 
mladen:

Je crains qu'à partir du code, je ne vois pas du tout quelle est votre intention.

Si vous essayez d'avoir des moyennes avec des niveaux, utilisez celui que j'ai posté comme modèle

Bonjour,

oui je vais utiliser votre ma avancé avec des niveaux, (il a plus de prix, etc. ma coloré, etc.)

mais j'ai essayé d'en créer un par moi-même pour comprendre comment créer un indicateur personnalisé,

mon idée est de créer le même composant (en gros une MA avec 2 niveaux..)

J'utilise une MA centrale, et 2 autres MA tracées en utilisant des lignes de points pour donner le même effet que les niveaux...
pour chaque niveau, je remplis le tampon en utilisant l'événement on calculate... comme vous me l'avez dit, mais quelque chose ne va pas ;-(
les 2 MAs qui simulent le niveau seront décalées verticalement... mais cela ne fonctionne pas

 
baraozemo:

Bonjour,

oui je vais utiliser votre ma avancé avec des niveaux, (il a plus de prix, etc. ma coloré, etc.)

mais j'ai essayé d'en créer une par moi-même pour comprendre comment créer un indicateur personnalisé,

mon idée est de créer le même composant (en fait une MA avec 2 niveaux..)

J'utilise une MA centrale, et 2 autres MA tracées en utilisant des lignes de points pour donner le même effet que les niveaux...
pour chaque niveau, je remplis le tampon en utilisant l'événement on calculate... comme vous me l'avez dit, mais quelque chose ne va pas ;-(
les 2 MAs qui simulent le niveau seront décalées verticalement... mais cela ne fonctionne pas

Oui, c'est ce que je voulais dire

La chose est aussi simple que possible :

  • créer un MA (moyen)
  • ajouter une différence vers le haut et vers le bas pour le niveau 1 (en faisant deux tampons supplémentaires)
  • ajouter une différence vers le haut et vers le bas pour le niveau 2 (en faisant deux tampons supplémentaires)

Il n'y a pas besoin de changer quoi que ce soit dans le calcul des moyennes ou autre : juste une simple addition ou soustraction du 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
:

Oui, c'est ce que je voulais dire.

La chose est aussi simple que possible :

  • créer ma (moyenne)
  • ajouter une différence vers le haut et vers le bas pour le niveau 1 (en créant deux tampons supplémentaires)
  • ajouter une différence vers le haut et vers le bas pour le niveau 2 (en faisant deux tampons supplémentaires)

Il n'y a pas besoin de changer quoi que ce soit dans le calcul des moyennes ou quoi que ce soit d'autre : juste une simple addition ou soustraction du tampon central (ma).

Pourriez-vous montrer un exemple de code pour ajouter/soustraire (verticalement) le ma ? J'ai essayé mais mon code échoue...

 
baraozemo:

pourriez-vous montrer un exemple de code pour ajouter/soustraire (verticalement) le ma ? j'ai essayé mais mon code échoue....

Vous avez cela dans la version que j'ai postée. S'il vous plaît vérifier le code à nouveau
 
mladen:
Cet indicateur utilise la TMA centrée - il recalcule. Les alertes seraient inutiles

ok que fait la flèche quand la couleur change

 
dotmund:

ok, qu'est-ce que la flèche quand la couleur change

Les signaux (flèches) seraient inutiles en raison de leur nature de recalcul/repeinture.
 
mladen:
Les signaux (flèches) seraient inutiles en raison de leur nature de recalcul/reproduction.

Cher @mladen,

Un expert qui n'a pas de support Ecn peut-il être utilisé sans problème avec un courtier de type Ecn ?

Dans certains experts, il y a des options pour les courtiers de type Ecn.

Cela m'a amené à penser qu'il serait préférable d'optimiser ou d'ajouter certains codes pour les courtiers de type Ecn.

 
oguz:

Cher @mladen,

Un expert qui n'a pas de support Ecn peut-il être utilisé sans problème avec un courtier de type Ecn ?

Dans certains experts, il y a des options pour les courtiers de type Ecn.

Cela m'a amené à penser qu'il serait préférable d'optimiser ou d'ajouter certains codes pour les courtiers de type Ecn.

Oui, si vous n'utilisez pas le stop loss et le take profit lors de l'ouverture des ordres.

S'il est fait pour ecn/stp d'autre part, il fonctionnera sur n'importe quel courtier sans aucun problème. La seule différence est au moment de l'ouverture des ordres - aucun autre changement (ou optimisation) n'est nécessaire.

 
oguz:

Merci pour votre réponse détaillée.

Pour autant que je sache, l'application ci-jointe ne supporte pas les courtiers de type Ecn.

Je veux utiliser cet ea dans un courtier de type Ecn en utilisant SL et TP.

Je serai très heureux si vous fournissez un support pour les courtiers de type Ecn.

Cette ea aurait besoin d'une réécriture pour que tout le monde la comprenne.

Mais comme je ne parle pas la langue utilisée, je ne peux pas vous aider. Désolé

Raison: