在阔别七年的又一轮牛市里,炒股已经成为人们每天讨论的话题.
小老弟一直以为:"侠之大者,一起赚钱,一起嗨". 故借宝地献出珍藏多年的交易秘籍.
首先讲述一下策略思路:
标的: 流通性较好,深受大妈喜爱的沪深300成分股, 乃策略标的最佳选择.
买卖点: 追涨杀跌是本策略的核心思路. 在股价,成交量向上突破最近20日最高价格(量)时买入. 在股价向下突破最近10日最低价格卖出.
头寸规模:每只股票最多占1/10仓位.
话不多说, 上代码:
1
from datetime import datetime
查看全部1
start = datetime(2013, 1, 1)
2
end = datetime(2015, 5, 25)
3
benchmark = 'HS300'
4
universe = set_universe('HS300')
5
capital_base = 100000
6
7
pos_pieces = 10
8
enter_window = 20
9
exit_window = 10
10
11
def initialize(account):
12
pass
13
14
def handle_data(account):
15
highest_price = account.get_attribute_history('highPrice', enter_window)
16
lowest_price = account.get_attribute_history('lowPrice', exit_window)
17
close_price = account.get_attribute_history('closePrice', exit_window)
18
turnover_vol = account.get_attribute_history('turnoverVol', enter_window)
19
for stock in account.universe:
20
cnt_price = close_price[stock][-1] #account.referencePrice[stock]
21
cnt_turnover = turnover_vol[stock][-1]
22
if cnt_price > highest_price[stock][:-1].max() and cnt_turnover > turnover_vol[stock][:-1].max() and account.position.secpos.get(stock, 0)==0:
23
order(stock, capital_base/pos_pieces/cnt_price)
24
elif cnt_price < lowest_price[stock][:-1].min():
25
order_to(stock, 0)
查看全部年化收益率56.1%
基准年化收益率33.3%
阿尔法26.7%
贝塔0.87
夏普比率1.89
收益波动率27.8%
信息比率0.85
最大回撤25.5%
换手率14.98
累计收益率策略基准2013-052013-092014-012014-052014-092015-012015-05-50.00%0.00%50.00%100.00%150.00%200.00%
也许已经有人发现, 其实这就是海龟交易系统.
海龟交易系统是一个完整的交易系统,它有一个完整的交易系统所应该有的所有成分,涵盖了成功交易中的每一个必要决策:
市场:买卖什么?
头寸规模:买卖多少?
入市:什么时候买卖?
止损:什么时候放弃一个亏损的头寸?
退出:什么时候退出一个盈利的头寸?
战术:怎么买卖?
在上面的策略中, 每只股票的头寸规模为1/10的初始资金. <<海龟交易法则>>介绍了一种头寸规模控制方法, 将头寸分为一个个单位, 下面的策略将展示将头寸分为N个单位, 每次产生买入信号时, 仅买入一个单位.
1
start = datetime(2013, 1, 1)
2
end = datetime(2015, 5, 25)
3
benchmark = 'HS300'
4
universe = set_universe('HS300')
5
capital_base = 100000
6
7
pos_pieces = 10
8
enter_window = 20
9
exit_window = 10
10
N = 4
11
12
def initialize(account):
13
account.postion_size_hold = {}
14
for stk in universe:
15
account.postion_size_hold[stk] = 0
16
17
def handle_data(account):
18
highest_price = account.get_attribute_history('highPrice', enter_window)
19
lowest_price = account.get_attribute_history('lowPrice', exit_window)
20
close_price = account.get_attribute_history('closePrice', exit_window)
21
turnover_vol = account.get_attribute_history('turnoverVol', enter_window)
22
for stock in account.universe:
23
cnt_price = close_price[stock][-1] #account.referencePrice[stock]
24
cnt_turnover = turnover_vol[stock][-1]
25
if cnt_price > highest_price[stock][:-1].max() and cnt_turnover > turnover_vol[stock][:-1].max() and account.postion_size_hold[stock]<N:
26
order(stock, capital_base/pos_pieces/cnt_price/N)
27
account.postion_size_hold[stock] += 1
28
elif cnt_price < lowest_price[stock][:-1].min():
29
order_to(stock, 0)
30
account.postion_size_hold[stock] = 0
查看全部年化收益率68.7%
基准年化收益率33.3%
阿尔法41.9%
贝塔0.78
夏普比率2.77
收益波动率23.4%
信息比率1.44
最大回撤19.3%
换手率12.35
累计收益率策略基准2013-052013-092014-012014-052014-092015-012015-05-50.00%0.00%50.00%100.00%150.00%200.00%250.00%
我们发现回撤和波动率有所下降,而收益率竟然上升了. 其实原因很简单, 分N次买入时, 如果信号正确, 可能会提高一定的持仓成本,降低收益率; 反之如果信号有误, 也能够快速止损, 减少回撤. 也就是说, 头寸规模有效的控制了风险.
以上两个策略属于唐安奇趋势系统, 结束之前, 再介绍一下布林格突破系统.
布林线定义: 布林线是通过350日平均收盘加减2.5倍标准差得到的。
布林线方法:
如果前一日的收盘价穿越了通道的顶部,则开盘做多
如果前一日的收盘价跌破了通道的底部,则开盘做空
在我们的这个股票策略里,我们以60日平均收盘加减2.5倍标准差作为波幅通道.
1
import numpy as np
2
start = datetime(2013, 1, 1)
3
end = datetime(2015, 5, 25)
4
benchmark = 'HS300'
5
universe = set_universe('HS300')
6
capital_base = 100000
7
longest_history = 60
8
9
pos_pieces = 10
10
enter_window = 20
11
exit_window = 10
12
N = 4
13
14
def initialize(account):
15
account.postion_size_hold = {}
16
for stk in universe:
17
account.postion_size_hold[stk] = 0
18
19
def handle_data(account):
20
close_prices = account.get_attribute_history('closePrice', longest_history)
21
for stock in account.universe:
22
cnt_price = close_prices[stock][-1] #account.referencePrice[stock]
23
mean_cp = close_prices[stock].mean()
24
bias = 2.5*np.std(close_prices[stock])
25
high_channel = mean_cp + bias
26
low_channel = mean_cp - bias
27
if cnt_price >= high_channel and account.postion_size_hold[stock]<N:
28
if cnt_price:
29
order(stock, capital_base/pos_pieces/cnt_price/N)
30
account.postion_size_hold[stock] += 1
31
elif cnt_price <= low_channel:
32
order_to(stock, 0)
33
account.postion_size_hold[stock] = 0
查看全部年化收益率104.7%
基准年化收益率41.9%
阿尔法69.6%
贝塔0.82
夏普比率3.50
收益波动率28.9%
信息比率1.68
最大回撤24.7%
换手率0.85
累计收益率