Benötige Moneymanagement LOT size Formel basierend auf SL und Account Risk! - Seite 2

 
maleas_k:

Wenn ich die Frage richtig verstanden habe, wird dies die Aufgabe für Sie erledigen.


double free = AccountFreeMargin();

double potenzieller_Verlust,

double sum_potencial_loss = 0

double pips, lot_size;

double percent_depo = 5;

potenzieller_Verlust = (OrderLots() * (OrderOpenPrice() - OrderStopLoss()))*100000;
sum_potencial_loss = long_sum_potencial_loss + long_potencial_loss;

lot_size = ((((free-long_sum_potencial_loss) * percent_depo)/100.0)/pips)/100000 ;



Vielen Dank, aber ich habe bereits die Formel, ich muss nur den Punktwert zu beheben, weil ich EUR-Konto nicht USD.The Code ist dies:

extern double MYSTOPLOSS = 50;  // CUSTOM SL SIZE IN PIPS AFTER THE STOPLEVEL
extern double  RISK =2; // 2% ACCOUNT RISK

double LOT =(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MYSTOPLOSS)* Point *100000 );

Und ich muss den Punkt mit TICKVALUE* TICKSIZE ersetzen, so würde es wie folgt aussehen

extern double MYSTOPLOSS = 50;  // CUSTOM SL SIZE IN PIPS AFTER THE STOPLEVEL
extern double  RISK =2; // 2% ACCOUNT RISK

double LOT =(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MYSTOPLOSS)* MarketInfo(Symbol(), MODE_TICKVALUE)* 
MarketInfo(Symbol(), MODE_TICKSIZE)  *100000 );

Wenn jemand bestätigen kann, dass diese Idee richtig ist, dann ist das Problem gelöst, denke ich, also bitte helfen Sie mir schnell, und frohe Weihnachten danach!

 
RaptorUK:

Ich habe Ihren Code entfernt. . . .


Vielen Dank für Ihre Hilfe.
 
Proximus:

Danke, aber ich habe bereits die Formel, ich muss nur den Punktwert zu beheben, weil ich EUR-Konto nicht USD.The Code ist dies:

Und ich muss den Punkt mit TICKVALUE* TICKSIZE ersetzen, so dass es wie folgt aussehen würde

Wenn jemand bestätigen kann, dass diese Idee richtig ist, dann ist das Problem gelöst, denke ich, also bitte helfen Sie mir schnell und frohe Weihnachten!

Ich kann es nicht bestätigen, aber ich schlage vor, es mit Alert(); so zu debuggen ?

Alert("LOT : ",LOT);

oder

