楼主: _wallstreetcat_
929 1

[交易策略] 如何用双均线来研究数字货币 [推广有奖]

  • 0关注
  • 36粉丝

已卖:114份资源

讲师

9%

还不是VIP/贵宾

-

威望
0
论坛币
88 个
通用积分
41.5574
学术水平
14 点
热心指数
13 点
信用等级
13 点
经验
6402 点
帖子
257
精华
0
在线时间
235 小时
注册时间
2017-3-16
最后登录
2024-10-20

楼主
_wallstreetcat_ 企业认证  发表于 2021-12-8 16:58:53 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
策略背景国际研究情况Ng and Wing-Kam(2008) 对MACD和RSI两个指标的盈利性进行了实证检验,文中采用FT-30为研究对象,样本跨期为60年。检验结果发现,单纯的MACD和RSI交易策略都能够获得远高于买入并持有交易策略的收益。Shik TC(2007)以外汇市场六国主要货币为对象对相对强弱指标RSI和移动平均线MA两者的盈利性进行了实证研究,研究结果显示,两个指标下的交易策略能产生高于风险补偿的收益。
国内研究情况Zhou and zhu(2010)在《技术分析:从资产配置的角度看移动平均线的使用》一文中,作者从理论上分析了在资产配置问题中使用技术分析的基本原理,也就是一个投资者怎样将自己的财富在风险资产和无风险资产之间达到最优分配。作者在分析从量化的角度解决了对于对数效用的投资者精确最优配置量的问题时,也分析了股价可预测性程度是如何影响配置决策的。结果表明移动平均线能很明显地提高投资者的效用。
策略介绍今天,我们尝试在数字货币量化交易上运用最简单的均线策略,交易标的是'BTC_USDT.HBI'。
策略原理双均线策略:指的是运用两条不同周期的移动平均线,即短周期移动平均线和长周期移动平均线的相对大小,研判买进与卖出时机的策略。当短周期的均线从长期均线的下方,向上穿越至长周期的均线,所形成的交点,称为金叉。当短周期的均线从长期均线的上方,向下穿越至长周期的均线,所形成的交点,称为死叉。当出现金叉点时,市场属于多头市场;当出现死叉点时,市场属于空头市场。
数字货币标的:BTC_USDT.HBI;
时间:2017/11/1--2018/4/1日线数据;
5周期均线与20日均线的双均线策略;
策略逻辑空仓状态下,短周期均线上穿(大于)长周期均线形成金叉,且该数字货币可以交易,满仓买入持仓状态下,短周期均线下穿(小于)长周期均线形成死叉,且该数字货币可以交易,满仓卖出
策略实现
  • 首先,我们选择要交易的标的以及设置一下基本参数,这里选择的是'BTC_USDT.HBI'。
  • 然后,编写策略初始化部分,initialize函数只会运行一次,在第一个日期运行,因此可以把策略一些参数放在该函数定义。
  • 下面是策略交易逻辑,handle_data函数会每个周期(日/分)运行一次,可以把行情数据理解成K线,然后handle_data函数会在每个K线上依次运行。
  • 最后启动回测,编写策略回测接口。

策略案例
  1. # 回测起始时间
  2. start_date = '2017-11-01'
  3. # 回测结束时间
  4. end_date = '2018-04-01'
  5. # 策略比较参考标准
  6. benchmark = 'BTC_USDT.HBI'
  7. # 交易标的
  8. instruments = ['BTC_USDT.HBI']
  9. # 起始资金
  10. capital_base = 1000000
复制代码
  1. # 初始化虚拟账户状态,只在第一个交易日运行
  2. def initialize(context):
  3.     # context.set_commission是设置手续费,这里作演示不考虑手续费,股票的手续费设置如下,作为参考。
  4.     # context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))
  5.     #短均线参数
  6.     context.short_period = 5
  7.     #长均线参数
  8.     context.long_period = 20
复制代码
  1. def handle_data(context, data):
  2.     # 当前支持的K线数量还达不到长均线时直接返回
  3.     if context.trading_day_index < context.long_period:
  4.         return
  5.     # 投资标的字符串格式
  6.     instr = instruments[0]
  7.     # 将标的转化为equity格式
  8.     sid = context.symbol(instr)   
  9.     # 最新价格
  10.     price = data.current(sid, 'price')
  11.     # 短周期均线值
  12.     short_mavg = data.history(sid, 'price', context.short_period, '1d').mean()
  13.     # 长周期均线值
  14.     long_mavg = data.history(sid, 'price', context.long_period, '1d').mean()
  15.     # 账户资金
  16.     cash = context.portfolio.cash;
  17.     # 账户持仓
  18.     cur_pos = context.portfolio.positions[sid].amount
  19.    
  20.     # 策略逻辑部分
  21.     # 空仓状态下,短周期均线上穿(大于)长周期均线形成金叉,且该股票可以交易,买入
  22.     # 持仓状态下,短周期均线下穿(小于)长周期均线形成死叉,且该股票可以交易,卖出
  23.     if (short_mavg > long_mavg and cur_pos == 0 and data.can_trade(sid)):
  24.         context.order_target_percent(sid,1)
  25.     elif (short_mavg < long_mavg and cur_pos > 0 and data.can_trade(sid)):
  26.         context.order_target_percent(sid, 0)
复制代码
  1. # history_ds=DataSource('bar1d_HBI').read(instruments,start='2017-05-01', end=end_date)
  2. # benchmark_ds = DataSource('bar1d_HBI').read([benchmark],start='2017-05-01', end=end_date)

  3. m = M.trade.v4(
  4.     instruments=instruments,
  5.     start_date=start_date,
  6.     end_date=end_date,
  7.     initialize=initialize,
  8.     handle_data=handle_data,
  9.     # 买入的时候,假设以次日开盘价成交
  10.     order_price_field_buy='open',
  11.     # 卖出的时候,假设以次日开盘价成交
  12.     order_price_field_sell='close',
  13.     capital_base=capital_base+1,
  14. )
复制代码



二维码

扫码加我 拉你入群

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

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

关键词:数字货币 双均线 如何用 Instruments Instrument

沙发
adair.able 发表于 2021-12-15 14:45:58
写了个寂寞

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

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2025-12-21 20:58