Der Vorschlag von mir verwendet OrderCalcProfit() da sollten automatisch(!) die unterschiedlichen Währungen von Symbol und Konto berücksichtigt sein, ebenso wie die unterschiedlichen Berechnungsmethoden.
Carl Schreiber: Der Vorschlag von mir verwendet OrderCalcProfit() da sollten automatisch(!) die unterschiedlichen Währungen von Symbol und Konto berücksichtigt sein, ebenso wie die unterschiedlichen Berechnungsmethoden.
das mag ja sein Carl, aber bei OrderCalcProfit() muss ich die Lotgröße wissen.
für Forex kann ich das Abkürzen wenn ich den SL in Points angebe
lots = Geldrisiko / (stoploss * _sym.TickValue())
Theoretisch könnte ich ja auch für alle anderen bis auf Futures abkürzen
Wenn ich jetzt ein Konto in EUR habe und das CFD für DOW z.B in USD Berechnet wird muss ich das ganze dann noch mal mit 1/EURUSD rechnen, dann hab ichs auch wieder genau
das mag ja sein Carl, aber bei OrderCalcProfit() muss ich die Lotgröße wissen.
Jain!
Über FixRisk wird wird der mögliche Verlust bei 1.0 Lots errechnet, um damit dann in einem zweiten Schritt die tatsächlich zu handelnden Lots zu berechnen:
wie zum Henker er mit der Formel auf 74 kommt ist mir absolut nicht klar
Du hast hier nen kleinen Fehler drin: Die 13,4 sind der Abstand zwischen SL und TP und nicht der Abstand zwischen entry und SL, das sind 6,7 und ich hatte nicht 2%, sondern 5% riskio daraus folgt:
Über FixRisk wird wird der mögliche Verlust bei 1.0 Lots errechnet, um damit dann in einem zweiten Schritt die tatsächlich zu handelnden Lots zu berechnen:
Schritt 1:
Schritt 2:
Da muss ich mich erstmal einarbeiten, wie das mit dem ganzen Klassen-Zeug funktioniert.. in Java wäre das ja einfach irgendwie so:
risk = new CMoneyFixedRisk();
risk.Percent(5);
double lots = risk.CheckOpenShort(bid,abstand);
So einfach ist es ja offensichtlich nicht (es kommt ja immer 0 raus), also muss ich da erstmal noch ein bisschen lernen.
Du hast hier nen kleinen Fehler drin: Die 13,4 sind der Abstand zwischen SL und TP und nicht der Abstand zwischen entry und SL, das sind 6,7 und ich hatte nicht 2%, sondern 5% riskio daraus folgt:
lots = 500/ (6,7 * 1) = 74,62
Ok, und was passt dann nicht?
das mit entry hab ich verwechselt, dann passt die berechnung ja
der fehler sagt ja nur aus, das du. Icht genug geld am konto hast, ist die frage welchen hebel du hast
das mit entry hab ich verwechselt, dann passt die berechnung ja
der fehler sagt ja nur aus, das du. Icht genug geld am konto hast, ist die frage welchen hebel du hast
1:500, wie baue ich das denn da ein?
Und was anderes... wenn ich da mit 74 lot reingehe, entspricht das doch 74 mal dem aktuellen wert, würde ich mit so einer Summe dann schon den Markt bewegen, bzw. ab wann würde das passieren?
Und was anderes... wenn ich da mit 74 lot reingehe, entspricht das doch 74 mal dem aktuellen wert, würde ich mit so einer Summe dann schon den Markt bewegen, bzw. ab wann würde das passieren?
Carl Schreiber: Der Vorschlag von mir verwendet OrderCalcProfit() da sollten automatisch(!) die unterschiedlichen Währungen von Symbol und Konto berücksichtigt sein, ebenso wie die unterschiedlichen Berechnungsmethoden.
ich habe jetzt einen Grundaufbau, um CMonexFixedRisk zu verwenden, ist der so richtig? Und kann ich da noch das ein oder andere weglassen, dass es kürzer wird?
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\AccountInfo.mqh>
#include <Expert\Money\MoneyFixedRisk.mqh>
CTrade m_trade; // trading object
CSymbolInfo m_symbol; // symbol info object
CAccountInfo m_account; // account info wrapper
CMoneyFixedRisk m_money;
//---inputushort InpStopLoss=100; // StopLoss (in pips)inputdouble PercentRisk=5; // % risk//---double ExtStopLoss=0.0;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
m_symbol.Name(Symbol());
m_symbol.Refresh();
if(!RefreshRates())
{
Print("Error RefreshRates. Bid=",DoubleToString(m_symbol.Bid(),Digits()),
", Ask=",DoubleToString(m_symbol.Ask(),Digits()));
return(INIT_FAILED);
}
//--- tuning for 3 or 5 digitsint digits_adjust=1;
if(m_symbol.Digits()==3 || m_symbol.Digits()==5)
digits_adjust=10;
ExtStopLoss=InpStopLoss*m_symbol.Point()*digits_adjust;
//---if(!m_money.Init(GetPointer(m_symbol),Period(),m_symbol.Point()*digits_adjust))
return(INIT_FAILED);
m_money.Percent(PercentRisk); // 5% risk//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---if(!RefreshRates())
return;
//--- protection against the return value of "zero"if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
return;
//--- getting lot size for open long position (CMoneyFixedRisk)double sl=0.0;
double check_open_long_lot=0.0;
//--- variant #1: StopLoss=0.0
sl=0.0;
check_open_long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
//--- variant #2: StopLoss!=0.0
sl=m_symbol.Ask()-ExtStopLoss;
check_open_long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
if(check_open_long_lot==0.0)
return;
//--- check volume before OrderSend to avoid "not enough money" error (CTrade)double chek_volime_lot=m_trade.CheckVolume(m_symbol.Name(),check_open_long_lot,m_symbol.Ask(),ORDER_TYPE_BUY);
if(chek_volime_lot!=0.0)
if(chek_volime_lot>=check_open_long_lot)
{
if(m_trade.Buy(chek_volime_lot,NULL,m_symbol.Ask(),m_symbol.Ask()-ExtStopLoss,m_symbol.Ask()+ExtStopLoss))
{
if(m_trade.ResultDeal()==0)
count--;
}
else
count--;
}
elsePrint("CMoneyFixedRisk lot = ",DoubleToString(check_open_long_lot,2),
", CTrade lot = ",DoubleToString(chek_volime_lot,2));
//---
}
//+------------------------------------------------------------------+//| Refreshes the symbol quotes data |//+------------------------------------------------------------------+bool RefreshRates()
{
//--- refresh ratesif(!m_symbol.RefreshRates())
return(false);
//--- protection against the return value of "zero"if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
return(false);
//---return(true);
}
//+------------------------------------------------------------------+
Der Vorschlag von mir verwendet OrderCalcProfit() da sollten automatisch(!) die unterschiedlichen Währungen von Symbol und Konto berücksichtigt sein, ebenso wie die unterschiedlichen Berechnungsmethoden.
das mag ja sein Carl, aber bei OrderCalcProfit() muss ich die Lotgröße wissen.
bei den Meisten Calc Modi, nicht bei allen gilt
Profit: (close_price - open_price) * Contract_Size * Lots
demzufolge ist die Lotzahl
für Forex kann ich das Abkürzen wenn ich den SL in Points angebe
Theoretisch könnte ich ja auch für alle anderen bis auf Futures abkürzen
Wenn ich jetzt ein Konto in EUR habe und das CFD für DOW z.B in USD Berechnet wird muss ich das ganze dann noch mal mit 1/EURUSD rechnen, dann hab ichs auch wieder genau
das wäre dann
Lots = 1/BidpriceEURUSD * Geldrisiko / (stoploss * _sym.TickValue())jetzt zum Konkreten Problem
wenn ich einen Preis beim Dax habe
Entry: 9800,00
Exit: 9700,00
dann habe ich theoretisch 100 Punktedifferenz, dann kommen noch die Kommastellen dazu
Wenn ich jetzt die Formel hernehme
Bei einer Contractsize von 100 würde das bei einem Konto mit 10k und Risiko 2% folgendes ergeben
Lots = 200 / (100*100) --> Lots = 0,02
bei seinem Broker habe ich eine Contract Size von 1
das würde dann ergeben
Lots = 200 / (1*100) --> Lots = 2
im Beispiel
ergibt eine Differenz von 13,4
Lots = 200 / (13,4*1) = 14,9254
wie zum Henker er mit der Formel auf 74 kommt ist mir absolut nicht klar
das mag ja sein Carl, aber bei OrderCalcProfit() muss ich die Lotgröße wissen.
Jain!
Über FixRisk wird wird der mögliche Verlust bei 1.0 Lots errechnet, um damit dann in einem zweiten Schritt die tatsächlich zu handelnden Lots zu berechnen:
Schritt 1:
Schritt 2:
lot=MathFloor(m_account.Balance()*m_percent/loss/100.0/stepvol)*stepvol;
im Beispiel
ergibt eine Differenz von 13,4
Lots = 200 / (13,4*1) = 14,9254
wie zum Henker er mit der Formel auf 74 kommt ist mir absolut nicht klar
Du hast hier nen kleinen Fehler drin: Die 13,4 sind der Abstand zwischen SL und TP und nicht der Abstand zwischen entry und SL, das sind 6,7 und ich hatte nicht 2%, sondern 5% riskio daraus folgt:
lots = 500/ (6,7 * 1) = 74,62
Jain!
Über FixRisk wird wird der mögliche Verlust bei 1.0 Lots errechnet, um damit dann in einem zweiten Schritt die tatsächlich zu handelnden Lots zu berechnen:
Schritt 1:
Schritt 2:
Da muss ich mich erstmal einarbeiten, wie das mit dem ganzen Klassen-Zeug funktioniert.. in Java wäre das ja einfach irgendwie so:
So einfach ist es ja offensichtlich nicht (es kommt ja immer 0 raus), also muss ich da erstmal noch ein bisschen lernen.
Du hast hier nen kleinen Fehler drin: Die 13,4 sind der Abstand zwischen SL und TP und nicht der Abstand zwischen entry und SL, das sind 6,7 und ich hatte nicht 2%, sondern 5% riskio daraus folgt:
lots = 500/ (6,7 * 1) = 74,62
Ok, und was passt dann nicht?
das mit entry hab ich verwechselt, dann passt die berechnung ja
der fehler sagt ja nur aus, das du. Icht genug geld am konto hast, ist die frage welchen hebel du hast
Ok, und was passt dann nicht?
das mit entry hab ich verwechselt, dann passt die berechnung ja
der fehler sagt ja nur aus, das du. Icht genug geld am konto hast, ist die frage welchen hebel du hast
1:500, wie baue ich das denn da ein?
Und was anderes... wenn ich da mit 74 lot reingehe, entspricht das doch 74 mal dem aktuellen wert, würde ich mit so einer Summe dann schon den Markt bewegen, bzw. ab wann würde das passieren?
1:500, wie baue ich das denn da ein?
Und was anderes... wenn ich da mit 74 lot reingehe, entspricht das doch 74 mal dem aktuellen wert, würde ich mit so einer Summe dann schon den Markt bewegen, bzw. ab wann würde das passieren?
Du wirst den markt nie bewegen
du hast 10k am konto
10kx500 macht
5000k = 5 000 000
Und du willst 74 bewegen
weil lot size ist ja 1,
also stimmt mit dem hebel was nicht
Der Vorschlag von mir verwendet OrderCalcProfit() da sollten automatisch(!) die unterschiedlichen Währungen von Symbol und Konto berücksichtigt sein, ebenso wie die unterschiedlichen Berechnungsmethoden.
ich habe jetzt einen Grundaufbau, um CMonexFixedRisk zu verwenden, ist der so richtig? Und kann ich da noch das ein oder andere weglassen, dass es kürzer wird?
Du wirst den markt nie bewegen
du hast 10k am konto
10kx500 macht
5000k = 5 000 000
Und du willst 74 bewegen
weil lot size ist ja 1,
also stimmt mit dem hebel was nicht
Hmm.... absolut keine Ahnung