Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 61

 
Renat Akhtyamov:
Ich hoffe, dass der Variablen Percent in OnInit() ein Wert zugewiesen wird?
Die Variable "Prozent" ist benutzerdefiniert. Ich habe OnInit() fallen gelassen.
 
Michail_David:
Meine Prozent-Variable ist benutzerdefiniert. OnInit() habe ich entfallen lassen.
Wenn Lots=0, öffnet das Testgerät nichts
 
Renat Akhtyamov:
wenn Lots=0, wird nichts vom Prüfer geöffnet
Ich habe viel im Verhältnis zu Prozent berechnet. Der Tester berechnet die Anzahl der Lots, aber keine Trades.

 Margin_Percent=AccountFreeMargin()*Percent/100; 

Lots=Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED);

      Lots_Volume=(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP));

if(Lots>Lots_Volume)
        {
         Lots=Lots_Volume;
        }
      else if(Lots<Lots_Volume)
         Lots=MathFloor(Lots);
      Print("Количество лотов : ",Lots);
      return;
 
Michail_David:
Ich habe viel im Verhältnis zu Prozent berechnet. Der Tester berechnet die Anzahl der Lose, aber es werden keine Geschäfte getätigt.

Und dennoch, wo im Code ist Prozent eingestellt

und was bewirkt der folgende Befehl print("Lots : ",Lots); ?

 
Renat Akhtyamov:

Doch wo im Code ist Percent

und was bewirkt der folgende Befehl print("Anzahl der Lose : ",Lots); ?

#property link      ""
#property version   "1.00"
#property strict
//--- input parameters
input int      Percent=50;
input int      Fast_EMA_Period=12;
input int      Slow_EMA_Period=25;
input int      Signal_Period=9;
input double   Step_PSAR=0.02;
input double   Maximum_PSAR=0.2;
input int      MAGICNUMBER=413;
static datetime New_Time;// Время текущего бара
double Margin_Percent;  //Используемые средства для открытия ордеров
double Lots;//Определение общего количества лотов
double Lots_Volume;
double MacdCurrent;//Параметры MACD основной линии текущего бара
double MacdPrevious1;//Параметры MACD основной линии предыдущего бара
double MacdPrevious2;//Параметры MACD основной линии со смещением на 2 бара
double StopLoss;//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double CurrentPSAR;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

   bool New_Bar=false;                    // Флаг нового бара
   int ticket,total,cnt;
//---------------------------------------------------------------------------
   New_Time=TimeCurrent();
   if(Time[0]==New_Time) // Сравниваем время
      New_Bar=true;      // Поймался новый бар
   else if(New_Bar==false) // Если бар не новый..
Die fünfte Zeile gibt den Prozentsatz an. Im Protokoll steht: "Anzahl der Lose: 90.0100000001". Vielleicht sollten wir NormalizeDouble() hinzufügen?
 
Michail_David:
In der fünften Zeile wird Percent eingestellt. Das Protokoll zeigt: "Die Anzahl der Lose ist 90.0100000001". Vielleicht sollten wir NormalizeDouble() hinzufügen?

Mit dem Grundstück ist alles in Ordnung.

Suchen Sie nach einem Fehler in der Logik der Auftragseröffnung.

In solchen Fällen setze ich normalerweise eine explizite Bedingung, die den Auftrag öffnet

 
Renat Akhtyamov:

Mit dem Grundstück ist alles in Ordnung.

Suchen Sie nach einem Fehler in der Logik der Auftragseröffnung.

In der Regel stelle ich in solchen Fällen eine ausdrückliche Bedingung für die Öffnung des Auftrags auf

Bitte geben Sie uns ein Beispiel mit einer eindeutigen Bedingung. Wenn ich es richtig verstehe, sollte es eine Bedingung in der zu öffnenden Schleife geben. Ist dies richtig?
 
Michail_David:
Bitte geben Sie ein Beispiel mit einer eindeutigen Bedingung an. Wenn ich es richtig verstehe, sollte die Schleife eine Bedingung für das Öffnen haben. Oder?
Geben Sie am Anfang des Codes, gleich nach der Berechnung des Loses, einen Befehl zum Öffnen eines Auftrags und vergewissern Sie sich, dass der Tester richtig funktioniert. Dann können Sie alles wieder zurücklegen.
 
Renat Akhtyamov:
Geben Sie am Anfang des Codes, gleich nach der Berechnung des Loses, einen Befehl zur Eröffnung eines Auftrags und vergewissern Sie sich, dass der Tester richtig funktioniert. Dann können Sie alles wieder an seinen Platz setzen.
Ich danke Ihnen. Ich habe einen Fehler gefunden. Ich hatte zurückgegeben; nach Berechnung der Lose. Deshalb haben sich die Lose nicht geöffnet.
 
Michail_David:
Die fünfte Zeile gibt den Prozentsatz an. Im Protokoll wird angezeigt: "Anzahl der Lose 90.0100000001". Vielleicht sollten wir NormalizeDouble() hinzufügen?
Ja, das sollten Sie. Und nicht nur Lose, sondern auch alle anderen Werte, die an den Server übergeben werden. Lots sind auch nützlich, um die minimale und maximale erlaubt in den Kontowert zu überprüfen, auch auf der Schritt ändern, gab es Fälle, in denen das Los in Schritten von 0,03 geändert werden kann, so 90,01 wird nicht funktionieren, zumindest überschrieben.
Grund der Beschwerde: