金融量化分析【day112】:均值回归策略

一、均值回归策略

1、什么是回归策略

 二、归一标准化

import numpy as np
a = np.random.uniform(100,5000,1000)
b = np.random.uniform(0.1,3.0,1000)
(a.min(),a.max())

  输出

预处理

(a - a.min())/(a.max()-a.min())

  输出

预处理

aa = (a - a.min())/(a.max()-a.min())
bb = (b - b.min())/(b.max()-b.min())
(aa.min(),aa.max())

  输出

画图

aaa = (a - a.mean())/a.std()
import matplotlib.pyplot as plt
%matplotlib
plt.hist(aaa)

输出

二、均值回归策略代码

# 导入函数库
import jqdata
import math
import numpy as np
import pandas as pd 

def initialize(context):
    set_benchmark('000002.XSHG')
    set_option('use_real_price', True)
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')

    g.security = get_index_stocks('000002.XSHG')
    
    g.ma_days = 30 
    g.stock_num = 10  
    
    run_monthly(handle, 1)
    
def handle(context):
    
    sr = pd.Series(index=g.security)
    for stack in sr.index:
        ma = attribute_history(stack,g.stock_days)['close'].mean
        p = get_current_data()[stack].day_open
        ratio = (ma-p)/ma
        sr[stock] = ratio
    tohold = sr.nlarges(g.stock_num).index.values
    
    
    for stock in context.portfolio/positions:
        if stock not in tohold:
             order_target_value(stock, 0)
        
    tobuy = [stock for stock in tohold if stock not in context.portfolio.positions]
    
    if len(tobuy)>0:
        cash = context.portfolio.available_cash
        cash_every_stock = cash / len(tobuy)
        
        for stock in tobuy:
            order_value(stock,cash_every_stock)

  

原文地址:https://www.cnblogs.com/luoahong/p/9857839.html