龙听期货论坛's Archiver

龙听 发表于 2024-11-20 10:33

波动率(Volatility)相关的程序化策略研究与源码

一、什么是波动率(Volatility)?

通过内外网搜集与整理,我们可以发现对于波动率有两种计算方式,一是atr计算方法。二是标准差计算方式。波动率做为一种计算证券期货价格无效波动幅度的指标多用到进场与出场模块中,也就是在进场和出场时设定一个免疫的波动幅度,在此波动幅度内是不进场或出场的。

二、波动率出场使用范例:

1、第280节:ATR出场法则之波动率出场法({atr volatility stop/exit model})设计和编写范例:[url]http://www.qhlt.cn/thread-126919-1-1.html[/url];
2、第342节:经典策略范例利用"归一化ATR指标(NVI)和一个恒定的阈值确定趋势"设计进出量化策略程式码、进行展示效果及进行初步回测:[url]https://www.qhlt.cn/thread-152192-1-1.html[/url];
3、[技术分析] 使用隐含波动率和成交量(Using Implied Volatility And Volume)【2003.06期】(含TS程式码)[url]http://www.qhlt.cn/thread-137319-1-18.html[/url];
4、[MC源码] Volatility 波動率指標:[url]http://www.qhlt.cn/thread-98450-1-1.html[/url];
5、第158节:利用市场波动率(Volatility)设计交易系统程式策略源码及回测效果:[url]http://www.qhlt.cn/thread-105400-1-1.html[/url];
6、期货量化策略精选系列20-The Volatility Band Strategy【TVBS通道交易策略】:[url]http://www.qhlt.cn/thread-115006-1-1.html[/url];
7、设计波动性突破系统(Designing Volatility Breakout Systems )【原文+程式码】:[url]http://www.qhlt.cn/thread-135440-1-1.html[/url];
8、[策略开发] 设计波动性突破系统(Designing Volatility Breakout Systems )【2002.10期】(含TS程式码):[url]http://www.qhlt.cn/thread-135321-1-1.html[/url];
9、第141节:资金管理系列之五:波动百分比做一手模型(Percent Volatility Model)及实例演示:[url]http://www.qhlt.cn/thread-102938-1-1.html[/url];

三、我也找到一个计算波动率的方法:

1、计算历史波动率(CALCULATING HISTORICAL VOLATILITY)【1996.08期】:[url]http://www.qhlt.cn/thread-125055-1-1.html[/url];

总结一下就是波动率有很多种方法可以进行计算和使用,功能几乎是大同小异的。

龙听 发表于 2024-11-22 14:22

计算历史波动率(calculating historical volatility)

1、头文件声明变量:[code]        double Volatility(string period, string inst, int num);//计算历史波动率(CALCULATING HISTORICAL VOLATILITY)[/code]2、公式模块增加计算公式:[code]//计算历史波动率(calculating historical volatility)
double test::Volatility(string period, string inst, int num)
{
        double dPreClose = 0;
        int n = 0;
        double sumatr = 0;
        double xatr = 0;
        vector<double>vAtr;
        if (mapK[period][inst].size() < num) return 0;
        map<string, TKVALUE >::iterator it;
        for (it = mapK[period][inst].begin(); it != mapK[period][inst].end(); ++it)
        {

                if (dPreClose != 0)
                {
                        double d = it->second.dHigh - it->second.dLow;
                        double dHC = abs(it->second.dHigh - dPreClose);
                        double dLC = abs(it->second.dLow - dPreClose);
                        double e = max3(d, dHC, dLC);
                        vAtr.push_back(e); //获得每一个bar对应的truerange
                }
                dPreClose = it->second.dClose;
        }
        for (int it = 0; it < vAtr.size(); ++it)
        {
                if (it < num) xatr = 0;
                if (it > num)
                {
                        xatr = (2 * vAtr[num - 1] + (double(num) - 1) * xatr) / (double(num) + 1);
                }
        }
        return xatr;
}[/code]3、调用方法:[code]Volatility(sPeriod, sInst, length);//计算length周期的历史波动率[/code]

页: [1]