Alert("AccountEquity : ",(AccountEquity()," RISK : " ,RISK," MODE_STOPLEVEL : ", MODE_STOPLEVEL," MYSTOPLOSS : ",MYSTOPLOSS," MODE_TICKVALUE : " ,MODE_TICKVALUE," MODE_TICKSIZE : ,MODE_TICKSIZE);

Und Sie werden es selbst bestätigen.

 
maleas_k:

Vielen Dank für Ihre Hilfe.
Vielen Dank für die Bearbeitung
 
maleas_k:

Ich kann es nicht bestätigen, aber ich schlage vor, es mit dem Alert() zu debuggen; wie dies ?

oder

Und Sie werden es selbst bestätigen.


Nein, ich meinte, ob es richtig ist, den TICKVALUE* TICKSIZE oder den TICKVALUE/ TICKSIZE zu verwenden, wie WHRoeder vorschlug, denn der * scheint logischer zu sein, und welcher ist der richtige, da mein Konto in EUR geführt wird, so dass wir die Basiswährung und nicht den Kurs betrachten?

 

Proximus: WTF guys, shouldnt that be TICKVALUE * TICKSIZE instead of TICKVALUE /TICKSIZE ? I think there is a big mistake there

double LOT =(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MYSTOPLOSS)* Point *100000 );
  1. Zum Beispiel EURUSD mit der Kontowährung USD.
    Wenn TickValue ist $10 und Tickize=0.0001. Wenn sich der Markt also um 0,0020 bewegt, beträgt der Wert $10/0,0001 * 0,0020=$200 / pro Lot. $10 pro Pip * 20 Pips / pro Lot.
    Wenn TickValue $1 und Ticksize=0.00001 ist. Wenn sich der Markt also um 0,0020 bewegt, ist der Wert immer noch $1/0,00001 * 0,0020=$200 / pro Lot. Kein Fehler hier.
  2. Es ist Ihre Gleichung, die falsch ist 100 * stoploss, StopLevel, Point * 10000, etc. Lesen Sie meine ursprüngliche Gleichung noch einmal und lösen Sie sie für die Lotgröße
 

Ok, das sollten die Schritte für die (maximale) VOLUMENGRÖSSENBERECHNUNG sein:

(bitte korrigieren Sie mich, wenn ich falsch liege ^_^)

KontoGeldRisiko = KontoGeld * Risiko%

AccountCounterQuote = Quote(AccountCurrency/Gegenwährung)

CounterCurrencyRisk = AccountMoneyRisk * AccountCounterQuote

PipWert = GegenWährungsRisiko / StopLoss

LotTickValue = LotSize * TickSize

Volumen = PipValue * LotTickValue


Beispiel:

KontoWährung: EUR
WährungsPaar: GBPUSD
BaseCurrency: GBP
Gegenwährung: USD

KontoGeld: 5000 EUR
Risiko: 1%

StopLoss: 200 Pips (Gegenwährung)
LotSize: 100000 (Gegenwährung)
TickGröße: 0. 00001

KontoGeldRisiko = KontoGeld * Risiko% = 5000 EUR * 1% = 50 EUR

KontoGegenkurs = Kurs(Kontowährung/Gegenwährung) = Kurs(EUR/USD) = 1,5000

GegenwährungsRisiko = KontoGeldRisiko * KontoGegenkurs = 50 EUR * 1,5000 = 75 USD

PipWert = GegenWährungsRisiko / StopLoss = 75 / 200 = 0,375

LotTickValue = LotSize * TickSize = 100000 * 0,00001 = 1 USD

Volumen = PipValue * LotTickValue = 0,375 * 1 USD = 0,375



 

Dabei wird davon ausgegangen, dass die Gegenwährung mit der Kontowährung identisch ist und der Spread nicht berücksichtigt wird. Außerdem wird fälschlicherweise angenommen, dass ein Pip == ein Punkt bei einem 5-stelligen Broker ist und dass Tick Size == Punkt.

Nicht unbedingt. Kontostand * Prozent = RISIKO = (OrderOpenPrice - OrderStopLoss)*DIR * OrderLots * DeltaPerlot (Anmerkung: OOP-OSL beinhaltet den SPREAD)

 

Ok, das ist die endgültige Version, bitte bestätigen Sie, wenn es richtig ist, ich verstehe nicht, warum Sie auf Ihre DeltaPerlot Zeug bestehen, wenn es eindeutig nicht in meiner Situation funktioniert, weil ich EUR-Konto haben.

Dies ist meine Lot-Sizing-Funktion:

extern int STOPSLIP=20;
extern double RISK=0.5;

double LOT()
{
double clot=(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD)+STOPSLIP)* MarketInfo(Symbol(),MODE_TICKVALUE)*MarketInfo(Symbol(),MODE_TICKSIZE) *100000 );

if(clot<MarketInfo(Symbol(),MODE_MINLOT)) clot=MarketInfo(Symbol(),MODE_MINLOT);
if(clot>MarketInfo(Symbol(),MODE_MAXLOT)) clot=MarketInfo(Symbol(),MODE_MAXLOT); 
  return (clot);
} 
  • Der STOPSLIP fügt X Pips zum aktuellen Stoplevel+SPREAD hinzu
  • Ich verwende TICKVALUE * TICKSIZE, weil ich EUR-Konto nicht USD, so macht es Sinn, die pipvalue ist 0,000007 statt 0,00001 an meinem 5-stelligen Broker, weil seine in der EUR-Wechselkurs gezählt
Also kann bitte jemand bestätigen, wenn es richtig ist, oder wenn es nicht, dann bitte korrigieren Sie MEINE Formel, geben Sie mir keine Links zu anderen Beiträgen, weil ich sie nicht verstehe, korrigieren Sie einfach meine LOT() Funktion und ich werde dann glücklich sein, bitte helfen Sie!
 
double clot=(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD)+STOPSLIP)
            * MarketInfo(Symbol(),MODE_TICKVALUE)*MarketInfo(Symbol(),MODE_TICKSIZE) *100000 );

Das bereitet mir Kopfschmerzen, wenn ich nur versuche, die Klammern zu entziffern!

Um ehrlich zu sein, habe ich absolut keine Ahnung, was Sie hier zu erreichen versuchen.

Ich kann nicht sehen, wie MODE_STOPLEVEL oder SPREAD relevant sind, sicherlich sollten Sie Ihre Berechnungen auf den Stop-Loss-Abstand vom aktuellen Preis basieren?

Es sollte keinen Unterschied machen, was die Kontowährung ist, die Berechnung sollte die gleiche sein, weil TICKVALUE in der Kontowährung ist.

Bitte beachten Sie, indem Sie Ihre Code-Zeile auf 2 Zeilen, der Beitrag ist nicht so breit und macht es einfacher zu lesen, ohne Scrollen rechts und links :)