需要基于SL和账户风险的资金管理LOT大小公式! - 页 2

 
maleas_k:

如果我对这个问题的理解是正确的,这将为你做的工作。


double free = AccountFreeMargin();

double potencial_loss,

double sum_potencial_loss = 0

double pips, lot_size;

double percent_depo = 5;

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

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



谢谢,但我已经有了这个公式,我只需要修改点值,因为我的账户是欧元而不是美元。代码是这样的。

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 );

我需要用TICKVALUE*TICKSIZE来代替Point,所以它看起来像这样

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 );

如果有人能确认这个想法是正确的,那么我想问题就解决了。所以请尽快帮助我,之后圣诞快乐!

 
RaptorUK:

我删除了你的代码。. . .


谢谢你的帮助。
 
Proximus:

谢谢,但我已经有了公式,我只是需要修正点值,因为我有欧元账户而不是美元。代码是这样的。

我需要用TICKVALUE* TICKSIZE来代替Point,所以它看起来像这样

如果有人能确认这个想法是正确的,那么我想问题就解决了。所以请尽快帮助我,并祝你圣诞快乐!

我不能确认,但我建议用Alert();来调试它,像这样?

Alert("LOT : ",LOT);

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

你自己也会确认的。

 
maleas_k:

谢谢你的帮助。
谢谢你的编辑
 
maleas_k:

我不能确认,但我建议用Alert();来调试它,像这样?

或者

你会自己确认的。


不,我的意思是,使用TICKVALUE* TICKSIZE或WHRoeder建议的TICKVALUE/ TICKSIZE是否正确,因为*似乎更符合逻辑。因此,鉴于我的账户是欧元,所以我们看的是基础货币 而不是报价,哪一个才是正确的?

 

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. 例如EURUSD,账户货币为USD。
    如果TickValue是10美元,Ticksize=0.0001。那么,如果市场移动0.0020,价值为10美元/0.0001 * 0.0020=200美元/每手。每点10美元*20点/每手。
    如果TickValue是1美元,Ticksize=0.00001。那么,如果市场移动0.0020,价值为1/0.00001 * 0.0020=200美元/每手。这里没有错误。
  2. 你的方程式 才是 的,100 * stoploss, StopLevel, Point * 10000,等等。重读我的原始方程 并解决手数问题
 

好的,这些应该是(最大)容量大小计算步骤

(如果我错了,请纠正我 ^_^)

AccountMoneyRisk = AccountMoney * Risk%

AccountCounterQuote = Quote(AccountCurrency/CounterCurrency)

反货币风险 = 账户货币风险 * 账户柜台报价

PipValue = CounterCurrencyRisk / StopLoss

LotTickValue = LotSize * TickSize

成交量 = PipValue * LotTickValue


例子。

帐户货币。欧元
货币对。 GBPUSD
基础货币。英镑
对应货币:美元美元

账户资金:5000 欧元
风险:1%

止损:200 (对应货币)。
手段大小:100000(对应货币)
时间大小:0.00001

AccountMoneyRisk = AccountMoney * Risk% = 5000 EUR * 1% = 50 EUR

AccountCounterQuote = Quote(AccountCurrency/CounterCurrency) = Quote(EUR/USD) = 1.5000

CounterCurrencyRisk = AccountMoneyRisk * AccountCounterQuote = 50 EUR * 1.5000 = 75 USD

PipValue = CounterCurrencyRisk / StopLoss = 75 / 200 = 0.375

LotTickValue = LotSize * TickSize = 100000 * 0.00001 = 1 USD

成交量 = PipValue * LotTickValue = 0.375 * 1 USD = 0.375



 

假设 CounterCurrency与AccountCurrency相同 不包括点差,并且 错误地假设一个点==5位数经纪商的一个点 ticksize==点。

不一定。帐户余额*百分比=RISK=(OrderOpenPrice-OrderStopLoss)*DIR*OrderLots*DeltaPerlot(注意OOP-OSL包括SPREAD)。

 

好吧,这是最终版本,请确认它是否正确,我不明白为什么你坚持你的DeltaPerlot的东西,而它显然在我的情况下不起作用,因为我有欧元账户。

这是我的手数调整功能。

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);
} 
  • STOPSLIP在当前止损水平+SPREAD的基础上增加X个点。
  • 我使用TICKVALUE * TICKSIZE,因为我有欧元账户而不是美元,所以在我的5位数经纪商那里,点值是0.000007而不是0.00001,这是合理的,因为它被计入了欧元汇率。
所以请谁来确认一下是否正确,如果不正确,请纠正我的公式,不要给我其他帖子的链接,因为我不明白,只要纠正我的LOT()函数,我就会很高兴,请帮助我!
 
double clot=(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD)+STOPSLIP)
            * MarketInfo(Symbol(),MODE_TICKVALUE)*MarketInfo(Symbol(),MODE_TICKSIZE) *100000 );

这让我感到头疼的是,我只是想弄清楚括号里的内容。

说实话,我完全不知道你在这里试图实现什么。

我看不出MODE_STOPLEVEL或SPREAD有什么关系,你肯定应该以当前价格的止损距离为基础进行计算?

账户货币 是什么应该没有区别,计算应该是一样的,因为TICKVALUE是账户货币。

请注意,把你的代码放在两行上,帖子就不会那么宽了,也就不需要左右滚动了,更容易阅读 :)