公众号致力于分享量化策略,培训视频,Python,程序化交易等相关内容如果你喜欢本文,麻烦分享与关注一下公众号非常感谢!
『正文』
ˇ
一、原理介绍
变换和滤波器是用于处理和分析离散数据的工具,常用在信号处理应用和计算数学中。当数据表示为时间或空间的函数时,傅里叶变换会将数据分解为频率分量。fft 函数使用快速傅里叶变换算法,相对于其他直接实现,这种方式能够减少计算成本。有关傅里叶分析的更多详细介绍,请参阅傅里叶变换。在使用传递函数修改输入数据的幅值或相位时,conv 和 filter 函数也是很有用的工具。
快速傅里叶变换
Y = fft(X)
Y = fft(X,n)
Y = fft(X,n,dim)
示例
Y = fft(X) 用快速傅里叶变换 (FFT) 算法计算 X 的离散傅里叶变换 (DFT)。
如果 X 是向量,则 fft(X) 返回该向量的傅里叶变换。
如果 X 是矩阵,则 fft(X) 将 X 的各列视为向量,并返回每列的傅里叶变换。
如果 X 是一个多维数组,则 fft(X) 将沿大小不等于 1 的第一个数组维度的值视为向量,并返回每个向量的傅里叶变换。
示例
Y = fft(X,n) 返回 n 点 DFT。如果未指定任何值,则 Y 的大小与 X 相同。
如果 X 是向量且 X 的长度小于 n,则为 X 补上尾零以达到长度 n。
如果 X 是向量且 X 的长度大于 n,则对 X 进行截断以达到长度 n。
如果 X 是矩阵,则每列的处理与在向量情况下相同。
如果 X 为多维数组,则大小不等于 1 的第一个数组维度的处理与在向量情况下相同。
示例
Y = fft(X,n,dim) 返回沿维度 dim 的傅里叶变换。例如,如果 X 是矩阵,则 fft(X,n,2) 返回每行的 n 点傅里叶变换。
使用傅里叶变换求噪声中隐藏的信号的频率分量。
指定信号的参数,采样频率为 1 kHz,信号持续时间为 1.5 秒。
Fs = 1000; % Sampling frequency构造一个信号,其中包含幅值为 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))傅里叶变换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:
开仓条件:KG>0 和 高低点区间
平仓条件: VWAP移动出场
苹果:
白银:
焦炭:
螺纹:
结语:
傅里叶函数的利用还有很多方法,这一期是初步的尝试。已经打包好相关的源码和工作区,有兴趣的小伙伴可以拿到后自己研究一下,有问题和改进意见可以在群里沟通交流。
(天勤Python,实盘免费)
End
源码领取
长按下方二维码
对话框回复 FFT 咨询源码获得
(俱乐部加入→回复VIP)
----------------往期精彩内容----------------
算法策略专辑:
量化视频专辑:
量化研究专栏:
祝点击在看的小伙伴,2020发大财