楼主: _wallstreetcat_
1122 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-11-15 14:40:34 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
导语本文向大家详细介绍如何在BigQuant平台开发传统的择时策略,旨在帮助大家对BigQuant平台回测有初步印象。
金叉死叉策略思想金叉死叉策略其实就是双均线策略。策略思想是:当短期均线上穿长期均线时,形成金叉,此时买入股票。当短期均线下穿长期均线时,形成死叉,此时卖出股票。研究表明,双均线系统虽然简单,但只要严格执行,也能长期盈利。
金叉死叉策略实现选择股票池首先,我们选择要交易的股票,用instruments表示,然后确定回测的开始时间和结束时间。记住,如果是单只股票,那么instruments就是含有一个元素的列表,如果是多只股票,instruments就是含有多个元素的列表。
  1. # 选择投资标的
  2. instruments = ['600519.SHA']  
  3. # 设置回测开始时间
  4. start_date = '2012-05-28'  
  5. # 设置回测结束时间
  6. end_date = '2017-07-18'
复制代码
策略初始化然后,编写策略初始化部分。
  1. # initialize函数只会运行一次,在第一个日期运行,因此可以把策略一些参数放在该函数定义
  2. def initialize(context):
  3.     # 设置手续费,买入时万3,卖出是千分之1.3,不足5元以五元计
  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 = 50
复制代码
策略主要逻辑接着,编写策略主体部分
  1. # handle_data函数会每个日期运行一次,可以把行情数据理解成K线,然后handle_data函数会在每个K
  2. #  线上依次运行
  3. def handle_data(context, data):
  4.     # 当运行的K线数量还达不到长均线时直接返回
  5.     if context.trading_day_index <  context.long_period:
  6.         return   
  7.     # 投资标的
  8.     k = instruments[0]
  9.     sid = context.symbol(k)
  10.     # 最新价格
  11.     price = data.current(sid, 'price')  
  12.     # 短周期均线值
  13.     short_mavg = data.history(sid, 'price',context.short_period, '1d').mean()  
  14.     # 长周期均线值
  15.     long_mavg = data.history(sid, 'price',context.long_period, '1d').mean()   
  16.     # 账户现金  
  17.     cash = context.portfolio.cash  
  18.     # 账户持仓
  19.     cur_position = context.portfolio.positions[sid].amount

  20.     # 策略逻辑部分
  21.     # 空仓状态下,短周期均线上穿长周期均线,买入股票
  22.     if short_mavg > long_mavg and cur_position == 0  and data.can_trade(sid):  
  23.         context.order(sid, int(cash/price/100)*100)
  24.     # 持仓状态下,短周期均线下穿长周期均线,卖出股票
  25.     elif short_mavg < long_mavg  and cur_position > 0 and   data.can_trade(sid):  
  26.         context.order_target_percent(sid, 0)
复制代码

最后,编写策略回测接口。

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

如果执行代码,策略就跑起来了,测试结果很快就显示在你的眼前了。



二维码

扫码加我 拉你入群

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

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

关键词:Instruments Instrument Commission position Context

沙发
三重虫 发表于 2022-1-3 11:18:19

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

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2026-1-25 11:25