Hilfe bei der Codierung - Seite 743

 
mladen:
Die singuläre Spektralanalyse (SSA) wird neu berechnet, sofern es sich nicht um eine Endpunktversion handelt. Da dieser Indikator die "normale" SSA verwendet, wird auch er neu berechnet.
HERZLICHEN DANK
 
mladen:

Ich fürchte, dass ich aus dem Code nicht ersehen kann, was Ihre Absicht ist überhaupt

Wenn Sie versuchen, Durchschnitte mit Ebenen zu haben, verwenden Sie die, die ich als Vorlage gepostet habe

Hallo,

ja, ich werde Ihre erweiterte ma mit Ebenen, (es ist hat mehr Preise, etc.. farbige ma, etc..)

aber ich habe versucht, einen von mir selbst zu erstellen, um zu verstehen, wie man einen benutzerdefinierten Indikator erstellt,

meine Idee ist es, die gleiche Komponente zu erstellen (im Grunde ein MA mit 2 Ebenen..)

Ich verwende einen zentralen MA und 2 weitere MA, die mit gepunkteten Linien gezeichnet werden, um den gleichen Effekt wie Levels zu erzielen...
für jedes Level fülle ich den Puffer mit Hilfe von on calculate event... wie Sie mir gesagt haben, aber irgendetwas ist falsch ;-(
die 2 MAs, die das Niveau simulieren, werden vertikal verschoben... aber es funktioniert nicht

 
baraozemo:

Hallo,

Ja, ich werde Ihre fortgeschrittene ma mit Ebenen verwenden, (es hat mehr Preise, etc.. farbige ma, etc..)

aber ich habe versucht, einen von mir selbst zu erstellen, um zu verstehen, wie man einen benutzerdefinierten Indikator erstellt,

meine Idee ist es, die gleiche Komponente zu erstellen (im Grunde ein MA mit 2 Ebenen..)

Ich verwende einen zentralen MA und 2 weitere MA, die mit gepunkteten Linien geplottet werden, um den gleichen Effekt wie Levels zu erzielen...
für jedes Level fülle ich den Puffer mit Hilfe von on calculate event... wie Sie mir gesagt haben, aber irgendetwas ist falsch ;-(
die 2 MAs, die das Niveau simulieren, werden vertikal verschoben... aber es funktioniert nicht

Ja, das ist es, was ich meinte.

Die Sache ist so einfach wie nur möglich:

  • MA erstellen (Durchschnitt)
  • für Stufe 1 eine Differenz nach oben und unten hinzufügen (zwei weitere Puffer bilden)
  • fügen Sie eine Differenz nach oben und unten für Stufe 2 hinzu (zwei weitere Puffer)

Es ist nicht nötig, irgendetwas in der Durchschnittsberechnung oder sonst etwas zu ändern: es ist nur eine einfache Addition oder Subtraktion vom zentralen (MA) Puffer

 

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
:

Ja, das ist es, was ich meinte.

Die Sache ist so einfach, wie sie nur sein kann:

  • ma erstellen (Durchschnitt)
  • füge für Stufe 1 eine Differenz nach oben und unten hinzu (und erzeuge zwei weitere Puffer)
  • Addiere eine Differenz nach oben und unten für Level 2 (mache zwei weitere Puffer)

Es ist nicht nötig, irgendetwas in der Durchschnittsberechnung oder sonst etwas zu ändern: es ist nur eine einfache Addition oder Subtraktion vom zentralen (ma) Puffer

Könnten Sie einen Beispielcode für das Addieren/Subtrahieren (vertikal) der ma zeigen? Ich habe es versucht, aber mein Code schlägt fehl.

 
baraozemo:

könnten Sie ein Beispiel-Code für addieren/subtrahieren (vertikal) die ma zeigen? Ich habe versucht, aber mein Code nicht.

Das haben Sie in der Version, die ich gepostet habe. Bitte überprüfen Sie den Code noch einmal
 
mladen:
Dieser Indikator verwendet zentrierte TMA - er berechnet neu. Alerts wäre sinnlos sein

ok, was der Pfeil, wenn die Farbe ändern

 
dotmund:

ok was von Pfeil, wenn die Farbe ändern

Die Signale (Pfeile) wären wegen der Neuberechnung/Neueinfärbung sinnlos
 
mladen:
Die Signale (Pfeile) wären aufgrund ihrer Neuberechnung/Neuzeichnung sinnlos.

Lieber @mladen,

Kann ein Experte, der keine Ecn-Unterstützung hat, problemlos mit einem Broker vom Typ Ecn verwendet werden?

In einigen Experten gibt es Optionen für Ecn-Typ-Broker.

Das hat mich auf den Gedanken gebracht, dass es besser sein könnte, einige Codes für Ecn-Broker zu optimieren oder hinzuzufügen.

 
oguz:

Lieber @mladen,

kann ein Experte, der keine Ecn-Unterstützung hat, problemlos mit einem Broker vom Typ Ecn verwendet werden?

In einigen Experten gibt es Optionen für Ecn-Typ-Broker.

Das hat mich auf den Gedanken gebracht, dass es besser sein könnte, einige Codes für Ecn-Broker zu optimieren oder hinzuzufügen.

Ja, wenn Sie beim Eröffnen von Aufträgen keinen Stop Loss und Take Profit verwenden.

Wenn es für ecn/stp auf der anderen Seite gemacht wird, wird es auf jedem Makler mit überhaupt kein Problem funktionieren. Der einzige Unterschied besteht darin, dass beim Eröffnen von Aufträgen keine weiteren Änderungen (oder Optimierungen) erforderlich sind.

 
oguz:

Vielen Dank für Ihre ausführliche Antwort.

Soweit ich weiß, die beigefügte ea hat nicht Ecn Typ Broker Unterstützung.

Ich möchte diese ea in Ecn-Typ-Broker durch die Verwendung von SL und TP zu verwenden.

Ich werde sehr glücklich sein, wenn Sie Ecn Typ Broker-Unterstützung bieten.

Diese Ea müsste umgeschrieben werden, damit jeder sie versteht.

Aber da ich die darin verwendete Sprache nicht spreche, kann ich nicht helfen. Entschuldigung