鼎元C++期货量化/程序化教程【简单移动平均线(Simple Moving Average,sma/average)的计算方法及调用方法】
- UID
- 2
- 积分
- 2874604
- 威望
- 1387331 布
- 龙e币
- 1487273 刀
- 在线时间
- 13155 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-11-24
|
鼎元C++期货量化/程序化教程【简单移动平均线(Simple Moving Average,sma/average)的计算方法及调用方法】
第一步:在test.h中定义这个均线名称,主要有两个名字,一个是计算用的建议用avg(类似MC中的function),另一个是调用的,可以设置为:ma;(类似mc中的var声明变量),在调用中周期的引用,命名 length;
即:- private:
- double avg, ma;
- int length;
复制代码 因为ma计时可能会有小数类的,所以用double类型数值
第二步:在test.cpp设计如何计算均线:(类似mc中的function 中的计算)- double test::avg(string period, string inst, int num)
- {
- double d = 0;
- int n = 0;
- map<string, TKVALUE>::reverse_iterator it;
- for (it = mapK[period][inst].rbegin(); it != mapK[period][inst].rend(); ++it)
- {
- d += it->second.dClose;
- n++;
- if (n >= num)break;
- }
- return d / n;
- }
复制代码 说明:
1、period:在交易软件界面设置的交易周期,并不是均线的周期,比方说60MIN ,即小时线。
2、 inst:具体的合约名称,也就是调用的品种的名称,比方说:rb2501 ,。
3、num:这才是真正的均线周期,类似mc中的avglength类的input参数。
4、计算原理:
(1)先声明两个变量,d 和 n 只在这里面有效与使用。
(2)map的使用,不明白的可以学这个去。
(3)一个for循环,不明白的可以到C++语法里面学习。
(4)it->second.dClose:意为dclose的数值或value。
(5) for会一直的循环,转一轮n会增加一个1,每转一轮d 会自动加一个K线的收盘价,相当于d做了收盘价的加总。直到 n>num,也就是我们设置的均线的周期就停止。
(6)停止后d 就是num周期中均线收盘价的加总,除以num周期就算当根的均线价格了。每走完一根k线,计算一次,得到最新的均线值。
第三步:逻辑运行方式,在test.cpp主程序中- //点击运行按钮动作
- void test::OnRun()
- {
- 在此中处理下方的调用程式码
- }
复制代码 要调用上面的公式。- RsqBar(sPeriod, sInst);
- ma = avg(sPeriod, sInst, jxzq);
复制代码 第一行是请求K线数据,(sPeriod, sInst) 周期与品种。第二步就是计算变量ma的均线值,avg是计算均线的function,(sPeriod是在交易界面设置的K线运行周期, sInst是要使用的具体的期货合约,length就是上面说到的num的具体周期,这个值是在交易界面参数设置里面设置的。
策略参数方面具体参考:http://www.qhlt.cn/thread-158952-1-1.html;)
交易界面设置参考:
|
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|
|
|
|
|
|
- UID
- 2
- 积分
- 2874604
- 威望
- 1387331 布
- 龙e币
- 1487273 刀
- 在线时间
- 13155 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-11-24
|
第四步,还可以在BAR数据中调用即:- void test::OnBarOpen(TKVALUE t)
- {
- mapK[sPeriod][sInst][t.sDate + t.sDayNight + t.sTime] = t;
-
- ma = avg(sPeriod, sInst, length); //调用ma均线
-
- string s2 = " 合约 " + sInst + " 均线 " + to_string(ma); //定义字符串
-
- InsertLog(s2);//每个有新的bar产生,就会在log中输出
复制代码 |
|
|
|
|
|
|
- UID
- 2
- 积分
- 2874604
- 威望
- 1387331 布
- 龙e币
- 1487273 刀
- 在线时间
- 13155 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-11-24
|
通过上面的两种方式都可以得到均线的数值,然后在tick或bar数据中使用就可以了。 |
|
|
|
|
|
|