全部版块 我的主页
论坛 金融投资论坛 六区 金融学(理论版) 量化投资
2172 1
2017-06-15

阅读原文:http://suo.im/181JOb


相当于加了一个开关,站在40日均线上,就执行羊驼策略,否则,就空仓。

源码:

import random

import numpy as np

import pandas as pd

from pandas import Series,DataFrame

import scipy.stats as stats

import math

# 设置股票池,本程序中为所有沪深300的股票

stocks = get_index_stocks('000300.XSHG')

#求出股票池中有多少股票

num=len(stocks)

set_universe(stocks)

#设置benchmark,默认为沪深300

#set_benchmark('510050.XSHG')

#设置回测条件

set_commission(PerTrade(buy_cost=0.0008, sell_cost=0.0015, min_cost=5))

set_slippage(FixedSlippage(0))

#设置初始买入多少只股票

num_of_stocks=10

#设置每次更新时替换多少只股票

num_of_change=3

#设置计算几日收益率

period=2

#用一个列表来保存每天持有的股票代码

stockshold=[]

#判断参数输入是否符合条件,如果不符合,则重置为默认值

if num_of_stocks>num:

log.info('too large num_of_stocks')

num_of_stocks=10

elif num_of_change>num_of_stocks:

log.info('too large num_of_change')

num_of_change=1

num_MA=40

security = '000300.XSHG'

#预处理数据,将没有数据的股票剔除,同时加入收益率

#构成一个列索引为股票名,收益率一行的索引为

#'return'的dataframe,并返回这个dataframe

def process():

#取出每只股票period天的收盘价格

stocks_info=history(period,'1d','close')

#去除信息不全的数据

stocks_info.dropna(axis=0,how='any',thresh=None)

#取出昨天和period天之前的收盘价,计算收益率

a1=list(stocks_info.iloc[0])

a2=list(stocks_info.iloc[period-1])

a1=np.array(a1)

a2=np.array(a2)

#用一个dataframe来保存所有股票的收益率信息

stocks_return=DataFrame(a2/a1,columns=['return'],index=stocks_info.columns)

stocks_info=stocks_info.T

#把收益率的数据加到相应的列

stocks_info=pd.concat([stocks_info,stocks_return],axis=1)

#将股票信息按照收益率从大到小来存储

stocks_info=stocks_info.sort(columns=['return'],ascending=[False])

#返回处理好的dataframe

return stocks_info#股票入池

def BuyStocks(stocks_info,cash):

#计算现在持有的股票数

current_num=len(stockshold)

stocks_info=stocks_info.T

#将已持有的股票从股票池中剔除

for i in range(0,current_num):

if stockshold in stocks_info.columns:

del stocks_info[stockshold]

stocks_info=stocks_info.T

#计算在每只股票上可以支付的现金

cash=cash/num_of_stocks-current_num

for i in range(0,num_of_stocks-current_num):

#取得股票当前的价格

current_price=stocks_info['current_price']

#判断是否有价格数据

if math.isnan(current_price)==False:

#计算可以每只股票可以购买的数量

num_of_shares=int(cash/current_price)

if num_of_shares>0:

order(stocks_info.index,+num_of_shares)

log.info('buying %s' %(stocks_info.index))

#将购买的股票代码加到stockhold中

stockshold.append(stocks_info.index)

#股票出池

见原文

阅读原文:http://suo.im/181JOb


二维码

扫码加我 拉你入群

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

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

全部回复
2017-6-18 21:42:29
学习一下。
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群