期货量化软件:从市场里选择智能交易系统的正确途径

智能交易系统运营机制的关键

我们将研究清单中的前三项组合。 基于测试我自己和其他人员开发的系统经验,以及其他用户的经验,我可以说有这样几种类型的智能交易系统:

  • 基于即时报价的 EA
  • 基于柱线的 EA
  • 由计时器控制的 EA

如您所见,类型并不多。 例如,如果一个 EA 是基于即时报价操作的,那么它只会在该事件发生后,才会执行所有计算和交易操作。 第二种类型稍微复杂一些。 以前我在开发基于即时报价的机器人,现在我已经切换到基于柱线操作的 EA。 不幸的是,在 MQL4 和 MQL5 的智能交易系统中,不可能收到新柱线出现事件。 但它可以通过运用其它功能,以不同的途径实现。 这与测试间隔的长度直接相关。 第三类智能交易系统是由计时器操控的。 并非所有此类 EA 都能在策略测试器中正确测试。 开发人员通常可以证明这种选择是合理的,但我对这种解决方案非常怀疑。

如果一款智能交易系统跟踪即时报价,这会在实际运行时导致自发产生额外的风险和困难。 此类 EA 通常对网速非常敏感,尤其是靠市价单进行交易的情况下。 对它们来说,即使是 50 毫秒的延迟也是至关重要的。 在这种情况下,人们只能租用靠近交易服务器的VPS(虚拟服务器),从而尽量降低这种延迟影响。

如果机器人使用挂单,则几乎可以完全消除这种负面情况。 无论如何,这样的系统可以产生更多的利润、或减少可能的损失。

根据我的经验,最稳定的是追踪柱线的系统 — 我将在文章末尾用我自己开发的系统来证明这一点。 当然,根据即时报价数据可以找到盈利丰厚的系统,但这要困难得多。 我之所以提及这一点,是因为本文的目的是提供制定正确决策的最简单方法。

根据上述思路,最重要的部分是根据以下原则对系统进行测试:

  1. EA 跟踪即时报价
  2. EA 跟踪柱线

我们来看看这些事件是如何在代码中实现的。 以下是新的即时报价出现事件:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  //some logic
  }

一次即时报价是来自服务器的每个新价格。 如果服务器上的价格发生变化,服务器会将此事件发送给所有客户端。 基于柱线的操作可由此事件及额外应用过滤功能来实现:

//+------------------------------------------------------------------+
//| Expert new bar function                                          |
//+------------------------------------------------------------------+
datetime PrevTimeAlpha=0;  
bool bNewBar()
   {
   if ( Time[1] > PrevTimeAlpha )
       {
       if ( PrevTimeAlpha > 0 )
          {
          PrevTimeAlpha=Time[1];
          return true;
          }
       else
          {
          PrevTimeAlpha=Time[1];
          return false;
          }
       }
   else return false;
   }  

这是我如何做到这一点的一个示例。 还有其它可能的方法。 重要的是,所有这些函数最终都将在 OnTick 事件中用到:

void OnTick()
  {
  if ( bNewBar() ) { /*some logic*/ }
  }

下面是计时器事件:

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
  //some logic
  }

可以看出,就像在前面的事件中一样,所有逻辑都源自事件,任何智能交易系统代码都正是由这些事件驱动才进行操作。 在此之前,应在 EA 启动期间为计时器事件设置所需的时间(以毫秒为单位):

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(60);
   return(INIT_SUCCEEDED);
  }

这就行了。 我们已经看到了三种可能的 EA 逻辑范式,这足够进一步的分析了。 当然,还有很多其它的事件,但是算法交易者很少会用到它们,因为它们是非常怪异和情景化的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值