[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 28

 
Wo liegt hier der Fehler "falsche Parameteranzahl"?
MA1 = iMA(NULL, 0, MA_Period1, MODE_SMA, PRICE_CLOSE,0);
 
Сvovan-gogan:
Wo liegt hier der Fehler "falsche Parameteranzahl"?


Guten Tag! Vielen Dank, dass Sie diese Frage gestellt haben. Ich bin Ihnen gerne behilflich.

Wir verbeugen uns in der Taille und reagieren intelligent:

Offensichtlich fehlt Ihnen ein Parameter in iMA:

double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)
Berechnung des gleitenden Durchschnitts.
Parameter:
Symbol - Symbolname des Symbols, auf dessen Daten der Indikator berechnet wird. NULL bedeutet aktuelles Symbol.
Zeitrahmen - Zeitraum. Kann eine der Perioden des Diagramms sein. 0 bedeutet die Periode des aktuellen Diagramms.
Zeitraum - Zeitraum der Mittelwertbildung für die Berechnung des gleitenden Durchschnitts.
ma_shift - Indikatorverschiebung relativ zum Kurschart.
ma_method - Methode der Mittelwertbildung. Kann ein beliebiger Wert aus den Methoden des gleitenden Durchschnitts sein.
angewandter_Preis - Verwendeter Preis. Kann eine der Preiskonstanten sein.
Schicht - Index des aus dem Indikatorpuffer erhaltenen Wertes (Verschiebung relativ zum aktuellen Takt um die angegebene Anzahl von Perioden zurück).
--------------------------

Höchstwahrscheinlich fehlt der Parameter:

ma_shift - Verschiebung des Indikators relativ zum Preisdiagramm.

Ich freue mich auf Ihre weiteren Fragen!

 
Herzlichen Dank)
 

Ich brauche Ihre Hilfe.

Dieser Ausdruck muss übersetzt werden

OrderOpenPrice()-OrderClosePrice()
in eine Anzahl von Punkten und berechnen Sie den Gewinn oder den Stop für jede Position je nach Lot. Und schließlich drucken Sie den Gesamtbetrag in % des Gewinns oder des Stopps
 
Vodya:

Ich brauche Ihre Hilfe.

Ich muss diesen Ausdruck übersetzen

auf die Anzahl der Artikel ......


Wählen Sie zunächst das gewünschte Element aus.

( OrderOpenPrice() - OrderClosePrice() ) /Point - dies ist der Gewinn/Verlust der ausgewählten Position in Pips

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

Für Ihre Berechnungen ist es besser, geeignete Funktionen von I. Kim zu verwenden. Und die Aufgabe wird um ein Vielfaches leichter werden.

https://www.mql5.com/ru/forum/131859

https://www.mql5.com/ru/forum/131859/page3#434225

 
leonid553:


Wählen Sie zunächst die richtige Position.

( OrderOpenPrice() - OrderClosePrice() ) * Punkt - dies ist der Gewinn/Verlust der ausgewählten Position in Punkten

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

Für Ihre Berechnungen ist es besser, geeignete Funktionen von I. Kim zu verwenden. Und die Aufgabe wird um ein Vielfaches leichter werden.

https://www.mql5.com/ru/forum/131859

https://www.mql5.com/ru/forum/131859/page3#434225


Ich danke Ihnen. Aber ich habe in seiner Funktion nicht gefunden, was ich brauche. Und in diesem Fall ( OrderOpenPrice() - OrderClosePrice() ) * Punkt I macht ( OrderOpenPrice() - OrderClosePrice() ) / Punkt

Wenn Sie 0000000000000000000000 multiplizieren, erhalten Sie

 

Ja, natürlich - ich habe einen Fehler gemacht - man muss durch Punkt dividieren, nicht multiplizieren!

Nach Funktion.

Es ist ganz einfach. Zum Beispiel. Sie müssen den aktuellen Gewinn (oder Verlust) in der Einzahlungswährung der offenen Trades kennen (nehmen wir an) - Bai-Positionen auf EURUSD und Verkaufspositionen auf GBPUSD.

Nehmen Sie die Funktion https://www.mql5.com/ru/forum/131859/page3#434223

und kopieren Sie es an das Ende Ihres Codes (außerhalb der START-Funktion)

Dann wird der aktuelle Gewinn in der Währung Ihrer Positionen sein (innerhalb von START eingestellt):

