下载MetaTrader 5

请观看如何免费下载自动交易

有趣的脚本?
因此发布一个链接 -
让其他人评价

喜欢这个脚本? 在MetaTrader 5客户端尝试它

显示:
3294
等级:
投票: 16
已发布:
2016.05.30 14:00
已更新:
2016.05.30 14:00
\MQL4\Include\
lot_lib.mqh (10.68 KB)预览

所以,决定吧 - 在每个交易中可以使用怎样的风险?有许多选项,选择正确的一个并非总是那么容易,为了解决这个问题,我制作了lot_lib.mqh库。

用法:
- 下载lot_lib.mqh 并放到 MetaTrader 4\experts\include 文件夹下;
- 以下代码行加到 EA 交易中:

// 在开头:
#include <lot_lib.mqh>
 
// 在 init() 函数中:
lotlib_PrevLots = 0.0;  lotlib_PrevProfit = 0.0;
 
// 在 start() 函数中,在设置每个订单之前:
lotlib_OpenPriceLevel = Ask; // 不是买方报价 - 建立 
                             // 仓位的真实价格水平 
lotlib_StopLossLevel = Ask-StopLoss*Point; 
// 不是 Ask-StopLoss*Point - 而是仓位真实的止损 
// 水平
 
// 在 start() 函数中, 选择开启仓位的地方 (例如,
// 在移动止损之前):
lotlib_PrevLots = OrderLots();  lotlib_PrevProfit = OrderProfit();
- 当设置订单之前使用Lot()函数确定手数大小,也就是说,不用定义手数大小的变量(通常是 'Lot' 或者 'Lots'),而是用 Lot()函数;
- 编译EA 并使用它。

注意:如果EA同时持有两个或者更多开启的仓位,lotlib_PrevLots 和 lotlib_PrevProfit 变量需要在建立新的仓位之前赋值到所需的变量值中。您将必须自己选择哪些变量需要赋值:最近平仓或是最近建仓的手数。

外部变量:
- LotSizeVariant - 变量编号,下面会介绍;
- StartLot - 初始手数 (对于 LotSizeVariant can 可以从 0 到 5);
- AddLot - 手数 "增量" 的大小(对于 LotSizeVariant - 1 和 2);
- KLot - 增量比例 (对于 LotSizeVariant - 3 和 4);
- MaxRisk - 可以使用的存款百分比 (对于 LotSizeVariant - 5, 6, 11-17, 31-37);
- TrueProfitPoints - 点数, 仓位利润在此点数之上时就认为获利,在此点数之下认为是亏损(对于 LotSizeVariant - 1-4);
- BalanceUse - EA使用的余额百分比,如果交易是由多个EA交易进行的,设置为 100/"EA数量", 例如,3个EA就使用33, 4个EA使用25, 以此类推(对于 LotSizeVariant - 5, 6, 7, 11-17, 31-37)

LotSizeVariant 可能的值:
0 - 固定手数,由 StartLot 变量定义;
1 - 如果前一个仓位是获利的,也就是说,利润大于TrueProfitPoints的点数,手数会增加AddLot或者如果AddLot小于零,手数就减少;如果仓位没有利润,也就是说,利润小于TrueProfitPoints的点数)- 使用StartLot;
2 - 如果前面的仓位没有利润,手数增加 AddLot,如果获利 - 设为StartLot;
3 - 如果前面的仓位有利润,手数增加AddLot倍,如果没有利润 - 使用 StartLot;
4 - 如果前面的仓位没有利润,手数增加AddLot倍,如果有利润 - 使用 StartLot;
5 - 根据止损选择手数大小,开启仓位触发止损时最大亏损等于存款的MaxRisk百分数;
6 - 根据余额百分比以及MaxRisk变量来选择手数大小,例如,对于EURUSD,存款为1000,并且 MaxRisk=10,就会建仓 0.1 手, 而余额为 15000 并且 MaxRisk=5,就会建仓 0.8 手);
7 - 根据公式 "余额的百分之一" / "最近20个柱的平均差距" * 0,4. 我不记得我怎么想到这个的了;

11-17 - 根据方法 1-7 进行计算, 手数大小由第五个方法加以限制,也就是说,最大亏损是余额的MaxRisk百分比;
21-27 - 根据方法 1-7 进行计算, 手数大小不能减小;
31-37 - 根据方法 1-7 进行计算,手数大小由第五个方法加以限制并且不能减小,也就是说,如果大于第五个方法的结果,就会减小到第五个方法的手数大小,但是同时不能小于之前的手数大小,会等于之前的手数大小;

100-128 - 所有变量在一行 (方便优化):
100 - 0
101 - 1 108 - 11 115 - 21 122 - 31
102 - 2 109 - 12 115 - 22 123 - 32
103 - 3 110 - 13 117 - 23 124 - 33
104 - 4 111 - 14 118 - 24 125 - 34
105 - 5 112 - 15 119 - 25 126 - 35
106 - 6 113 - 16 120 - 26 127 - 36
107 - 7 114 - 17 121 - 27 128 - 37

预先配置 (如有必要, 在代码中修改):

 //---- the lot will not be LESS than the value of MIN_LOT
#define MIN_LOT            0.1
//---- 手数不能大于 MAX_LOT
#define MAX_LOT            100
//---- 如果操作中出现错误 (例如,并非所有必需的 
//---- 变量都在EA中被初始化), 函数就返回 
//     the value of DEFAULT_LOT
#define DEFAULT_LOT        -1


结果示例:
我以 MACD 为例,增加了止损,集成此库并尝试不同的 LotSizeVariant 数值,当前交易品种 - EURUSD, 图表时段 - H1, testing period: 01.01.2001 - 01.08.2005, 建模模式 - 全部订单, 建模质量 - 90%.

图中显示了几个随机选择的结果. 我没有选择最佳的方法并且没有优化参数,第一张图使用固定手数。

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
官方代码: https://www.mql5.com/ru/code/7749

ZH_Dynamic_Arrays_Lib ZH_Dynamic_Arrays_Lib

模拟动态数组的一系列函数。

旋转文字对象 旋转文字对象

操作对象的示例: 创建对象,修改属性,重绘图表。

Gap 指标 Gap 指标

本指标显示前一柱收盘价和当前柱收盘价之间的差距。

ADXdon ADXdon

ADXdon 指标。另一个版本的 ADX 指标,显示了趋势的强度。