有请哪位大神帮忙回测一下好吗?有源码

 

mt5平台,欧元兑美元H1。代码如下:


#property copyright "Trading Strategy"
#property version   "1.00"

// 全局变量
double previousLot = 0.00; // 记录上一次平仓时的仓位大小
datetime lastBarTime = 0; // 记录最后处理的K线时间

void OnTick()
{
   // 检查新K线形成
   datetime currentBarTime = iTime(_Symbol, _Period, 0);
   if(currentBarTime != lastBarTime)
   {
      lastBarTime = currentBarTime;
      
      // 平掉所有持仓
      CloseAllPositions();
      // 平仓函数:关闭所有持仓
void CloseAllPositions()
{
   for(int i = PositionsTotal()-1; i >= 0; i--) 
   {
PositionSelectByTicket(PositionsGetTicket(i));
PositionClose(PositionsGetVolume(), PositionsGetSL(), PositionsGetTP());
    }
}
      
      // 获取平台手数限制
      double minLot = MarketInfo(symbol, MODE_MINLOT);
      double maxLot = MarketInfo(symbol, MODE_MAXLOT);
      
      // 计算新仓位大小
      double newLot = previousLot + minLot;
      if(newLot > maxLot) newLot = maxLot;
      
      // 获取前一根K线数据(索引1为前一根)
double open1 = iOpen(_Symbol, _Period,  1);
double close1 = iClose(_Symbol, _Period, 1);
      
      // 根据K线类型建仓
      if(close1 > open1)
MqlTradeRequest request = { };
MqlTradeResult result = { };
// 设置交易请求参数
request.action = TRADE_ACTION_DEAL; // 立即执行交易
request.symbol = Symbol() ; // 交易品种
request.volume = newLot; // 交易量
request.price = NormalizeDouble(Bid, _Digits); // 交易价格
request.type = ORDER_TYPE_BUY; // 买入订单
request.deviation =3; // 滑点
request.magic = 12345; // 订单魔术码   

      else if(close1 < open1)
MqlTradeRequest request = { };
MqlTradeResult result = { };
// 设置交易请求参数
request.action = TRADE_ACTION_DEAL; // 立即执行交易
request.symbol = Symbol() ; // 交易品种
request.volume = newLot; // 交易量
request.price = NormalizeDouble(Bid, _Digits); // 交易价格
request.type = ORDER_TYPE_SELL
; // 买入订单
request.deviation =3; // 滑点
request.magic = 12345; // 订单魔术码       
      
    //  更新仓位记录
      if(OrderTotal() > 0)
         previousLot = newLot;
   }
}

 

您好,请确认这三张帖子。


【新手必看】如何防止机器人误判:讨论代码时请使用代码表述功能
https://www.mql5.com/zh/forum/448896


【新手必看】请不要公开微信号,QQ号等社交帐号。 也请不要公开交易账号,密码,只读密码。
https://www.mql5.com/zh/forum/447753


(优化测试EA可以作为付费服务在自由职业者中发布)

【官网公告】找合规开发者,开发好EA
https://www.mql5.com/zh/forum/433240

【新手必看】如何防止机器人误判:讨论代码时请使用代码表述功能
【新手必看】如何防止机器人误判:讨论代码时请使用代码表述功能
  • 2023.06.13
  • Sky All
  • www.mql5.com
大家好,我是官网版主。 官网内部有机器人辅助管理,目的是自动下架一些有误导性的内容。 内容过长,或同一个IP多次注册,容易导致机器人误判,而被无辜删帖。 如果您被无故删帖,我们对这种体验感到万分抱歉。 为了防止机器人误判,请在讨论代码的时候使用代码表述功能...
 
hjw2077:

mt5平台,欧元兑美元H1。代码如下:


#property copyright "Trading Strategy"
#property version   "1.00"

// 全局变量
double previousLot = 0.00; // 记录上一次平仓时的仓位大小
datetime lastBarTime = 0; // 记录最后处理的K线时间

