您可能已经听说过这一点,但为您的交易系统选择合适的手数大小是开发良好系统的关键因素。 在这篇 MQL4 手数参数文章中学习如何使用风险、手数、资金管理和其他变量对您的 Expert Advisor 进行编程。
您可以指定手数,就像在内部变量中声明一个手数一样简单,作为每个订单的固定手数,但我们将探索一种根据可用保证金的百分比计算手数的简单方法。
幕后有一点数学运算,但基本上,如果您选择自定义风险设置为 1,您将为每 1K 股本规模交易 0.01 微手。 因此,在自定义风险设置为 2 和 10K 账户大小的情况下,您将从 0.2 手开始,它会自动为每 100 美元的利润/亏损增加/减去 0.01 手。 这种自动调整手数的技术非常简单,但对于自动增加利润、减少损失或自动调整账户存款和取款非常有效。
参数
毫米
Bool:你是否会使用资金管理。
风险
双重:您预定义的风险设置。
地段
双:如果关闭 MM,这是您将使用的手动手数。
手数
双精度:这是您的经纪人提供的手数的小数位数。 大多数有两位小数,但有些只有一位。
MT4 代码片段
外部布尔 MM = TRUE;
外部双重风险 = 2;
外部双手 = 0.1;
extern double LotDigits =2;
双 GetLots()
{
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
双倍杠杆 = AccountLeverage();
double lotsize = MarketInfo(Symbol(), MODE_LOTSIZE);
double stoplevel = MarketInfo(Symbol(), MODE_STOPLEVEL);
双 MinLots = 0.01;
双 MaximalLots = 50.0;
如果(MM)
{
双手 = 手;
双倍手数 = NormalizeDouble(AccountFreeMargin() * Risk/100 / 1000.0, LotDigits);
如果(手数 < minlot)手数 = minlot;
如果(手数 > MaximalLots)手数 = MaximalLots;
if (AccountFreeMargin() < Ask * lots * lotsize / leverage) {
Print(“我们没有钱。Lots = “, lots, ” , Free Margin = “, AccountFreeMargin());
Comment(“我们没有钱。Lots = “, lots, ” , Free Margin = “, AccountFreeMargin());
}}
否则很多= NormalizeDouble(很多,数字);
回报(很多);
}
您将看到,如果我们应该打开(真)或关闭(假)管理,我们首先必须声明一些外部变量来确定,如果打开,我们的自定义风险设置是什么,如果没有,是什么 将是默认手数。
LotDigits 是您的经纪人允许的小数位数(例如,如果它允许微型手数,例如 0.01,它将有 2 位数字或小数位)。
GetLots() 是我们为自定义函数指定的名称 所以所有的 o(它可以是任何名称),以及包含在其括号中的所有内容都是此函数的计算。 您只需将 GetLots() 放在 OrderSend() 函数的第三个参数中以调用它,替换之前的固定手数变量。
我们创建一个变量 minlot 来引用 MarketInfo() 函数。 MarketInfo() 函数是我们需要检索给定货币的各种市场数据的函数,例如 Bid 或 Ask 价格、Swap 值、位数,为了我们的目的,它还可以告诉我们最小手数 该货币的大小。 我们要确保无论进行多少手数计算,它都大于经纪人的最小手数,否则小于 minlot,它将是 minlot。
自动 MM 手数的主要计算发生在一行中:
double lots = NormalizeDouble(AccountEquity() * Risk/100 / 1000.0, LotDigits);
AccountEquity() 是众多返回当前账户净值的账户信息函数之一。 我们想要返回账户的净值,而不是 AccountBalance(),因为净值代表了账户状态的更有效图片(也就是账户净值)。 我们希望股权价值能够对适当的手数进行数学计算。 我们要把这个权益值乘以我们的风险值,然后除以 100,然后再除以 1000,以确定合适的手数。
根据所选的风险设置,效果是成比例的手数大小:风险设置为每 1K 股权 1 笔交易 0.01 手,风险设置为每 1K 股权 2 笔交易 0.02 手,等等。有很多可能性 ,取决于所选择的风险设置。 随着账户规模的增加或减少,交易手数会增加或减少。 例如,风险设置为 2 将在 10K 账户上交易 0.2 手,每 100 美元的净值收益或损失增加/减少 0.01 手。 用户可以轻松调整适合其风险承受能力、EA 交易风格和账户规模的风险设置。
如果 MM 设置为 true,我们将根据权益计算手数,并将该值分配给 lots 变量。 如果 MM 为假,我们只需将手数的值分配给 Lots 的固定手数。
您可以看到,上面的代码相对简单,但它可以根据不断变化的净值大小在自动手数调整方面产生天壤之别。 确定批量大小有更复杂的方法,但有时最简单的方法效果最好。
笔记:
EA 开发人员或最终用户必须根据严格的回溯测试确定 EA 的适当风险设置,密切关注与风险相关的统计数据(平均亏损交易、连续亏损交易和最大亏损)。 通常这种风险分析首先以固定手数进行,例如 5K 账户为 0.1。 一旦所有与风险相关的统计数据都针对固定手数编制,就可以更好地确定可以轻松交易的风险设置。