量化投资的线性回归

来源:互联网 发布:db2导入数据库命令 编辑:程序博客网 时间:2024/06/09 16:42

多元线性回归
预测平安银行的股价利润

欢迎访问: https://github.com/cuixuage/Machine_Learning

#coding=utf-8import numpy as nyimport pandas as pdimport matplotlib as mpimport scipy as spimport sklearn as sl# 本金10万元  初始股票价格9.22元  买入100000/9.22=10846支股票## 注意:   由于计算过程中没有考虑复利情况(不考虑由于获得利润或者亏本的情况下导致的股票动态增加、减少)#   故此假设在后续计算利润中均按照10846支股票进行计算利润和N = 100000/9.22;data = pd.read_table('D:\\Pycharm\\projects\\test\\datafromSZ0001_day.txt')feature_cols = ['BOLL', 'UPR', 'DWN']X = data[['BOLL', 'UPR', 'DWN']]y = data['CLOSE']y = data.CLOSEy_CLOSE = pd.Series.as_matrix(y)# print type(y_CLOSE),len(y_CLOSE)# print y_CLOSEaverage_close=[]   ################close_price  averagefor i in range(0,len(y_CLOSE)-1):   temp = 0   if i<len(y_CLOSE)-7:      for j in range(0,7):         temp += y_CLOSE[i+j]      average_close.append(temp/8)   else:      for j in range(0,i-(len(y_CLOSE)-7)-3):         temp += y_CLOSE[i+j]         average_close.append(temp/(i-(len(y_CLOSE)-7)-3))# print average_close# print type(average_close),len(average_close)def rule_1(week_idx):   "time: week_idx  : average down and close_price > averge"   if((average_close[week_idx] > average_close[week_idx-1]) \              and (y_CLOSE[week_idx]>=average_close[week_idx])):      return 1   else:      return 0def rule_2(week_idx):   "time: week_idx  : close-price < averge and average up"   if((y_CLOSE[week_idx]<=average_close[week_idx]) \              and(average_close[week_idx]>average_close[week_idx-1])):       return 1   else:       return 0def rule_3(week_idx):    "time: week_idx: average >> close"    if(average_close[week_idx] > y_CLOSE[week_idx]*1.2):        return 1    else:        return 0def rule_4(week_idx):    "time: week_idx: close_price << average"    if(y_CLOSE[week_idx] < average_close[week_idx]*0.8):        return 1    else:        return 0def rule_5(week_idx):    "time: week_idx  : average_prive down and close_price down"    if((average_close[week_idx] <= average_close[week_idx-1]) \               and(y_CLOSE[week_idx] <= y_CLOSE[week_idx-1])):        return  0    else:        return 1def rule_6(week_idx):    "time week_idx : average_price down and  close_price < average_price"    if((average_close[week_idx] <= average_close[week_idx-1]) \               and(y_CLOSE[week_idx] <= average_close[week_idx-1])):        return 0    else:        return 1def rule_7(week_idx):    "time: week_idx : close << average_price and average down"    if((average_close[week_idx] <= average_close[week_idx-1]) \                and (y_CLOSE[week_idx] <= average_close[week_idx]*0.8)):        return 0    else:        return 1def rule_8(week_idx):    "time : week_idx : close_price up and close_price >> average-price "    if((y_CLOSE[week_idx] >= y_CLOSE[week_idx-1]) \               and(y_CLOSE[week_idx] >= average_close[week_idx]*1.2)):        return 0    else:        return 1def choose_rule_final(week_idx):    "count 1 0 to get final choose : if count(1) > count(0) bought ;else throw "    count_1 = 0    count_0 = 0    ######################################rule 1 2 3 4    if(rule_1(week_idx) == 1):        count_1 +=1;    if(rule_2(week_idx) == 1):        count_1 +=1;    if(rule_3(week_idx) == 1):        count_1 +=1;    if(rule_4(week_idx) == 1):        count_1 +=1;    ######################################rule 5 6 7 8    if(rule_5(week_idx) == 0):        count_0 +=1;    if(rule_6(week_idx) == 0):        count_0 +=1;    if(rule_7(week_idx) == 0):        count_0 +=1;    if(rule_8(week_idx) == 0):        count_0 +=1;    ###########################result to bought or through    if(count_1 >= count_0):        return 1    else:        return  0for week_idx in range(0,len(average_close)):    temp = choose_rule_final(week_idx)    profit = 0    if(temp == 1):   #to buy and calculate profit        profit -= (y_CLOSE[week_idx] - y_CLOSE[week_idx-1])*N    else:        profit += (y_CLOSE[week_idx] - y_CLOSE[week_idx-1])*Nprint "股票个数:",N;print "最终利润:",profit#本金10万元 最终获取利润值为2060.73752711  大约为2千元
原创粉丝点击