打开网易新闻 查看精彩图片

致力于量化策略开发,高质量社群,交易思路分享等相关内容

一、原理介绍

一、原理介绍

傅里叶分析和滤波

变换和滤波器是用于处理和分析离散数据的工具,常用在信号处理应用和计算数学中。当数据表示为时间或空间的函数时,傅里叶变换会将数据分解为频率分量。fft函数使用快速傅里叶变换算法,相对于其他直接实现,这种方式能够减少计算成本。有关傅里叶分析的更多详细介绍,请参阅傅里叶变换。在使用传递函数修改输入数据的幅值或相位时,conv和filter函数也是很有用的工具。

快速傅里叶变换

语法

Y = fft(X)

Y = fft(X,n)

Y = fft(X,n,dim)

说明

Y= fft(X)用快速傅里叶变换 (FFT) 算法计算 的离散傅里叶变换 (DFT)。

如果X是向量,则fft(X)返回该向量的傅里叶变换。

如果X是矩阵,则fft(X)将X的各列视为向量,并返回每列的傅里叶变换。

如果X是一个多维数组,则ft(X)将沿大小不等于 1 的第一个数组维度的值视为向量,并返回每个向量的傅里叶变换。

Y= fft(X,n)返回n点 DFT。如果未指定任何值,则Y的大小与X相同。

如果X是向量且X的长度小于n,则为X补上尾零以达到长度 。

如果X是向量且X的长度大于n ,则对X进行截断以达到长度 。

如果X是矩阵,则每列的处理与在向量情况下相同。

如果X为多维数组,则大小不等于 1 的第一个数组维度的处理与在向量情况下相同。

Y= fft(X,n,dim)返回沿维度dim的傅里叶变换。例如,如果X是矩阵,则fft(X,n,2)返回每行的 n 点傅里叶变换。

使用傅里叶变换求噪声中隐藏的信号的频率分量。

指定信号的参数,采样频率为 1 kHz,信号持续时间为 1.5 秒。

Fs = 1000; % Sampling frequency
T = 1/Fs; % Sampling period
L = 1500; % Length of signal
t = (0:L-1)*T; % Time vector

构造一个信号,其中包含幅值为 0.7 的 50 Hz 正弦量和幅值为 1 的 120 Hz 正弦量。

S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);

用均值为零、方差为 4 的白噪声扰乱该信号。

X = S + 2*randn(size(t));

在时域中绘制含噪信号。通过查看信号 很难确定频率分量。

X(t)

plot(1000*t(1:50),X(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('t (milliseconds)')
ylabel('X(t)')

打开网易新闻 查看精彩图片

傅里叶变换Python代码

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

二、策略开发

二、策略开发

目前TBQAUNT内置了快速傅里叶变换的函数,可以直接调用。

我们来看一下效果:

打开网易新闻 查看精彩图片

代码示例:

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

红色线为Close,

黄色线为傅里叶过滤后的Close

因为是内置函数,笔者看不到内部写法,就参考了matlab和python的原理,到底是否准确有待商议。我们看到上图中的红色Close线和过滤后的fft黄色线,总感觉和Average函数处理后的均价差别不大,但是我们依然找到它的独特规律将其体现。

步骤1:

设置双数据源,data0和data1,data0为日线周期,data1为5分钟周期

data0:

打开网易新闻 查看精彩图片

data1:

打开网易新闻 查看精彩图片

注意红框内的data0和data1数据的起始时间,大周期数据要包容小周期数据。

步骤2:

防偷价处理,必须向前一根引用历史数据,不然在实盘的时候fft将会飘移,在历史回测里将会使用未来的收盘数据造成假绩效,跨周期模型的开发中一定要注意这个问题!

打开网易新闻 查看精彩图片

代码里y[0]值赋值到序列变量yy,yy向前推一个bar赋值到fft变量。

步骤3:

打开网易新闻 查看精彩图片

1.调用日线计算好的fft值;

2.Ft为fft序列前后值的差值,如下图

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

通过观察副图,绿色柱状与K线图有一个规律就是当趋势出现时,绿色柱子持续放大,震荡时又急速收缩且涨跌不一。

我们利用这个特点来构建交易条件,笔者发现需要将FT进行序列话才能使用,于是:

打开网易新闻 查看精彩图片

每一次日线级别的fft2重新计算的时候,我们将Ft保存到序列变量Fts。

显示如下:

打开网易新闻 查看精彩图片

步骤4:

构建过滤条件

打开网易新闻 查看精彩图片

过滤条件为:

Fts相比上一个Bar放大即为趋势,Fts相比上一个Bar缩小即为震荡;

步骤5:

开仓条件:KG>0 和 高低点区间

平仓条件: VWAP移动出场

三、绩效展示

三、绩效展示

动力煤:

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

苹果:

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

白银:

打开网易新闻 查看精彩图片

焦炭:

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

螺纹:

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

结语:

结语:

傅里叶函数的利用还有很多方法,这一期是初步的尝试。已经打包好相关的源码和工作区,有兴趣的小伙伴可以拿到后自己研究一下,有问题和改进意见可以在群里沟通交流。

打开网易新闻 查看精彩图片

本策略仅作学习交流使用,实盘交易盈亏投资者个人负责。