3.3 计算仓位大小( Lot Size )
除了选择合适的停损价与获利价位,采用合适的仓位是最佳风险管理工具之一。指定仓位的大小可以很简单,就像声明外部变量以及每次都用固定仓位大小下单那般。在本节中,我们将根据你每笔交易中愿意承受的最大损失额,探寻更精密的仓位计算方法。
过度杠杆是外汇交易员最大的致命伤之一。使用相对于你资产而言太大的仓位,可能一下子就会清空你的账户,也可能轻易给你带进很大的利益。建议你每笔交易最多仅用资产的2%-3% ,也就是说,你的每笔交易可能损失的最大金额将不会超过你账户的2%~3% 。
3.3.1 资金管理
以这种方式计算仓位大小,我们需要指定使用的资产百分比和停损点差。我们会用外部变量EquityPercent (资产百分比)来设要用的资产百分比。假设会使用50 点停损。

首先,需要计算EquityPercent (资产百分比)指定的资产额。若余额为10000元,我们使用2% 的资产,则计算过程如下:

AccountEquity( )是MQL 的功能,会返回目前的账户资产。我们把EquityPercent(资产百分比)除以100 以取得小数值(0.02) ,然后乘以AccountEquity ( ) ,以计算要用的资产额。$10000 的2% 是$200 ,此值会储存在变量RiskAmount 中。
接着,我们得找出档值(tick value) 。这是交易一手( lot) 所需货币的每点获利。例如,以标准账户(1 0 万手)交易1手EUR/USE,每点获利为$10 。以迷你账户( 1 万手)交易,每点获利为$1。
我们可用MODE_TICKVALUE 参数的MarketInfo ( )功能返回指定货币的每点获利。档值(Tick Value) 须以点数表示,因此,如在小数点经纪商报价(3 位或5 位小数点)上交易,须把文件值乘以10 。

假设以标准账户交易, EUR/USE 的文件值会是10 。此值会储存在TickValue(文件值)变量中。如为小数点差经纪商,则TickValue 是1 。我们需要乘以10 ,使其相当于一点。如果Point 变量显示货币为3 位或5 位小数点,则把TickValue 乘以10 ,使其等于2 位或4 位小数值。
下一步就是计算仓位的大小。首先,用RiskAmount 除以停损设定,就可取得此单每档的获利。$200 除以50 点停损会得到$4 。现在,我们只要用$4 除以TickValue( 档值) ,就可得到仓位大小:

我们以标准账户计算出的仓位大小为0.4 手。以迷你账户交易,计算出的仓位大小为4 手。此值会储存在CalcLots 变量中。
如资金管理妥当,你所使用的资产比例会是相当一致的(保守风险1%~2% ,较高风险可达5% ) 。另外,你的停损会依时间和交易系统的不同而有所差异。仓位大小会依你设的停损而有很大的不同。
很近的停损价会产生较大的仓位,如交易单点到获利价,大仓位会提供很多上攻的利益。反过来,如用大停损,仓位就会很小。此方式对设很近停损和/或大获利值最为有利。
如果一定要用大停损,或者根本不用,用固定的仓位大小可能更为有利。我们需要在计算仓位大小或使用固定仓位之间作出选择。使用名为Dynamic LotSize (动态仓位大小)的外部布尔变量,来切换仓位计算:

如果DynamicLotSize 设为真(true) ,我们则根据停损价计算仓位大小,并把该值分配到LotSize (仓位大小)变数; 如果DynamicLotSize 为假( false) ,我们就把FixedLotSize 的值分配到LotSize 。如同交易单的仓位大小, LotSize 变量会传送至OrderSend ( )功能。
3.3.2 验证仓位大小
如同停损、获利及挂单价,仓位大小也应该进行验证,以确保你的经纪商能接受。也就是说,你的仓位不宜过大或过小,如经纪商不支持这些,也不该被指定在微型仓位(0.01 ) 。你还应该将仓位大小正常化至适当的小数位。
我们先来检查最大和最小的仓位。以MarketInfo ( )功能的MODE_MINLOT和MODE_MAXLOT 参数比较目前仓位大小和最大/最小的仓位大小。如果仓位大小无效,会自动调整至最大值或最小值。

我们只是比较仓位大小值、计算过或固定仓位大小与最大/最小的仓位大小。如果LotSize( 仓位大小)比最小仓位还小,或比最大仓位还大,就会被分配至适当的最大值或最小值。
接着,我们需要比较仓位大小和step 值。step 值代表经纪商是否允许微型仓位(0.01) 或迷你仓位(0.1) 。如果在仅允许迷你仓位的经纪商系统上尝试使用微型仓位,则会因出现错误而无法下单。
检查step 值源代码:

N ormalizeDouble ( )功能把IρtSize( 仓位大小)的值舍入到第二参数中指定的位数。在第一行,如step 是0.1 ,表示经纪商仅使用迷你仓位,LotSize (仓位大小)将舍入到小数点后一位。否则, LotSize 将舍入至小数点后两位。
在未来,如遇到允许仓位大小至小数点后三位的经纪商,即可轻易修改上述代码进行检查。但在此时,几乎所有MetaTrader 的经纪商都使用一位或两位小数的仓位大小。