量化策略系列教程:02双均线策略
小编在这里再一次强调以下哈~各位总是问我这个为什么有的函数没法儿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;tid=49&amp;extra=page%3D1
有不了解的可以给小编留言哦,小编会细心为大家解答~
本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了你的权益请来信告知我们删除。邮箱:dacesmiling@qq.com
上一篇:GAEA:终极战法——双均线策略
下一篇:经典量化策略之一文读懂双均线策略