楼主: 唉人好累66
1797 4

[原创博文] 【干货分享】从零开始学量化:17RSI策略 [推广有奖]

  • 0关注
  • 41粉丝

讲师

55%

还不是VIP/贵宾

-

威望
1
论坛币
1457 个
通用积分
5.0477
学术水平
11 点
热心指数
14 点
信用等级
11 点
经验
3660 点
帖子
214
精华
0
在线时间
119 小时
注册时间
2016-9-24
最后登录
2020-4-8

楼主
唉人好累66 发表于 2017-8-3 09:20:06 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
1.策略原理及逻辑
    1.1策略原理
       相对强弱指数(RSI)是通过比较一段时期内的平均收盘涨数和平均收盘跌数来分析市场买沽盘的意向和实力,从而作出未来市场的走势。
   RSI在1978年6月由Wells Wider创制的一种通过特定时期内股价的变动情况计算市场买卖力量对比,来判断股票价格内部本质强弱、推测价格未来的变动方向的技术指标。发表在美国Commodities杂志中(现为Future杂志),并收录于同年推出的New Concepts in Technical Trading Systems书中。相比起其他分析工具,RSI是其中一种较容易向大众传译的计量工具,故一推出便大受欢迎。
RSI计算公式和方法
  RSI=[上升平均数÷(上升平均数+下跌平均数)]×100
  具体方法:
  上升平均数是在某一段日子里升幅数的平均而下跌平均数则是在同一段日子里跌幅数的平均。例如我们要计算九日RSI,首先就要找出前九日内的上升平均数及下跌平均数,举例子如下:
  日数收市价升跌
  第一天23.70
  第二天27.90 \ 4.20
  第三天26.50 \ 1.40
  第四天29.60 \ 3.10
  第五天31.10 \ 1.50
  第六天29.40 \ 1.70
  第七天25.50 \ 3.90
  第八天28.90 \ 3.40
  第九天20.50 \ 8.40
  第十天23.20 \ 2.80
  (1-10天之和)+15.00+15.40
(9天内)上升平均值:15÷9=1.67 (9天内)下跌平均值:15.40÷9=1.71
  第十天上升平均数=(4.20+3.10+1.50+3.40+2.80)/9=1.67
  第十天下降平均数=(1.40+1.70+3.90+8.40)/9=1.71
  第十天RSI=[1.67÷(1.67+1.71)]×100=49.41
  如果第十一天收市价为25.30,则
  第十一天上升平均数=(1.67×8+2.10)÷9=1.72
  第十一天下跌平均数=1.71×8÷9=1.52
  第十一天RSI=[1.72÷(1.72+1.52)]×100=53.09
  据此可计算以后几天的RSI。同样,按此方法可计算其他任何日数的RSI。至于用多少日的RSI才合适。最初RSI指标提出来时是用14天,14天作为参数则成为默定值。但在实际操作中,分析者常觉得14天太长了一点,才有5天和9天之方法。
   1.2策略逻辑:
RSI指标的买卖时机:
  • 当数值运行在80以上时我们称为超买,此时一般卖出。
  • 当数值运行在20以下时我们称为超卖,此时一般买入。
2.策略代码
   2.1配置文件【rsi_stock.ini】(提示ini配置文件,需要保存成UTF8格式)

  1. [strategy]
  2. username=
  3. password=
  4. ;回测模式
  5. mode=4
  6. td_addr=localhost:8001
  7. strategy_id=
  8. ;订阅代码注意及时更新
  9. subscribe_symbols=

  10. [backtest]
  11. start_time=2014-03-01 09:00:00
  12. end_time=2016-03-18 15:00:00

  13. ;策略初始资金
  14. initial_cash=1000000

  15. ;委托量成交比率,默认=1(每个委托100%成交)
  16. transaction_ratio=1

  17. ;手续费率,默认=0(不计算手续费)
  18. commission_ratio=0.0003

  19. ;滑点比率,默认=0(无滑点)
  20. slippage_ratio=0

  21. ;行情复权模式,0=不复权,1=前复权
  22. price_type=1

  23. ;基准
  24. bench_symbol=SHSE.000903

  25. [para]
  26. ;数据订阅周期
  27. bar_type=86400

  28. ;rsi指标参数
  29. rsi_period=14

  30. ;rsi指标超买、超卖参数
  31. over_buy=85
  32. over_sell=25

  33. #止盈止损
  34. ;是否固定止盈止损
  35. is_fixation_stop=0
  36. ;是否移动止盈
  37. is_movement_stop=1

  38. ;移动盈利开始比率及固定盈利比率
  39. stop_fixation_profit=0.35
  40. ;亏损比率
  41. stop_fixation_loss=0.068

  42. ;移动止盈比率
  43. stop_movement_profit=0.068

  44. ;开仓量
  45. open_vol=200

  46. ;累计开仓距离当前的最大交易日
  47. ;若开仓距今超过这个日期,则认为未开过仓
  48. open_max_days=22

  49. ;历史数据长度
  50. hist_size=18

  51. ;开仓量
  52. ;open_vol=2000

  53. ##############################################################
  54. # logger settings
  55. ##############################################################
  56. [loggers]
  57. keys=root

  58. [logger_root]
  59. level=INFO
  60. handlers=console,file

  61. [handlers]
  62. keys=console,file

  63. [handler_file]
  64. class=handlers.RotatingFileHandler
  65. args=('rsi_stock.log','a',1000,5)
  66. formatter=simple

  67. [handler_console]
  68. class=StreamHandler
  69. args = (sys.stdout,)
  70. formatter=simple

  71. [formatters]
  72. keys = simple

  73. [formatter_simple]
  74. format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
  75. datefmt=
