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

 
lil_lil:

Ich schließe 4 Positionen auf einmal, wie kann ich sie in der Verlustzählung als eine in einer Reihe zählen?

Es kann sein, dass sie aufgrund von Schlupf nicht zum gleichen Preis schließen und der Zeitpunkt unterschiedlich sein kann.

Versuch:

Wenn der Broker eine Gegenschließung zulässt, sollten wir einen Gegenauftrag mit einem Volumen eröffnen, das dem Volumen der kumulativ geschlossenen Aufträge entspricht, um den Schlusskurs festzulegen. Dann steht der Schlusskurs fest und Sie können in aller Ruhe 4 Geschäfte ausführen, um die entgegengesetzten Aufträge zu schließen.

 

Können Sie mir sagen, wie die Marge berechnet wird?

Einige Makler berechnen für jede Position eine Marge. Und einige Makler, nur auf den Unterschied im Volumen auf Kauf und Verkauf. (d.h. wenn das Konto voll gesperrt ist, ist die Marge Null)


Wie kann ich die Methode zur Berechnung der Gewinnspanne programmatisch festlegen?

 

Hallo. Ich suche nach einem Fraktal oberhalb des MA.

Auf der Suche nach einem Fraktal über dem MA merke ich mir einen Balken, dann suche ich nach einem Fraktal aus diesem Balken und wenn es kleiner ist als das erste, das ich finde, dann stimmt es

Ständig falsch in den Kommentaren

Comment(f_ma(Symbol(),0,i));
//+----------------------------------------------------------------------------+

bool f_ma(string sy="0",int tf=0,int nf=0) 
  {
   if(sy=="" || sy=="0") sy=Symbol();
   double f=0,MA=0,fr1,fr2;
   int    d=MarketInfo(sy,MODE_DIGITS),s;
   if(d==0) if(StringFind(sy,"JPY")<0) d=4; else d=2;
   int    i,k=iBars(sy,tf),kf,num_bar;

   for(i=nf+2; i<k; i++) 
     {
      f=iFractals(sy,tf,MODE_UPPER,i);
      MA=iMA(NULL,0,35,0,MODE_EMA,PRICE_CLOSE,i);
      if(f!=0) 
        {
        // kf++;
         if(f>MA) {num_bar=i; fr1=NormalizeDouble(f, d);continue;}
         
        }
     }
     //
      for(i=nf+ num_bar; i<k; i++) 
     {
      f=iFractals(sy,tf,MODE_UPPER,i);
      if(f!=0) 
        {
        fr2=NormalizeDouble(f, d);
        if(fr2<fr1) return(true);
        }
     }
     
     
   return(false);
  }
 
Ghabo:

Hallo. Ich suche nach einem Fraktal oberhalb des MA.

Auf der Suche nach einem Fraktal über dem MA merke ich mir einen Balken, dann suche ich nach einem Fraktal aus diesem Balken und wenn es kleiner ist als das erste, das ich finde, dann stimmt es

Ständig falsch in den Kommentaren

Das Problem liegt in dieser Zeile

         if(f>MA) {num_bar=i; fr1=NormalizeDouble(f, d);continue;}


Wenn ein Fraktal gefunden wird und es über dem MA liegt, sollten wir den Zyklus unterbrechen, anstatt ihn fortzusetzen. Nachdem das erste Fraktal gefunden wurde, gibt es ein weiteres und ein drittes und so weiter bis ...

 
Alexey Viktorov:

Das Problem liegt in dieser Zeile


Wenn ein Fraktal gefunden wird und es über dem MA liegt, sollten wir den Zyklus unterbrechen, anstatt ihn fortzusetzen. Nachdem das erste Fraktal gefunden wurde, gibt es ein weiteres und ein drittes und so weiter bis ...

Ich danke Ihnen. Ersetzt durch break;Jetzt ist es immer wahr. aber die Bedingungif(fr2<fr1) ist nicht erfüllt.
 
Ghabo:
Ich danke Ihnen. Ersetzt durch break;Jetzt ist es immer wahr. aber die Bedingungif(fr2<fr1) ist nicht erfüllt.

Wir müssen also diese Bedingung hinzufügen, bevor das Ergebnis der Funktion angezeigt wird. Was ist daran so schwer?

 
Alexey Viktorov:

Sie müssen also diese Bedingung hinzufügen, bevor die Funktion das Ergebnis ausgibt. Was ist daran so schwer?

Sollte die Funktion nicht false zurückgeben, wenn die Bedingung nicht erfüllt ist?

#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   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[])
  {
//---
if(rates_total<100) return(0);
int limit=rates_total-prev_calculated;
if(limit>200)limit=200;
   for(int i=limit; i>0; i--)
     {
     
     
     Comment(f_ma(Symbol(),0,i));
     }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
  //-------------------
  bool f_ma(string sy="0",int tf=0,int nf=0) 
  {
   if(sy=="" || sy=="0") sy=Symbol();
   double f=0,MA=0,fr1,fr2;
   int    d=MarketInfo(sy,MODE_DIGITS),s;
   if(d==0) if(StringFind(sy,"JPY")<0) d=4; else d=2;
   int    i,k=iBars(sy,tf),kf,num_bar;

   for(i=nf+2; i<k; i++) 
     {
      f=iFractals(sy,tf,MODE_UPPER,i);
      MA=iMA(NULL,0,35,0,MODE_EMA,PRICE_CLOSE,i);
      if(f!=0) 
        {
        // kf++;
         if(f>MA) {num_bar=i; fr1=NormalizeDouble(f, d);break;}
         
        }
     }
     //
      for(i=nf+ num_bar; i<k; i++) 
     {
      f=iFractals(sy,tf,MODE_UPPER,i);
      if(f!=0) 
        {
        fr2=NormalizeDouble(f, d);
        if(fr2<fr1) return(true);
        }
     }
     
     
   return(false);
  }
  
 
Ghabo:

Sollte die Funktion nicht false zurückgeben, wenn die Bedingung nicht erfüllt ist?

Prüfen Sie, ob iFractals Null oder einen leeren Wert zurückgibt.

 
Alexey Viktorov:

Prüfen Sie, ob iFractals Null oder einen leeren Wert zurückgibt.

Im Datenfenster ist ein leerer Wert vorhanden. Ersetzteif(f!=0) durch if(f!=EMPTY_VALUE), keine Änderung des Ergebnisses.
 
Ghabo:
Im Datenfenster ist ein leerer Wert vorhanden. Ersetzteif(f!=0) durch if(f!=EMPTY_VALUE), das Ergebnis ist unverändert.

1. Ich sagte prüfen, nicht ersetzen. iFractals gibt 0 zurück, wenn es kein Fraktal gibt. Ich benutze es nicht regelmäßig und natürlich verstopfe ich die ungetrockneten Reste meines Gedächtnisses nicht mit solchen Kleinigkeiten.

2. Die Funktion ist zwar schrecklich geschrieben, funktioniert aber trotzdem gut.

3. Der letzte Wert wird in Kommentar angezeigt. Ersetzen Sie es durch

     Print("************ ", f_ma(Symbol(), 0, 0));
Und sehen Sie, wie oft es gedruckt wird
2018.07.30 21:02:43.656 00 EURUSD.e,H1: ************ true
Grund der Beschwerde: