量化交易系统开发-实时行情自动化交易-8.19.Multicharts平台

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。

接下来会对于Multicharts平台介绍。

MultiCharts是一款广受欢迎的专业量化交易平台,以其强大的多图表支持、高效的回测引擎和兼容性而闻名。该平台支持多种编程语言,其中EasyLanguage(EL)语言是主要开发语言之一,便于开发者编写交易策略并进行历史回测和实时监控。

本文将通过一个经典的“双均线策略”示例,展示如何在MultiCharts平台上进行量化交易策略开发与回测。


1. 策略背景:双均线策略

策略逻辑

双均线策略是一种趋势跟随型交易策略,基于短期均线和长期均线的交叉关系产生买入或卖出信号:

  • 买入信号:短期均线向上突破长期均线,称为“黄金交叉”。
  • 卖出信号:短期均线向下跌破长期均线,称为“死亡交叉”。
适用场景
  • 优势:适用于趋势性市场,可捕捉价格的主要趋势波动。
  • 局限:在震荡行情中,可能导致频繁的错误信号。

2. 策略开发

MultiCharts采用EasyLanguage进行策略开发。以下是完整的策略实现步骤和代码。

(1)初始化参数

在策略中定义均线窗口、交易标的和初始条件。

Inputs: 
    ShortLength(10),    // 短期均线周期
    LongLength(50);     // 长期均线周期

Variables:
    ShortMA(0),         // 短期均线值
    LongMA(0),          // 长期均线值
    Position(0);        // 当前持仓状态(0为空仓,1为多头)
(2)计算均线

利用内置的Average函数计算短期均线和长期均线。

ShortMA = Average(Close, ShortLength);  // 计算短期均线
LongMA = Average(Close, LongLength);   // 计算长期均线
(3)生成交易信号

根据均线交叉关系生成买入或卖出信号,并执行交易操作。

// 买入条件:短期均线向上突破长期均线
If ShortMA Crosses Above LongMA Then Begin
    If Position = 0 Then Begin
        Buy("GoldenCross") Next Bar at Market;  // 黄金交叉买入
        Position = 1;                           // 更新持仓状态
    End;
End;

// 卖出条件:短期均线向下跌破长期均线
If ShortMA Crosses Below LongMA Then Begin
    If Position = 1 Then Begin
        Sell("DeathCross") Next Bar at Market; // 死亡交叉卖出
        Position = 0;                          // 更新持仓状态
    End;
End;

3. 策略回测

MultiCharts平台支持对历史数据进行回测,以下为具体步骤。

(1)设置回测时间范围

通过平台界面设置回测的起止日期和数据频率(如日线、分钟线等)。本示例使用2020年1月1日至2022年1月1日的日线数据。

(2)加载数据

导入所需的交易标的数据,例如苹果(AAPL)的历史价格。

(3)运行策略

将编写好的策略代码应用到图表上,并运行回测。MultiCharts会自动执行策略逻辑,生成相关交易信号。


4. 策略优化

MultiCharts提供参数优化功能,可以通过改变均线的时间窗口,寻找最佳参数组合。

(1)定义优化范围

在策略输入中设置参数优化范围。例如:

  • 短期均线周期:5至20。
  • 长期均线周期:30至60。
(2)执行优化

使用MultiCharts的优化工具,运行参数优化。平台会自动测试所有参数组合,并输出最佳结果。


5. 添加风险管理

为控制风险,可在策略中引入止盈止损机制。

(1)设置止盈止损条件

在策略逻辑中添加止盈止损规则。

Inputs:
    TakeProfit(0.1),  // 止盈目标(10%)
    StopLoss(0.05);   // 止损目标(5%)

Variables:
    EntryPrice(0),    // 入场价格
    CurrentPL(0);     // 当前浮动盈亏

// 记录入场价格
If MarketPosition = 1 Then Begin
    EntryPrice = EntryPrice;  // 多头入场价格
End;

// 计算当前浮动盈亏
CurrentPL = (Close - EntryPrice) / EntryPrice;

// 止盈条件
If CurrentPL >= TakeProfit Then Begin
    Sell("TakeProfit") Next Bar at Market;
End;

// 止损条件
If CurrentPL <= -StopLoss Then Begin
    Sell("StopLoss") Next Bar at Market;
End;

6. 策略完整代码

以下是双均线策略的完整实现代码:

Inputs: 
    ShortLength(10),    // 短期均线周期
    LongLength(50),     // 长期均线周期
    TakeProfit(0.1),    // 止盈目标(10%)
    StopLoss(0.05);     // 止损目标(5%)

Variables:
    ShortMA(0),         // 短期均线值
    LongMA(0),          // 长期均线值
    Position(0),        // 当前持仓状态(0为空仓,1为多头)
    EntryPrice(0),      // 入场价格
    CurrentPL(0);       // 当前浮动盈亏

// 计算均线
ShortMA = Average(Close, ShortLength);  // 短期均线
LongMA = Average(Close, LongLength);   // 长期均线

// 买入逻辑
If ShortMA Crosses Above LongMA Then Begin
    If Position = 0 Then Begin
        Buy("GoldenCross") Next Bar at Market;  // 黄金交叉买入
        EntryPrice = Close;                     // 记录入场价格
        Position = 1;                           // 更新持仓状态
    End;
End;

// 卖出逻辑
If ShortMA Crosses Below LongMA Then Begin
    If Position = 1 Then Begin
        Sell("DeathCross") Next Bar at Market;  // 死亡交叉卖出
        Position = 0;                           // 更新持仓状态
    End;
End;

// 风险管理
If Position = 1 Then Begin
    CurrentPL = (Close - EntryPrice) / EntryPrice;  // 计算浮动盈亏

    // 止盈
    If CurrentPL >= TakeProfit Then Begin
        Sell("TakeProfit") Next Bar at Market;
        Position = 0;
    End;

    // 止损
    If CurrentPL <= -StopLoss Then Begin
        Sell("StopLoss") Next Bar at Market;
        Position = 0;
    End;
End;