void OnTick()
{
   // 检查新K线形成
   datetime currentBarTime = iTime(_Symbol, _Period, 0);
   if(currentBarTime != lastBarTime)
   {
      lastBarTime = currentBarTime;
      
      // 平掉所有持仓
      CloseAllPositions();
      // 平仓函数:关闭所有持仓
void CloseAllPositions()
{
   for(int i = PositionsTotal()-1; i >= 0; i--) 
   {
PositionSelectByTicket(PositionsGetTicket(i));
PositionClose(PositionsGetVolume(), PositionsGetSL(), PositionsGetTP());
    }
}
      
      // 获取平台手数限制
      double minLot = MarketInfo(symbol, MODE_MINLOT);
      double maxLot = MarketInfo(symbol, MODE_MAXLOT);
      
      // 计算新仓位大小
      double newLot = previousLot + minLot;
      if(newLot > maxLot) newLot = maxLot;
      
      // 获取前一根K线数据(索引1为前一根)
double open1 = iOpen(_Symbol, _Period,  1);
double close1 = iClose(_Symbol, _Period, 1);
      
      // 根据K线类型建仓
      if(close1 > open1)
MqlTradeRequest request = { };
MqlTradeResult result = { };
// 设置交易请求参数
request.action = TRADE_ACTION_DEAL; // 立即执行交易
request.symbol = Symbol() ; // 交易品种
request.volume = newLot; // 交易量
request.price = NormalizeDouble(Bid, _Digits); // 交易价格
request.type = ORDER_TYPE_BUY; // 买入订单
request.deviation =3; // 滑点
request.magic = 12345; // 订单魔术码   

      else if(close1 < open1)
MqlTradeRequest request = { };
MqlTradeResult result = { };
// 设置交易请求参数
request.action = TRADE_ACTION_DEAL; // 立即执行交易
request.symbol = Symbol() ; // 交易品种
request.volume = newLot; // 交易量
request.price = NormalizeDouble(Bid, _Digits); // 交易价格
request.type = ORDER_TYPE_SELL
; // 买入订单
request.deviation =3; // 滑点
request.magic = 12345; // 订单魔术码       
      
    //  更新仓位记录
      if(OrderTotal() > 0)
         previousLot = newLot;
   }
}



MQL5参考里定义的

ERR_INDICATOR_DATA_NOT_FOUND

4806

需求数据未找到


你代码里有iopen()和iclose(),你应该先在oninit()中初始化指标句柄才能在ontick()中使用它们

 
pan90241 #:

MQL5参考里定义的

ERR_INDICATOR_DATA_NOT_FOUND

4806

需求数据未找到


你代码里有iopen()和iclose(),你应该先在oninit()中初始化指标句柄才能在ontick()中使用它们

谢谢你,更新如下:
#property copyright "Trading Strategy"
#property version   "1.00"
int OnInit()
{
   double pre_open  = iOpen(Symbol(), Period(), 1);
   double pre_close = iClose(Symbol(), Period(), 1);
// 当前货币对,当前图表周期,1柱开盘价和收盘价

// 全局变量
double previousLot = 0.00; // 记录上一次平仓时的仓位大小
datetime lastBarTime = 0; // 记录最后处理的K线时间

void OnTick()
{
   // 检查新K线形成
   datetime currentBarTime = iTime(_Symbol, _Period, 0);
   if(currentBarTime != lastBarTime)
   {
      lastBarTime = currentBarTime;
      
      // 平掉所有持仓
      CloseAllPositions();
      // 平仓函数:关闭所有持仓
void CloseAllPositions()
{
   for(int i = PositionsTotal()-1; i >= 0; i--) 
   {
PositionSelectByTicket(PositionsGetTicket(i));
PositionClose(PositionsGetVolume(), PositionsGetSL(), PositionsGetTP());
    }
}
      
      // 获取平台手数限制
      double minLot = MarketInfo(symbol, MODE_MINLOT);
      double maxLot = MarketInfo(symbol, MODE_MAXLOT);
      
      // 计算新仓位大小
      double newLot = previousLot + minLot;
      if(newLot > maxLot) newLot = maxLot;
      
      // 根据K线类型建仓
      if(pre_close > pre_open)
MqlTradeRequest request = { };
MqlTradeResult result = { };
// 设置交易请求参数
request.action = TRADE_ACTION_DEAL; // 立即执行交易
request.symbol = Symbol() ; // 交易品种
request.volume = newLot; // 交易量
request.price = NormalizeDouble(Bid, _Digits); // 交易价格
request.type = ORDER_TYPE_BUY; // 买入订单
request.deviation =3; // 滑点
request.magic = 12345; // 订单魔术码   

      else if(pre_close < pre_open)
MqlTradeRequest request = { };
MqlTradeResult result = { };
// 设置交易请求参数
request.action = TRADE_ACTION_DEAL; // 立即执行交易
request.symbol = Symbol() ; // 交易品种
request.volume = newLot; // 交易量
request.price = NormalizeDouble(Bid, _Digits); // 交易价格
request.type = ORDER_TYPE_SELL
; // 买入订单
request.deviation =3; // 滑点
request.magic = 12345; // 订单魔术码       
      
    //  更新仓位记录
      if(OrderTotal() > 0)
         previousLot = newLot;
   }
}
请问你能帮我回测一下吗?欧元兑美元H1,最好十年以上数据,精度99%。请发绩效给我行吗谢谢!
 

【新手必看】如何防止机器人误判:讨论代码时请使用代码表述功能
https://www.mql5.com/zh/forum/448896

【新手必看】如何防止机器人误判:讨论代码时请使用代码表述功能
【新手必看】如何防止机器人误判:讨论代码时请使用代码表述功能
  • 2023.06.13
  • Sky All
  • www.mql5.com
大家好,我是官网版主。 官网内部有机器人辅助管理,目的是自动下架一些有误导性的内容。 内容过长,或同一个IP多次注册,容易导致机器人误判,而被无辜删帖。 如果您被无故删帖,我们对这种体验感到万分抱歉。 为了防止机器人误判,请在讨论代码的时候使用代码表述功能...