需要基于SL和账户风险的资金管理LOT大小公式! - 页 2 1234 新评论 Proximus 2013.12.23 18:36 #11 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 ); 如果有人能确认这个想法是正确的,那么我想问题就解决了。所以请尽快帮助我,之后圣诞快乐! Konstantinos Maleas 2013.12.23 19:59 #12 RaptorUK: 我删除了你的代码。. . . 谢谢你的帮助。 Konstantinos Maleas 2013.12.23 20:11 #13 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); 你自己也会确认的。 Simon Gniadkowski 2013.12.23 20:35 #14 maleas_k: 谢谢你的帮助。 谢谢你的编辑 Proximus 2013.12.25 01:24 #15 maleas_k: 我不能确认,但我建议用Alert();来调试它,像这样? 或者 你会自己确认的。 不,我的意思是,使用TICKVALUE* TICKSIZE或WHRoeder建议的TICKVALUE/ TICKSIZE是否正确,因为*似乎更符合逻辑。因此,鉴于我的账户是欧元,所以我们看的是基础货币 而不是报价,哪一个才是正确的? William Roeder 2013.12.25 02:05 #16 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 ); 例如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美元/每手。这里没有错误。 你的方程式 才是假 的,100 * stoploss, StopLevel, Point * 10000,等等。重读我的原始方程 并解决手数问题 Michele Lazzarini 2013.12.25 11:19 #17 好的,这些应该是(最大)容量大小计算 的步骤。 (如果我错了,请纠正我 ^_^) 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 Need moneymanagement LOT size William Roeder 2013.12.25 13:36 #18 这假设 CounterCurrency与AccountCurrency相同, 不包括点差,并且 错误地假设一个点==5位数经纪商的一个点, ticksize==点。 不一定。帐户余额*百分比=RISK=(OrderOpenPrice-OrderStopLoss)*DIR*OrderLots*DeltaPerlot(注意OOP-OSL包括SPREAD)。 Proximus 2014.01.08 10:26 #19 好吧,这是最终版本,请确认它是否正确,我不明白为什么你坚持你的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()函数,我就会很高兴,请帮助我! Keith Watford 2014.01.08 23:42 #20 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是账户货币。 请注意,把你的代码放在两行上,帖子就不会那么宽了,也就不需要左右滚动了,更容易阅读 :) 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果我对这个问题的理解是正确的,这将为你做的工作。
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 ;
谢谢,但我已经有了这个公式,我只需要修改点值,因为我的账户是欧元而不是美元。代码是这样的。
我需要用TICKVALUE*TICKSIZE来代替Point,所以它看起来像这样
如果有人能确认这个想法是正确的,那么我想问题就解决了。所以请尽快帮助我,之后圣诞快乐!
我删除了你的代码。. . .
谢谢你的帮助。
谢谢,但我已经有了公式,我只是需要修正点值,因为我有欧元账户而不是美元。代码是这样的。
我需要用TICKVALUE* TICKSIZE来代替Point,所以它看起来像这样
如果有人能确认这个想法是正确的,那么我想问题就解决了。所以请尽快帮助我,并祝你圣诞快乐!
我不能确认,但我建议用Alert();来调试它,像这样?
或
你自己也会确认的。
谢谢你的帮助。
我不能确认,但我建议用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
如果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美元/每手。这里没有错误。
好的,这些应该是(最大)容量大小计算 的步骤。
(如果我错了,请纠正我 ^_^)
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的东西,而它显然在我的情况下不起作用,因为我有欧元账户。
这是我的手数调整功能。
- STOPSLIP在当前止损水平+SPREAD的基础上增加X个点。
- 我使用TICKVALUE * TICKSIZE,因为我有欧元账户而不是美元,所以在我的5位数经纪商那里,点值是0.000007而不是0.00001,这是合理的,因为它被计入了欧元汇率。
所以请谁来确认一下是否正确,如果不正确,请纠正我的公式,不要给我其他帖子的链接,因为我不明白,只要纠正我的LOT()函数,我就会很高兴,请帮助我!这让我感到头疼的是,我只是想弄清楚括号里的内容。
说实话,我完全不知道你在这里试图实现什么。
我看不出MODE_STOPLEVEL或SPREAD有什么关系,你肯定应该以当前价格的止损距离为基础进行计算?
账户货币 是什么应该没有区别,计算应该是一样的,因为TICKVALUE是账户货币。
请注意,把你的代码放在两行上,帖子就不会那么宽了,也就不需要左右滚动了,更容易阅读 :)