复制代码
  2.2策略文件【rsi_stock.py】(代码过大无法上传,详细代码见证经社——                       http://zjshe.cn/q/forum.php?mod=viewthread&tid=85&extra=page%3D1)
3.代码涉及的函数代码
    3.1 python函数及package

功能函数原型参数返回值
参数名含义
sys提供了一系列有关Python运行环境的变量和函数。



sys.argv[0]当前程序名
sys.argv获取当前正在执行的命令行参数的参数列表(list)。sys.argvsys.argv[1]第一个参数
sys.argv[2]第二个参数
arrow标准的时间日期库。
ta-lib被广泛应用的金融市场数据分析的库
pandasPython Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的
numpy一套用于支持科学计算的python第三方库
time返回当前时间的时间戳time.time()

返回当前时间的时间戳
len返回对象(字符、列表、元组等)长度或项目个数。len(s)s对象返回对象长度。
append用于在列表末尾添加新的对象。list.append(obj)obj添加到列表末尾的对象。该方法无返回值,但是会修改原来的列表。

3.2掘金接口函数

功能函数原型参数
参数名类型说明
on_bar响应Bar事件,收到Bar数据后本函数被调用。on_bar(bar)barbarbar数据
open_long异步开多仓,以参数指定的symbol、价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口open_long(exchange, sec_id, price, volume)exchangestring交易所代码, 如上交所SHSE
sec_idstring证券代码,如浦发银行600000
pricefloat委托价,如果price=0,为市价单,否则为限价单
volumefloat委托量
close_long异步平多仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口。close_long(exchange, sec_id, price, volume)exchangestring交易所代码, 如上交所SHSE
sec_idstring证券代码,如浦发银行600000
pricefloat委托价,如果price=0,为市价单,否则为限价单
volumefloat平仓量
open_short异步开空仓,以参数指定的symbol、价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口open_short(exchange, sec_id, price, volume)exchangestring交易所代码, 如上交所SHSE
sec_idstring证券代码,如浦发银行600000
pricefloat委托价,如果price=0,为市价单,否则为限价单
volumefloat委托量
close_short异步平空仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口。close_long(exchange, sec_id, price, volume)exchangestring交易所代码, 如上交所SHSE
sec_idstring证券代码,如浦发银行600000
pricefloat委托价,如果price=0,为市价单,否则为限价单
volumefloat平仓量
get_last_n_dailybars提取单个代码的最新n条DailyBar数据, 策略类和行情服务类都提供该接口。get_last_n_dailybars(symbol, n, end_time='')symbolstring证券代码, 带交易所代码以确保唯一,如SHSE.600000
nint提取的数据条数
end_timestring指定截止时间, 如2015-10-30 15:00:00
get_dailybars提取指定时间段的历史Bar数据,支持单个代码提取或多个代码组合提取。策略类和行情服务类都提供该接口。get_dailybars(symbol_list, begin_time, end_time)symbol_liststring证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
begin_timestring开始日期, 如2015-10-19
end_timestring结束日期, 如2015-10-30
get_position查询当前策略指定symbol(由交易所代码和证券ID组成)和买卖方向的持仓信息。策略类和交易服务类都提供该接口。get_position(exchange, sec_id, side);exchangestring交易所代码
sec_idstring证券代码
sideint买卖方向





二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


已有 1 人评分经验 收起 理由
残阳_等待 + 60 精彩帖子

总评分: 经验 + 60   查看全部评分

沙发
唉人好累66 发表于 2017-8-6 20:02:59
顶顶顶~好贴莫沉

藤椅
“麟小鳗。 发表于 2017-8-28 11:54:48
学习了 ,最近正在找寻相关的

板凳
reyahehe 发表于 2017-8-30 06:13:11 来自手机
学习了 谢谢分享

报纸
tianwk 发表于 2021-2-22 23:57:05

thanks for sharing

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-13 09:40