日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【量化投资】策略四(聚宽)

發(fā)布時間:2025/4/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【量化投资】策略四(聚宽) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡述

首先,大體模板,是根據(jù)網(wǎng)上的一堆教程學(xué)來的。
然后很多函數(shù)不懂,都通過API來搞定了,之后,再自己寫的,用了自己的版本。

  • 這是一個alpha策略,然后用的是,一個大佬給的一個公式寫的因子。
  • 然后對沖beta的時候,選擇是操作一個比例。這個比例會影響到操作期貨的方式。以及投入的錢數(shù)目。加上期貨的保證金比例數(shù)目(看打算用幾倍的杠桿)
  • 然后,我感覺這個對沖beta也很一般??纯醋约褐竽懿荒芨愠鰝€稍微好點的對沖beta的方式吧

不過通過對沖beta確實達(dá)到了降低風(fēng)險的效果。(總虧損還是被降低了很多)
可能是因為我還是用了單因子。而且效果也不是很好。希望之后努力

# 導(dǎo)入函數(shù)庫 import statsmodels.api as sm from statsmodels import regression import numpy as np import pandas as pd import time from datetime import date from jqdata import * from jqlib.alpha191 import *# 一鍵回測說明: # 百度聚寬-》注冊賬號-》我的策略里面創(chuàng)建策略-》復(fù)制代碼到里面 # 右邊回測 開始時間:2017-1-1 終止時間:今天 資金:10000000# 初始化函數(shù),設(shè)定基準(zhǔn)等等 def initialize(context):g.tc = 2 # 調(diào)倉頻率# 下面是框架固定部分,不需要修改 g.N = 50 # 持倉數(shù)目g.t = 0 # 記錄運(yùn)行的天數(shù)g.weight_list = [1] # 因子的權(quán)重參數(shù)log.set_level('order', 'error')set_option('use_real_price', True) # 用真實價格交易set_slippage(FixedSlippage(0)) # 將滑點設(shè)置為0set_commission(PerTrade(buy_cost=0.0000, sell_cost=0.000, min_cost=0)) # 手續(xù)費(fèi)設(shè)置為0# set_benchmark('000905.XSHG') #中證500為業(yè)績基準(zhǔn)set_benchmark('000300.XSHG') # 滬深300為業(yè)績基準(zhǔn)# 選股范圍為全市場選股:上證+深證股票# g.stockrange= get_index_stocks('000001.XSHG')+get_index_stocks('399106.XSHE')g.stockrange = get_index_stocks('000300.XSHG')init_cash = context.portfolio.starting_cash/2# 操作期貨set_subportfolios([SubPortfolioConfig(cash=init_cash, type='stock'),SubPortfolioConfig(cash=init_cash, type='futures')])# 多少比例的資金用來對沖betag.rate = 0.5# 歷史最高收益率g.returnsRate = 0# 調(diào)整臨界限比率g.changeLimiteRate = 0.2# 調(diào)整比例g.changeRate = 0# g.betaName = 'IF9999.CCFX'## 每根日線運(yùn)行一次 def handle_data(context, data):if g.t == 0:# 設(shè)置可行股票池:用set_feasible_stocks函數(shù)剔除當(dāng)前或者計算樣本期間停牌的股票g.all_stocks = pickStock(context, g.stockrange)previousStr = str(context.previous_date)# adjustedBetaadjustedBeta(context)stock_sort = get_all_cleaned_factor_ranked(g.all_stocks, g.weight_list, previousStr)# 調(diào)倉rebalance_position(context, stock_sort)# order_stock_sell(context,data,stock_sort)# order_stock_buy(context,data,stock_sort) # g.t+=1 # speed upg.t = (g.t + 1) % g.tcdef get_all_cleaned_factor_ranked(stocks, weight_list, previousStr):value = my_apha1(stocks)value = (-value).argsort()[:g.N]return list(map(lambda x: stocks[x], value))''' 調(diào)整對沖beta的量 '''def adjustedBeta(context):current_returns = context.portfolio.returnsif current_returns <= g.returnsRate * ( 1 - g.changeLimiteRate):g.changeRate += 1g.rate = 0.5 + (0.5 / (1+np.exp(-g.changeRate)))elif current_returns >= g.returnsRate * ( 1 + g.changeLimiteRate):g.changeRate -= 1g.rate = 0.5 + (0.5 / (1+np.exp(-g.changeRate)))if current_returns > g.returnsRate:g.returnsRate = current_returns''' END 調(diào)整對沖beta的量 '''''' factor1 '''def single_alpha1(stock):df = get_price(stock, count=26, fields=['close'])returns = (df[1:] - df[:-2]) / df[:-2] # 25 linesvalue = [0] * 5for i in range(5):if np.array(returns).tolist()[-1 - i] < 0:value[i] = returns.ix[-20 - i:-1 - i].std() ** 2else:value[i] = df['close'][-1 - i] ** 2return 5 - np.array(value).argmax()def my_apha1(stocks):value = list(map(single_alpha1, stocks))MAX = max(value)MIN = min(value)value = (np.array(value) - MIN) / (MAX - MIN)return value''' END factor1 '''''' 初步篩選股票 '''# pick stocks def pickStock(context, stocks):# universe = set_feasible_stocks(stocks)universe = filter_specials(stocks, context)# 過濾上市時間小于60天的股票for stock in universe:days_public = (context.current_dt.date() - get_security_info(stock).start_date).daysif days_public < 60:universe.remove(stock)g.lenth = len(universe)return universe# 過濾停牌的股票 def set_feasible_stocks(stock_list):current_data = get_current_data()stock_list = [stock for stock in stock_list if not current_data[stock].paused] # 不考慮停盤的股票return stock_list# 將多因子的dataframe進(jìn)行排序,并且將有空值的行去掉 def rank_stock(all_factor, weight_list):C = len(all_factor.columns)ranked = all_factor.iloc[:, 0].rank() * weight_list[0]if C > 1:for j in range(1, C):ranked = all_factor.iloc[:, j].rank() * weight_list[j] + rankedranked = pd.DataFrame(ranked)ranked.columns = ['rank']one_sort = ranked.sort('rank', ascending=g.ascending)stock_sort = one_sort.index[:g.N]return stock_sort#過濾退市,停牌,STdef filter_specials(stock_list,context):curr_data = get_current_data()stock_list = [stock for stock in stock_list if \(not curr_data[stock].paused) # 未停牌and (not curr_data[stock].is_st) # 非STand ('ST' not in curr_data[stock].name)and ('*' not in curr_data[stock].name)and ('退' not in curr_data[stock].name)and (curr_data[stock].low_limit < curr_data[stock].day_open < curr_data[stock].high_limit) ]return stock_list''' END 初步篩選股票 '''''' 調(diào)倉 '''def rebalance_position(context, stocks_list):current_holding = context.subportfolios[0].positions.keys()stocks_to_sell = list(set(current_holding) - set(stocks_list))# 賣出bulk_orders(stocks_to_sell, 0)total_value = context.subportfolios[0].total_valueset_option('futures_margin_rate', g.rate)bete_order(context, (1 + g.rate) * context.subportfolios[1].total_value)# 買入 bulk_orders(stocks_list, total_value / len(stocks_list))# 批量買賣股票 def bulk_orders(stocks_list, target_value):for i in stocks_list :order_target_value(i, target_value, pindex=0)def bete_order(context, money):amount = int( money / get_current_data()[g.betaName].last_price)order_target(g.betaName, -amount , side='long', pindex=1) # 做空''' END 調(diào)倉 '''''' 調(diào)倉初版 '''##獲得賣出信號,并執(zhí)行賣出操作 # 輸入:context, data,已排序股票列表stock_sort-list類型 # 輸出:none def order_stock_sell(context, data, stock_sort):# 對于不需要持倉的股票,全倉賣出for stock in context.portfolio.positions:# 除去排名前g.N個股票(選股!)if stock not in stock_sort:stock_sell = stockorder_target_value(stock_sell, 0)# 獲得買入信號,并執(zhí)行買入操作 # 輸入:context, data,已排序股票列表stock_sort-list類型 # 輸出:none def order_stock_buy(context, data, stock_sort):# 對于需要持倉的股票,按分配到的份額買入for stock in stock_sort:stock_buy = stockorder_target_value(stock_buy, g.everyStock)''' END 調(diào)倉初版 '''

總結(jié)

以上是生活随笔為你收集整理的【量化投资】策略四(聚宽)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。