Korrekte Berechnung der Partie aus dem Prozentsatz der Kaution - Seite 3

 
7bec:

aber sicherlich sollte es hier AccountBalance und nicht AccountFreeMargin sein, dann funktioniert der Experte plötzlich nicht mehr in einem Lot?

Haben Sie lange nachgedacht, bevor Sie einem vierjährigen Post eine Frage gestellt haben? Glauben Sie wirklich, dass er Ihnen antworten wird?
 
zoritch:

Haben Sie lange und gründlich nachgedacht, bevor Sie einem Vierjährigen eine Frage gestellt haben? Glauben Sie wirklich, dass er Ihnen antworten wird?
Und wenn Sie Glück haben?
 
7bec:

aber sicherlich sollte es hier AccountBalance und nicht AccountFreeMargin sein, dann funktioniert der Experte plötzlich nicht mehr in einem Lot?

Sie sollten diese Funktion nicht verwenden, ich meine die ganze Funktion hier, die ich im Sommer 2010 mochte. Weil es besser gedruckt werden kann
 
wenay:

Sie sollten diese Funktion nicht verwenden, ich meine die ganze Funktion hier, die ich im Sommer 2010 mochte. Weil es bessere Möglichkeiten zum Drucken gibt


Von dem, was ich über Nacht im Netz gefunden habe, gefiel mir dieses am besten.

Natürlich kann jeder Code bis ins Unendliche verfeinert werden, aber das Beste ist der Feind des Guten ;)

 

Ich bin kein Experte in der MQL4-Programmierung, also suche ich nach ein paar Tipps...

Heute ist der dritte Tag, an dem ich mir den Kopf darüber zerbreche, ein Skript für die Lotberechnung zu schreiben. Meine Idee ist die folgende: bei einer (bedingten) Einzahlung von $ 1000 wird das Lot 0,05 sein (tatsächlich geteilt durch 20000).

Es ist in Ordnung, wenn Sie mit EURUSD, GBPUSD, AUDUSD, NZDUSD arbeiten (d.h. in der Depotwährung kaufen) .... Ich weiß nicht, wie man ein Los für USDJPY (oder USDRUR) bekommt... Ich weiß nicht, wie man Lose in USDJPY bekommt... Wenn ich mich langweile, was fehlt mir????, sagen Sie mir, wo ich nach etwas anderem suchen soll.

 
gochu:

Ich bin kein Experte in der MQL4-Programmierung, also suche ich nach ein paar Tipps...

Heute ist der dritte Tag, an dem ich mir den Kopf darüber zerbreche, ein Skript für die Lotberechnung zu schreiben. Meine Idee ist die folgende: bei einer (bedingten) Einzahlung von $ 1000 wird das Lot 0,05 sein (tatsächlich geteilt durch 20000).

Es ist in Ordnung, wenn Sie mit EURUSD, GBPUSD, AUDUSD, NZDUSD arbeiten (d.h. in der Depotwährung kaufen) .... Wie berechne ich das Lot für CADJPY (oder USDRUR)? 1000 Pfund verwandeln sich (für heute) in 113000 Yen oder 38700 Rubel, das Lot wird in diesem Fall nicht 5,65 und 0,19 sein ... Ich arbeite zu hart, was fehlt mir???? raten, wohin ich gehen soll ... Lassen Sie Ihr Geplänkel und Trolling für später!


Betrachten Sie das Problem aus einem etwas anderen Blickwinkel: Verwenden Sie ein Los, das einem bestimmten Geldbetrag in der Währung des Depots entspricht.

Hier ist ein Skript zur Berechnung der Losgröße in Abhängigkeit von der Kontraktgröße. Die Kontraktgröße wird in der Einzahlungswährung festgelegt.

Dateien:
 