double PROFIT_ EURUSD = GetProfitOpenPosInCurrency(EURUSD, OP_BUY, -1) ;

double PROFIT_FUNTDOLLAR = GetProfitOpenPosInCurrency(GBPUSD, OP_SELL, -1) ;

Wenn Sie beim Öffnen dieser Positionen eine Magie angegeben haben, geben Sie die Magie anstelle von "-1" an.

Wenn Sie den Gewinn einer Position in Bezug auf das aktuelle Symbol wissen müssen, d.h. im Chart, auf dem der EA platziert wurde und läuft, dann :

double PROFIT_NULL = GetProfitOpenPosInCurrency(NULL, OP_SELL, -1) ;

 
leonid553:

Ja, natürlich - ich habe einen Fehler gemacht - man muss durch Punkt dividieren, nicht multiplizieren!

Nach Funktion.

Es ist ganz einfach. Zum Beispiel. Sie müssen den aktuellen Gewinn (oder Verlust) in der Einzahlungswährung der offenen Trades kennen (nehmen wir an) - Bai-Positionen auf EURUSD und Verkaufspositionen auf GBPUSD.

Nehmen Sie die Funktion https://www.mql5.com/ru/forum/131859/page3#434223

und kopieren Sie es an das Ende Ihres Codes (außerhalb der START-Funktion)

Dann wird der aktuelle Gewinn in der Währung Ihrer Positionen (innerhalb von START eingestellt):

double PROFIT_ EURUSD = GetProfitOpenPosInCurrency(EURUSD, OP_BUY, -1) ;

double PROFIT_FUNTDOLLAR = GetProfitOpenPosInCurrency(GBPUSD, OP_SELL, -1) ;

Wenn Sie beim Öffnen dieser Positionen eine Magie angegeben haben, geben Sie die Magie anstelle von "-1" an.

Wenn Sie den Gewinn einer Position in Bezug auf das aktuelle Symbol wissen müssen, d.h. im Chart, auf dem der EA platziert wurde und läuft, dann :

double PROFIT_NULL = GetProfitOpenPosInCurrency(NULL, OP_SELL, -1) ;


Danke für den Rat.

Aber ich möchte den Gewinn als Prozentsatz der anfänglichen Einlage und den Verlust der Einlage berechnen lassen. Es funktioniert, aber nur für jeden Handel, es ist nicht möglich, den Gesamtverlust zu berechnen.

 
Vodya:


Danke für den Hinweis.

Aber ich möchte den Gewinn als Prozentsatz der ursprünglichen Einlage und den Verlust der Einlage berechnen. Ich kann es berechnen, aber nur für jedes einzelne Geschäft, es funktioniert nicht als Ganzes.

Nachfolgend finden Sie Funktionen zur Berechnung von Gewinn und Verlust.

Wenn Sie den Wert der Größe/Verluste haben, können Sie berechnen, wie hoch der Prozentsatz der Einlage ist.

 double Profit(){
   double profit=0; 
   for(int i=OrdersHistoryTotal()-1; i>=0; i--){
     if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue; 
     if(OrderSymbol()!=Symbol())continue;
     if(OrderMagicNumber()!=Magic)continue;
     if(OrderType()>1)continue;
     if(OrderProfit()>0)profit+=OrderProfit();
    }        
 return(profit);} 

 double Loss(){
   double loss=0; 
   for(int i=OrdersHistoryTotal()-1; i>=0; i--){
     if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue; 
     if(OrderSymbol()!=Symbol())continue;
     if(OrderMagicNumber()!=Magic)continue;
     if(OrderType()>1)continue;
     if(OrderProfit()<0)loss+=OrderProfit();
    }        
 return(loss);} 
 
charter:

Nachfolgend finden Sie die Funktionen zur Berechnung von Gewinn und Verlust.

Anhand der Höhe des Gewinns und Verlusts können Sie berechnen, wie viel Prozent der Einlage dies ausmacht.


Ich danke Ihnen.

Aber wenn Sie in dieser Reihe kompilieren.

double Profit(){

Es erscheint die Meldung '(' - Funktionsdefinition unerwartet

und diese '}'. - unausgewogene Klammern an der Stelle, an der die letzte Rückgabe(0) steht.

Wo soll er überhaupt eingefügt werden? Vielleicht habe ich es an die falsche Stelle gesetzt