Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 409

 
RomanRott:

Ich möchte in meinem Indikator/Berater einen Code vorschreiben, der beim Einschalten sofort einige andere Indikatoren verbindet
Welche Art von Code?

Irgendetwas sagt mir, dass es für den Tester ist. Dies ist mit einem halben Klick ohne Programmierung gelöst. Wenn Sie eine Vorlage mit allen benötigten Indikatoren erstellen und ihr den Namen "Tester" oder den Namen des Beraters geben, wird ein Chart mit bereits gesetzten Indikatoren geöffnet, wenn Sie den Berater im Tester ausführen.

 
RomanRott:

Ich möchte einen Code in meinen Indikator/Advisor schreiben, der sofort einige andere Indikatoren verbindet, wenn ich auf
schalte.

Ich habe viele Varianten. Zum Beispiel 1) ChartApplyTemplate - wendet auf das Diagramm die angegebene Vorlage an (die Vorlage zeigt den Indikator). 2) Fügen Sie den Code des Indikators hinzu, der in den Indikator aufgenommen werden soll. 3) Zeigen Sie im Expert Advisor den Indikator durch grafische Objekte an. 4) ...
 

Hallo, können Sie mich bitte beraten, ich muss Vinini_HMA Indikator in einen EA zu integrieren, habe ich es geschafft, es zu verbinden und erhalten Daten über Ressource und iCustom, aber die Prüfung hat sich sehr langsam. Bitte beraten Sie, wie die Indikatorwerte in der EA selbst berechnet werden, ich brauche nur einen Parameter für die letzten 3 Kerzen.

Hier ist der Code des Indikators:

#property indicator_chart_window 
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green 
#property indicator_color3 Red 
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2

//---- input parameters 
extern int period=15; 
extern int method=3; // MODE_SMA 
extern int price=0; // PRICE_CLOSE 
extern int sdvig=0;
//---- buffers 

double Uptrend[];
double Dntrend[];
double ExtMapBuffer[];

double vect[]; 

//+------------------------------------------------------------------+ 
//| Custom indicator initialization function | 
//+------------------------------------------------------------------+ 
int init() { 
   IndicatorBuffers(4); 
   SetIndexBuffer(0, ExtMapBuffer); 
   SetIndexBuffer(1, Uptrend); 
   SetIndexBuffer(2, Dntrend); 
   SetIndexBuffer(3, vect); 
   
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);

   SetIndexDrawBegin(0,1*period);
   SetIndexDrawBegin(1,2*period);
   SetIndexDrawBegin(2,3*period);

   IndicatorShortName("Signal Line("+period+")"); 
   SetIndexLabel(1,"UP");
   SetIndexLabel(2,"DN");
   return(0); 
} 

//+------------------------------------------------------------------+ 
//| Custor indicator deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() { return(0); } 

//+------------------------------------------------------------------+ 
//| ?????????? ??????? | 
//+------------------------------------------------------------------+ 
double WMA(int x, int p) { return(iMA(NULL, 0, p, 0, method, price, x+sdvig)); } 

