顶部横幅广告
  • 微信
您当前的位置:首页 > 资讯

量化策略系列教程:02双均线策略

作者:三青 时间:2023-05-10 阅读数:人阅读

 

小编在这里再一次强调以下哈~各位总是问我这个为什么有的函数没法儿run,这个是针对掘金平台写的策略哈,各位一定要在掘金跑哦,安装教程和链接在前文哟~

今天,小编给大家再上一个新策略~也是爱好者们入门必学的哟~

1. 策略原理:

双均线策略:指的是运用两条不同周期的移动平均线,即短周期移动平均线和长周期移动平均线的相对大小,研判买进与卖出时机的策略。当短周期的均线从长期均线的下方,向上穿越至长周期的均线,所形成的交点,称为金叉。当短周期的均线从长期均线的上方,向下穿越至长周期的均线,所形成的交点,称为死叉。当出现金叉点时,市场属于多头市场;当出现死叉点时,市场属于空头市场。

股票:SHSE.600009;

时间:2016/1/1--2017/1/1分频数据;

10周期均线与20日均线的双均线策略;

无持仓时直接按照股票池等权买入;

有持仓时,不在股票池中的股票卖出。

2. 代码解读:

#!/usr/bin/env python # encoding: utf-8 import numpy as np from gmsdk import * from talib import SMA import time class MA(StrategyBase): def __init__(self, *args, **kwargs): super(MA, self).__init__(*args, **kwargs) self.close_list = [] bars = self.get_last_n_bars(SHSE.600009, 60, 20, 2016-01-01 00:00:00) last_closes = [bar.close for bar in bars] # 提取每分钟收盘价 last_closes.reverse() # 查询出的结果为倒序,需反转 self.close_list.extend(last_closes) def on_bar(self, bar): if bar.bar_type == 60: position = self.get_positions() # 获取持仓量 if len(position) == 0: ##如果没有持仓,设self.holding = 0 self.holding = 0 if len(position) > 0: if position[0].available_yesterday > 0: # 如果有昨仓,设self.holding = 1 self.volume = position[0].available_yesterday self.holding = 1 if position[0].available_today > 0: # 如果有今仓,设self.holding = 2 self.holding = 2 self.close_list.append(bar.close) if len(self.close_list) < 20: self.MA10 = self.close_list[:] self.MA20 = self.close_list[:] if len(self.close_list) >= 20: close = np.asarray(self.close_list) self.MA10 = SMA(close, timeperiod=10) # 10周期均线 self.MA20 = SMA(close, timeperiod=20) # 20周期均线 if self.holding == 0: if self.MA10[-1] > self.MA20[-1]: # 10周期均线>20周期均线开仓 self.open_long(SHSE, 600009, 0, 10000) if self.holding == 1: if self.MA10[-1] < self.MA20[-1]: # 10周期均线<20周期均线平仓 self.close_long(SHSE, 600009, 0, self.volume) if self.holding == 2: pass if __name__ == __main__: ma = MA( username=username, # 输入用户名 password=password, # 输入密码 strategy_id=strategy_2, # 输入策略ID subscribe_symbols=SHSE.600009.bar.60, # 输入订阅代码 mode=4, # 选择模式 td_addr=localhost:8001 ) ma.backtest_config( start_time=2016-01-01 09:00:00, # 起始时间 end_time=2017-01-01 09:00:00, # 结束时间 initial_cash=1000000, # 初始金额 transaction_ratio=1, # 成交比率 commission_ratio=0.0000, # 手续费 slippage_ratio=0.000, # 滑点 price_type=1) start = time.time() ret = ma.run() end = time.time() print(end - start)

如果想了解相关的python函数和掘金接口函数,走下方通道:

http://zjshe.cn/q/forum.php?mod=viewthread&amp;amp;tid=49&amp;amp;extra=page%3D1

有不了解的可以给小编留言哦,小编会细心为大家解答~

本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:dacesmiling@qq.com

标签:
微信

三青

当你还撑不起你的梦想时,就要去奋斗。如果缘分安排我们相遇,请不要让她擦肩而过。我们一起奋斗!

微信
阿里云