MarginRate

Einloggen oder registrieren, um einen Kommentar zu schreiben
amando
2889
amando  

Hallo,


hat jemand eine Idee wie ich die Initial Margin auslese?


Mit 

SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)

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

Carl Schreiber
Moderator
9882
Carl Schreiber  

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.

TradeAlgorithms
TradeAlgorithms
  • www.mql5.com
Trade functions library designed for use in the code of scripts and Expert Advisors depending on a broker. As a large number of the Expert Advisors using this library was placed in Code Base, it was decided to perform four variants of its program code to use these Expert Advisors with any broker who offers trading on financial markets using...
amando
2889
amando  
Carl Schreiber:

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

Christian
3190
Christian  

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.

amando
2889
amando  
Christian:

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

amando
2889
amando  

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

Carl Schreiber
Moderator
9882
Carl Schreiber  
Könnte es sein, dass die Demokonten (Spezifikationen) vom Broker etwas schlampig oder eigenwillig eingerichtet worden sind?
amando
2889
amando  
Carl Schreiber:
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

Carl Schreiber
Moderator
9882
Carl Schreiber  

Dann schick denen Deinen Code (zusammen mit einem Screenshot?) und bitte sie um Aufklärung?

amando
2889
amando  

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

Carl Schreiber
Moderator
9882
Carl Schreiber  

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

Новая версия платформы MetaTrader 5 build 2360: Расширение интеграции с SQLite
Новая версия платформы MetaTrader 5 build 2360: Расширение интеграции с SQLite
  • 2020.03.28
  • www.mql5.com
В пятницу 6 марта 2020 года будет выпущена обновленная версия платформы MetaTrader 5...
Dateien:
Einloggen oder registrieren, um einen Kommentar zu schreiben