Unten ist mein Weg der Berechnung der Menge für einen Handel (Code vor MQL4 Update so keine #property streng):

extern double DealLevel = 5.0; // процент свободной маржи для сделки
//---
double LotDeal = NormalizeDouble(TradedLotFunc(DealLevel),2);

//--- TradedLotFunc() - start ----- сама функция
double TradedLotFunc(double Deal_f)
{  
   double MinLot_f  =MarketInfo(Symbol(),MODE_MINLOT);
   double MaxLot_f  =MarketInfo(Symbol(),MODE_MAXLOT);
   double LotStep_f =MarketInfo(Symbol(),MODE_LOTSTEP);
   double LotSize_f =MarketInfo(Symbol(),MODE_LOTSIZE);
   int    Leverage_f=AccountLeverage();
   //---
   int    i, coef; 
   double HighBorder;
   //---
   if(Deal_f<=0.0)  return(MinLot_f);
   if(Deal_f>100.0) Deal_f=100.0;
   double TradedLot=(AccountFreeMargin()*Deal_f/100)*Leverage_f/LotSize_f;
   if(TradedLot<=MinLot_f) return(MinLot_f);
   if(LotStep_f==0.001 || LotStep_f==0.01 || LotStep_f==0.1 || LotStep_f==1.0)
      TradedLot=MathRound(TradedLot/LotStep_f)*LotStep_f;
   else
   {  if(((TradedLot-MinLot_f)/LotStep_f)<=5.0) coef=1;
      else coef=MathRound((TradedLot-MinLot_f)/LotStep_f)-3;
      for(i=0; i<=100; i++)
      {  HighBorder=MinLot_f+(LotStep_f*coef)+(LotStep_f*i);
         if(TradedLot> HighBorder) continue;
         if(TradedLot==HighBorder) break;
         if(TradedLot< HighBorder)
         {  if(MathAbs(HighBorder-TradedLot)<=MathAbs(TradedLot-(HighBorder-LotStep_f)))
            {  TradedLot=HighBorder; break; }
            else
            {  TradedLot=HighBorder-LotStep_f;  break; }
   }  }  }
   if(TradedLot>=MaxLot_f) return(MaxLot_f);
   return(TradedLot);
}
//--- TradedLotFunc() - end -----
 

Gibt TradedLotFunc() immer mehr als Null zurück?

Wenn nein, dann wird der Code zu einem Bullshit if(Deal_f<=0.0) return(MinLot_f); - Sie sind Mitglied einer Partei? ...und wieder Maschinengewehrfeuer...

Und der Rest ist noch lustiger if(TradedLot<=MinLot_f) return(MinLot_f) ; - Bist du ein Partylöwe? ...und das Maschinengewehr ist wieder losgegangen...

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

Wenn wir davon ausgehen, dass die Funktion korrekt funktioniert, reicht sie kaum aus, um den ersten und einzigen Auftrag auf einem Handelskonto zu eröffnen...

Kaum, denn sie berücksichtigt weder die bestehenden offenen Positionen noch den Stop-Loss des zu eröffnenden Auftrags, d.h. es handelt sich um eine Schülerversion

Und kein vernünftiger Mensch würde diese Güte beim Handel auf einem echten Konto verwenden...

 

Danke für die Tipps, aber ich habe meine Frage nicht ganz richtig formuliert.... Ich möchte meine Berechnung auf den Betrag des verlorenen/gestohlenen Geldes stützen. Natürlich sind die Sicherheiten für Euro.quid und Pfund.quid unterschiedlich, aber das ist nicht genau das, was ich erreichen will. Idealerweise sollte ich eine Funktion haben, die Parameter als Eingabe benötigt:

1- Einzahlungswährung (ich werde Pfund und Euro prüfen),

2 - Einzahlungsbetrag (1000)

3 - mein Handelswährungspaar (ich möchte CADJPY und USDCHF prüfen)

4 - der Prozentsatz der Inanspruchnahme meiner Einlage (nehmen wir an, 2%) und

5- eine bestimmte Anzahl von Punkten (100 Pips für vierstellige Plattformen und 1000 für fünfstellige).

Ausgabeparameter Ich möchte die Losgröße erhalten.

Das heißt, (alles ist klar für Paare mit inversen Kursen, EURUSD, GBPUSD, AUDUSD, NZDUSD, das heißt, wenn die Kurswährung die Währung der Einzahlung ist)... um

bei einer Einzahlung von 1000 Pfund verliere/gewinne ich 2% (d.h. 20 Pfund), wenn die Währung 100 (4 Ziffern)/1000 Pips (5 Ziffern) überschreitet, muss ich 0,02 Lot verwenden.

(Ich möchte wiederholen, dass ich mehr Geld für den Handel mit GBPUSD als für EURUSD oder vor allem NZDUSD verwenden sollte, aber meine Frage ist nicht über Geldverbrauch, sondern über nominalen Verlust und/oder Gewinn ... bitte beraten Sie mich ... Ich verliere meinen Kopf ... Ich habe mit diesem Problem für weniger als eine Woche gearbeitet). Ich kam zu dem Punkt, dass ich den Wert des Verlustes in der Währung Kurse zu berechnen hatte ... aber wie man es (der Verlust) in der gewünschten mich eine Menge von der Kaution Währung umwandeln..... alle hier stolpern ich ... Vielen Dank für die Hilfe!

 
gochu:

Danke, für die Tipps, aber ich habe meine Frage nicht ganz richtig formuliert.... Ich möchte ein Los berechnen, das auf der Höhe des verlorenen/gestohlenen Geldes basiert. ...

Schauen Sie sich die Funktion https://docs.mql4.com/ru/marketinformation/marketinfo mit dem Query Identifier MODE_TICKVALUE an