//+------------------------------------------------------------------+ 
//| Custom indicator iteration function | 
//+------------------------------------------------------------------+ 
int start() { 
   int counted_bars = IndicatorCounted(); 

   if (counted_bars < 0) return(-1); 
   if (counted_bars > 0) counted_bars--;
   
   int p = MathSqrt(period); 

   int i, limit0,limit1,limit2;
   
   limit2=Bars - counted_bars;
   limit1=limit2;
   limit0=limit1;

   if (counted_bars==0){
      limit1-=(period);
      limit2-=(2*period);
   }

   for(i = limit0; i >= 0; i--)    vect[i]          = 2*WMA(i, period/2) - WMA(i, period); 
   for(i = limit1; i >= 0; i--)    ExtMapBuffer[i]  = iMAOnArray(vect, 0, p, 0, method, i); 
   for(i = limit2; i >= 0; i--) { 
      Uptrend[i] = EMPTY_VALUE; if (ExtMapBuffer[i]> ExtMapBuffer[i+1]) Uptrend[i] = ExtMapBuffer[i]; `  AZ4
      Dntrend[i] = EMPTY_VALUE; if (ExtMapBuffer[i]< ExtMapBuffer[i+1]) Dntrend[i] = ExtMapBuffer[i]; 
   }
   return(0); 
} 

Ich brauche, um die letzten 3 Werte zu berechnen, die in den PufferExtMapBuffer[i] sind. Ich bin ein Anfänger, beurteilen Sie nicht streng. Ich habe versucht, diese Codefragmente in den Expert Advisor einzufügen, aber die Werte werden falsch berechnet

extern int period1=14;
extern int method1=3;
extern int price1=0;
extern int sdvig1=0;

-----------------------------------------------------
.
int p = MathSqrt(period1);      
        
        int z = 3;
        double vect[];
        ArrayResize(vect,z);
        
for(int i = 2; i >= 0; i--) vect[i] = 2*WMA(i, period1/2) - WMA(i, period1);
                
        int y = 3;;
        double HMA[];
        ArrayResize(HMA,y);
        
for(i = 2; i >= 0; i--) HMA[i]  = iMAOnArray(vect, 0, p, 0, method, i);

-------------------------------------------------------

double WMA(int x, int p) { return(iMA(NULL, 0, p, 0, method1, price1, x+sdvig1)); }

Ich brauche es wirklich! Ich danke Ihnen! Vielen Dank im Voraus! Und entschuldigen Sie die lange Nachricht.

Dateien:
123.png  22 kb
 

Am Ende habe ich 3 Werte: vect[0], vect[1], vect[2]. Aber ich brauche HMA-Werte. HMA[0] wird berechnet, ist aber nicht korrekt. HMA[1] und HMA[2] sind Null.

 
ilfat85:

Am Ende habe ich 3 Werte: vect[0], vect[1], vect[2]. Aber ich brauche HMA-Werte. HMA[0] wird berechnet, ist aber nicht korrekt. HMA[1] und HMA[2] sind Null.

Ich glaube, es wurde bereits auf dieser Seite diskutiert... Haben Sie versucht, den Autor zu kontaktieren?
 
ilfat85:

Hallo, können Sie mich bitte beraten, ich muss Vinini_HMA Indikator in einen EA zu integrieren, habe ich es geschafft, es zu verbinden und erhalten Daten über Ressource und iCustom, aber die Prüfung hat sich sehr langsam. Bitte beraten Sie, wie die Indikatorwerte in der EA selbst berechnet werden, ich brauche nur einen Parameter für die letzten 3 Kerzen.

Hier ist der Code des Indikators:

Ich brauche, um die letzten 3 Werte zu berechnen, die in den PufferExtMapBuffer[i] sind. Ich bin ein Anfänger, beurteilen Sie nicht streng. Ich habe versucht, diese Codefragmente in den Expert Advisor einzufügen, aber die Werte werden falsch berechnet

Ich brauche es wirklich! Ich danke Ihnen! Vielen Dank im Voraus! Und entschuldigen Sie die lange Nachricht.

Für den Tester, nicht verbinden eine Ressource - es ist langsam (gilt nicht für diesen speziellen Indikator, sondern für alle - alle Ressourcen sind langsam in den Tester).

Verbinden Sie sich einfach über iCustom() vom Dateispeicherort in seinem Ordner (nicht von der Ressource)

 
STARIJ:
Ich glaube, dies wurde bereits auf dieser Seite diskutiert... Haben Sie versucht, den Autor zu kontaktieren?

Vitya erscheint hier sehr selten.

 
STARIJ:
Ich glaube, es wurde bereits auf dieser Seite diskutiert... Haben Sie versucht, den Autor zu kontaktieren?

Es ist ein etwas anderes Problem gibt, erhalten sie die Werte aus dem Indikator, und ich wollte die Werte direkt in der EA berechnet werden. Die Formeln scheinen einfach zu sein, aber ich habe irgendwo einen Fehler gemacht. Ich habe den Autor nicht kontaktiert, das habe ich nicht. Danke für den Hinweis, ich werde versuchen, ihn anzuschreiben.

 
Artyom Trishkin:

Für den Tester, nicht eine Ressource zu verbinden - es verlangsamt (gilt nicht für diesen speziellen Indikator, sondern für alle - der Ressourcen verlangsamen in der Tester).

Verbinden Sie einfach über iCustom() von einem Dateispeicherort in seinem Ordner (nicht von einer Ressource)


Ich danke Ihnen! Das wusste ich nicht, ich werde es auf diese Weise versuchen.

 

Hallo. Ich erstelle ein Balkendiagramm basierend auf der Größe der Kerzen. Hilf mir zu wissen, dass die Größe der ersten Kerze die größte der letzten zehn Kerzen ist. Der Balken des Histogramms sollte in irgendeiner Weise markiert werden, durch Breite oder Farbe. Vielleicht sollten Sie auch einen Puffer hinzufügen.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit = Bars-1;
//--- counting from 0 to rates_total
   

//--- the main loop of calculations
   for(i = limit; i >= 0; i--)
     {
      if (hl) ExtATRBuffer[i] = (iHigh(Symbol(),Period(),i) - iLow(Symbol(),Period(),i)); 
                        
      else    ExtATRBuffer[i] = MathAbs(iOpen(Symbol(),Period(),i) - iClose(Symbol(),Period(),i));
      
      if (ExtATRBuffer[i] < x) ExtATRBuffer[i] = 0;
    
    //
      
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
п
Grund der Beschwerde: