|
|
我自己在用的,我自己写的,可以限制交易区域和交易方向,平常参数根据市场自己调整。多空可以分别设置的。
// 输入参数
input double LotSize = 0.1; // 交易手数
input int GridSize = 2000; // 网格大小(点)
input int MaxOrders = 5; // 最大订单数量
input int Direction = 1; // 方向选择: 0=双向, 1=只多, 2=只空
input int TakeProfit = 3000; // 止赢点数
input int StopLoss = 0; // 止损点数
input int MagicNumber = 12345; // 魔法数字
input double InitialBuyPrice = 0.0; // 初始开多价格(0=立即开始)
input double InitialSellPrice = 0.0; // 初始开空价格(0=立即开始)
// 全局变量
double gridBuyLevels[]; // 多头网格价格数组
double gridSellLevels[]; // 空头网格价格数组
int totalBuys = 0; // 当前多单数量
int totalSells = 0; // 当前空单数量
bool buyGridStarted = false; // 多头网格是否已启动
bool sellGridStarted = false; // 空头网格是否已启动
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// 初始化数组
ArrayResize(gridBuyLevels, MaxOrders);
ArrayResize(gridSellLevels, MaxOrders);
// 清空数组
ArrayInitialize(gridBuyLevels, 0);
ArrayInitialize(gridSellLevels, 0);
// 检查参数有效性
if(LotSize <= 0)
{
Print("错误: 交易手数必须大于0");
return(INIT_PARAMETERS_INCORRECT);
}
if(GridSize <= 0)
{
Print("错误: 网格大小必须大于0");
return(INIT_PARAMETERS_INCORRECT);
}
if(MaxOrders <= 0)
{
Print("错误: 最大订单数量必须大于0");
return(INIT_PARAMETERS_INCORRECT);
}
Print("EA初始化完成");
Print("参数设置:");
Print(" 交易手数: ", LotSize);
Print(" 网格大小: ", GridSize, " 点");
Print(" 最大订单: ", MaxOrders);
Print(" 方向: ", (Direction==0?"双向" Direction==1?"只多":"只空")));
Print(" 止赢: ", TakeProfit, " 点");
Print(" 止损: ", StopLoss, " 点");
Print(" 魔法数字: ", MagicNumber);
Print(" 初始开多价格: ", InitialBuyPrice);
Print(" 初始开空价格: ", InitialSellPrice);
return(INIT_SUCCEEDED);
}
|
|