资源加载中... loading...

定量分型速率交易策略应用于商品期货市场的实践

Author: ianzeng123, Created: 2024-05-09 10:46:19, Updated: 2024-11-19 13:29:51

img

在金融市场,尤其是商品期货市场中,交易策略的创新和应用是实现盈利的关键。定量分型速率交易策略来源于优宽国际站(泊宇量化开发),原本针对加密货币市场,但其核心原理同样适用于商品期货市场。本文将探讨该策略在商品期货市场的应用实践,并对比My语言和Js语言版本的实现方式。

策略原理

定量分型速率交易策略的核心在于通过计算价格变化的速率来预测市场趋势。速率是物理学中描述速度的概念,将其应用于金融领域,即单位时间内价格的变化量。策略认为,速率的上升通常预示着行情的上升趋势,而速率的下降则暗示市场动能的减弱,可能面临平缓或下跌的风险。

实现步骤

  1. 设计周期数:设定一个周期数len,用于计算周期内最高价、最低价和它们的平均值。
  2. 计算平均值:取一定周期内的最高价和最低价,求其平均值。
  3. 计算均线:对平均值计算平滑移动均线。
  4. 计算斜率:使用回归分析计算均线的斜率,以判断动能趋势。
  5. 交易信号:根据斜率的变化生成交易信号,斜率下降时(动能减弱)平多做空,斜率上升时(动能增强)平空做多。

My语言实现(原始版本)

My语言版本依靠内置函数,所以策略实现较为简洁,通过内置函数直接计算最高价、最低价的均线和斜率,然后根据斜率的变化生成交易信号。

len:=35; // 设计周期数
hh:=HHV(H,len); // 取一定周期内的最高价
ll:=LLV(L,len); // 取一定周期内的最低价
hl2:=(hh+ll)/2; // 最高价、最低价的平均值
avg:=MA(hl2,5); // 对平均值计算平滑移动均线

ss:=SLOPE(avg,len); // 对均线计算回归斜率

if ss < REF(ss,1), SPK; // 当斜率变小说明行情动能减弱,有下跌趋势,平多做空
if ss > REF(ss,1), BPK; // 当斜率变大说明行情动能不断增加,有上升趋势,平空做多
AUTOFILTER;

Js语言实现

Js语言版本的策略实现则更为详细,首先定义了用于存储数据的数组,然后通过循环计算滚动周期的平均值,并剔除NaN值。接着,使用线性回归的方法计算斜率,最后根据斜率的变化生成交易信号。

function main() {
    var lenMeanList = [];
    var slopeList = [];
    var maLine = []; // 存储滚动周期的列表
    var c = KLineChart();
    $.CTA(symbol, function(st) {
        var r = st.records;
        if (r.length < len + 1) return;

        var lenHigh = TA.Highest(r, len, 'Close');
        var lenLow = TA.Lowest(r, len, 'Close');
        var lenMean = (lenHigh + lenLow) / 2;
        lenMeanList.push(lenMean);

        if (lenMeanList.length < len + maLen) return;

        // 计算滚动周期列表
        for (var i = 0; i < lenMeanList.length - maLen + 1; i++) {
            var sum = 0;
            for (var j = i; j < i + maLen; j++) {
                sum += lenMeanList[j];
            }
            var rollingMean = sum / maLen;
            maLine.push(rollingMean);
        }
        
        // 剔除NaN值
        maLine = maLine.filter(function(val) {
            return !isNaN(val);
        });
        
        // 取前len个值
        maLine = maLine.slice(-len);
        
        // 线性回归计算斜率
        var n = maLine.length;
        var sumX = 0;
        var sumY = 0;
        var sumXY = 0;
        var sumXX = 0;
        for (var i = 0; i < n; i++) {
            sumX += i;
            sumY += maLine[i];
            sumXY += i * maLine[i];
            sumXX += i * i;
        }
        var slope = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX); // 计算斜率
        
        slopeList.push(slope); // 将斜率添加到slopeList中

        // 计算交易信号
        var long_signal = slopeList[slopeList.length - 1] > slopeList[slopeList.length - 2]
        var short_signal = slopeList[slopeList.length - 1] < slopeList[slopeList.length - 2]

        // 进行交易操作
        if (st.position.amount <= 0 && long_signal ) {
            Log("当前持仓: ", st.position);
            return st.position.amount < 0 ? 2 : 1
        } else if (st.position.amount >= 0 && short_signal) {
            Log("当前持仓: ", st.position);
            return st.position.amount > 0 ? -2 : -1
        }

        // 画图操作
        for (var i = 0 ; i < r.length ; i++) {
            var bar = r[i]
            c.begin(bar)
            c.plot(slope, "slope")
            c.close()
        }

        Sleep(1000 * 60 * 60 * 24)

    });
}

代码改写思路补充

在Js语言版本中,我们采取了以下步骤来改写和完善策略:

  1. 数据平滑处理:通过滚动平均来平滑处理数据,减少噪声的影响。
  2. 斜率计算优化:使用线性回归的方法计算斜率,提高了斜率计算的准确性。
  3. 信号生成逻辑:明确了长信号和短信号的生成条件,简化了交易逻辑。
  4. 图形绘制:增加了绘制斜率图形的代码,便于观察和分析。

商品期货市场应用实践

根据策略原理,该策略适用的品种是趋势走势比较连续稳定的品种,对于走势波动比较大的品种,容易造成频繁的开平仓和止损操作。同时为更好的容纳波动性,因此将策略周期设置为一天,我们应用于最近比较热门的锰硅品种(2024年5月初,锰硅因为原材料问题,价格猛涨)。

image

另外,对于波动走势较为清晰的玻璃品种,也取得了较好的收益。

image

结束语

My语言和Js语言版本的定量分型速率交易策略各有特点。My语言版本简洁高效,适合快速实现和部署策略。而Js语言版本则提供了更多的灵活性和细节控制,适合需要深入分析和优化策略的交易者。两种语言版本的策略都能有效应用于商品期货市场,交易者可以根据自己的需求和偏好选择合适的实现方式。通过不断的实践和优化,定量分型速率交易策略有望在商品期货市场中取得良好的交易表现。


更多内容