在金融市场,尤其是商品期货市场中,交易策略的创新和应用是实现盈利的关键。定量分型速率交易策略来源于优宽国际站(泊宇量化开发),原本针对加密货币市场,但其核心原理同样适用于商品期货市场。本文将探讨该策略在商品期货市场的应用实践,并对比My语言和Js语言版本的实现方式。
定量分型速率交易策略的核心在于通过计算价格变化的速率来预测市场趋势。速率是物理学中描述速度的概念,将其应用于金融领域,即单位时间内价格的变化量。策略认为,速率的上升通常预示着行情的上升趋势,而速率的下降则暗示市场动能的减弱,可能面临平缓或下跌的风险。
len
,用于计算周期内最高价、最低价和它们的平均值。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语言版本的策略实现则更为详细,首先定义了用于存储数据的数组,然后通过循环计算滚动周期的平均值,并剔除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语言版本中,我们采取了以下步骤来改写和完善策略:
根据策略原理,该策略适用的品种是趋势走势比较连续稳定的品种,对于走势波动比较大的品种,容易造成频繁的开平仓和止损操作。同时为更好的容纳波动性,因此将策略周期设置为一天,我们应用于最近比较热门的锰硅品种(2024年5月初,锰硅因为原材料问题,价格猛涨)。
另外,对于波动走势较为清晰的玻璃品种,也取得了较好的收益。
My语言和Js语言版本的定量分型速率交易策略各有特点。My语言版本简洁高效,适合快速实现和部署策略。而Js语言版本则提供了更多的灵活性和细节控制,适合需要深入分析和优化策略的交易者。两种语言版本的策略都能有效应用于商品期货市场,交易者可以根据自己的需求和偏好选择合适的实现方式。通过不断的实践和优化,定量分型速率交易策略有望在商品期货市场中取得良好的交易表现。