Schau mal hier: https://www.mql5.com/en/code/1578
Da gib't diese Funktion:
//+------------------------------------------------------------------+ //| Lot size calculation for opening a short position | //+------------------------------------------------------------------+ /* | Margin_Mode external variable specifies the lot value calculation | method | 0 - MM for an account free funds | 1 - MM for an account balance | 2 - MM for losses share from an account free funds | 3 - MM for losses share from an account balance | 4 - MM fixed Lotsize | by default - MM for an account free funds | //+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+ if Money_Management is below zero, trade function | uses Money_Management absolute value rounded to the | nearest standard value as a lot size. | */// | //+------------------------------------------------------------------+ double SellLotCount ( string symbol, double Money_Management, int Margin_Mode, int STOPLOSS, uint Slippage_ )
Ich denke, das ist was Du suchst.
- www.mql5.com
Schau mal hier: https://www.mql5.com/en/code/1578
Da gib't diese Funktion:
Ich denke, das ist was Du suchst.
genau daran scheitere ich ja aktuell
ich habe zu dem Zeitpunkt keine Position offen. Angenommen ich will für einen Trade 5% der Margin einsetzen. Um die Lotzahl zu berechnen brauche ich dann die Margin_Rate.
Bei Forex kein Problem, da ist diese überlicherweise 1
bei Indices geht das aber nicht, da ist die Margin Rate nicht 1, da muss man dann eben diese mit Kalkulieren
https://www.mql5.com/de/docs/constants/environment_state/marketinfoconstants
jetzt kann ich mir ja die Lotsize ausrechnen
für Forex, als Risiko gebe ich den Prozentsatz ein, welchen ich als Margin verwenden will
ContractSize = SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE); fullmargin = AccountInfoDouble(ACCOUNT_BALANCE)*SymbolLeverage; if(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_CALC_MODE) == SYMBOL_TRADE_CALC_MODE) Lot1 = NormalizeDouble(fullmargin/ContractSize/100*risiko,2);
das funktioniert auch Perfekt, weil die 1 kann ich ignorieren
für CFD wäre das dann
if(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_CALC_MODE) == SYMBOL_CALC_MODE_CFD) Lot1 = (fullmargin/100*Risiko)/(ContractSize*Trade.Bid)*SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL) );
nur das eben
SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)
immer 0 bringt, und daher eine Division durch 0 den EA beendet
was mich auch wundert, es gibt in der Symbol übersicht, die Initial Margin long und short, aber in MQL5 gibts nur Initial Margin
Du musst dir die Rates von deinem Broker holen und dann als Konstanten im EA verwenden.
Jeder Broker hat Listen wo die Margin für das Symbol drin steht.
Blöd aber MQ denkt wohl ähnlich.
das habe ich befürchtet
die Frage ist halt, warum trägt man es dann ein, böses Spiel
sagt mal ist bei der
ENUM_SYMBOL_CALC_MODE
ganz am Anfang, also der Wert 1, der Mode_Forex den gibts ja schon immer, neu dazugekommen?
Hintergrund: ich hab 2 Broker, bei beiden hab ich abgefragt, was für einen Calc Mode diese verwenden.
Broker 1: steht in den Symbol Eigenschaften Mode_CFD, und als Ergebnis bekomme ich 2, was ja Mode_Futures wäre
Broker 2: steht im Symbol CFDLEVERAGE und als Ergebnis bekomme ich 4, was ja CFDIndex wäre
Könnte es sein, dass die Demokonten (Spezifikationen) vom Broker etwas schlampig eingerichtet worden sind?
liegt nicht am Demo, ich hab live das gleiche Ergebnis,
bei beiden Brokern
Dann schick denen Deinen Code (zusammen mit einem Screenshot?) und bitte sie um Aufklärung?
ich weis ja nicht was da nicht stimmt, aber da hat Metaquotes was mächtig verhaut, die ENUM Aufzählung ist nämlich falsch
Wenn ich bei Broker 1 sage
Print(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_CALC_MODE));
kommt als Ergebnis 2, was bei der ENUM ja SYMBOL_CALC_MODE_FUTURES entspricht
wenn ich das jetzt erweitere, und die Print Ausgabe schön mache
ENUM_SYMBOL_CALC_MODE TradeCalcMode = (ENUM_SYMBOL_CALC_MODE)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_CALC_MODE); Print("Calc Mode: ", EnumToString(TradeCalcMode) );
dann bekomme ich als Ergebnis: SYMBOL_CALC_MODE_CFD
sorry, aber das passt irgendwie nicht zusammen
da hat MQ einen mächtigen Bock geschossen
Kannst Du das in mit dem kl. Skript dokumentieren und dann mit dem Ausdruck hier veröffentlichen?
Ich hab zZ. nur Forex eines MQ-Demokontos, da gibts nur Forex
- 2020.03.28
- www.mql5.com
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo,
hat jemand eine Idee wie ich die Initial Margin auslese?
Mit
gehts nicht, was ich auch verstehe, weil es macht ja einen Unterschied welche OrderType ich verwende
Mir gehts darum, das ich für die Kalkulation der Margin die Margin kalkuliere. Zu diesem Zeitpunkt habe ich noch keine Position im Markt.
danke