Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 168

 
TheXpert:
Im Terminal gibt es kein Ereignis "close order". Sie sollten ein Skript oder einen Expert Advisor verwenden. Wie oben dargestellt.

Wie heißt das Ereignis, wenn Sie das Kreuz drücken, um einen offenen Auftrag zu schließen?

Das ist es, was Sie brauchen, um einen Ton "zuzuordnen

 
paladin800:

Herzlichen Dank!

Ich habe auch meinen Fehler gefunden. Der Punkt ist, dass die "Buy_close"-Bedingung dem Programm eine Aufgabe gibt, um das Geschäft auszuführen, und die Prüfung für die Position ist "Buy_opened".

Das Geschäft ist abgeschlossen und die "Buy_close"-Bedingung stimmt überein, daher wird ein Fehler erzeugt.

Die Bedingung wurde wie folgt festgelegt:

if(Buy_close && Buy_opened==true)
 
trora:

Dies ist die Aktion, mit der der Ton "zugewiesen" wird

Viel Glück :)
 

Ich kann keine MA-Linien mit einem Offset von -+0,30% erhalten.

Es istkein Problem, den gleitenden Durchschnitt aufzurufen, von dem aus die Verschiebung erfolgen soll, aber es gibt keine Möglichkeit, Verschiebungslinien zu erhalten.

Grundlegender Code:

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrMediumVioletRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_label1  ""
#property  indicator_type2   DRAW_LINE
#property  indicator_color2  clrRed
#property  indicator_style2  STYLE_SOLID
#property  indicator_label2  "Sell TP
input int Period_ = 34;         //Период
int ma1Handle;
double ma1Val[]; 
double ExtMapBuffer1[];
double ExtMapBuffer2[]
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {   
SetIndexBuffer(0,ExtMapBuffer1,INDICATOR_DATA);
SetIndexBuffer(1,ExtMapBuffer2,INDICATOR_DATA)
ma1Handle=iMA(_Symbol,_Period,Period_,0,MODE_EMA,PRICE_CLOSE); 
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
CopyBuffer(ma1Handle,0,0,2,ma1Val);
ArraySetAsSeries(ma1Val,true);
int bars=Bars(_Symbol,_Period);
for(int i=0;i<bars;i++)
{
ExtMapBuffer2[i]=ma1Val[0] - ((ma1Val[0]/100)*0.3);//ЗДЕСЬ НЕ ПОЛУЧАЕТСЯ ПОЛУЧИТЬ ЛИНИЮ
}
//---   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
#property indicator_label2  "Sell TP
Wo steht das zweite Anführungszeichen?
 
CopyBuffer(ma1Handle,0,0,2,ma1Val);
Diese Zeichenfolge muss in einer Schleife stehen und indiziert sein.
 
sandex:
Diese Zeichenfolge sollte in einer Schleife stehen und indiziert sein.

Wie indiziere ich eine Zeichenkette? Wenn ich das versuche, kommt die Fehlermeldung

ArraySetAsSeries(ma1Val,true);
int bars=Bars(_Symbol,_Period);
for(int i=0;i<bars;i++)
    {
    CopyBuffer(ma1Handle,0,0,2,ma1Val[i]);
    ExtMapBuffer2[i]=ma1Val[i] - ((ma1Val[i]/100)*0.3);//ЗДЕСЬ НЕ ПОЛУЧАЕТСЯ ПОЛУЧИТЬ ЛИНИЮ
    }
 

Die Indizierung sollte folgendermaßen durchgeführt werden:

CopyBuffer(ma1Handle,0,i,1,ma1Val);
 

Diese Zeile sollte wie folgt aussehen:

ExtMapBuffer2[i]=ma1Val[0] - ((ma1Val[0]/100)*0.3);
 

Deklarieren Sie das Array als statisch, mit der Größe 1:

double ma1Val[1];
Grund der Beschwerde: