午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

把Engine擴(kuò)展成支持投資組合的強(qiáng)化學(xué)習(xí)環(huán)境

 AI量化實(shí)驗(yàn)室 2023-10-12 發(fā)布于北京

原創(chuàng)文章第141篇,專注“個(gè)人成長(zhǎng)與財(cái)富自由、世界運(yùn)作的邏輯,AI量化投資"。

關(guān)于投資,使用風(fēng)險(xiǎn)平價(jià)+動(dòng)態(tài)現(xiàn)平衡肯定是可行的。

我們還需要加入更多的主動(dòng)管理,比如有些指數(shù),明顯沒(méi)有動(dòng)量,或者一些擇時(shí)指數(shù)是負(fù)向的,那我們直接把對(duì)應(yīng)的指數(shù)權(quán)重置為0,甚至反過(guò)來(lái),當(dāng)一些指數(shù)的動(dòng)量很強(qiáng)時(shí),加大它的權(quán)重。

若是加上了擇時(shí),那風(fēng)險(xiǎn)平價(jià)是否還是必要的?

風(fēng)險(xiǎn)平價(jià)動(dòng)態(tài)調(diào)倉(cāng)的基礎(chǔ)邏輯是:波動(dòng)率有一定的平穩(wěn)性,波動(dòng)率大的時(shí)候,市場(chǎng)下行的概率大,所以波動(dòng)率加大的應(yīng)該降低倉(cāng)位。但若是加上了動(dòng)量、行業(yè)景氣度這些邏輯,風(fēng)險(xiǎn)平價(jià)的最優(yōu)計(jì)算似乎也失去了原本的意義?

還不如統(tǒng)一到一個(gè)“多因子”模型里去“學(xué)習(xí)”。

有時(shí)候,簡(jiǎn)單的反而是最好的。

有一個(gè)兄弟,真的做到極簡(jiǎn):就是指數(shù)基金+動(dòng)量輪動(dòng)——騎最快的馬。當(dāng)然很多人覺(jué)得很好笑,現(xiàn)在想想還有一定的道理。動(dòng)量策略本身就是一直有效的。另外直觀好理解,純右側(cè)交易,持有感受也好。

若要把更多因子整合在一起,規(guī)則型的策略trick太多了,怎么看都像湊出來(lái)的,使用傳統(tǒng)機(jī)器學(xué)習(xí)或者深度學(xué)習(xí)把多因子整合到一起倒是可行,最大的問(wèn)題是,監(jiān)督學(xué)習(xí)是需要標(biāo)簽的。這個(gè)標(biāo)簽把一個(gè)“多輪貫序決策”問(wèn)題,變成一個(gè)個(gè)分類問(wèn)題,根本就有一定的問(wèn)題。看來(lái)看去,最前前途的,當(dāng)屬?gòu)?qiáng)化學(xué)習(xí)的范式,當(dāng)然并不容易。

一個(gè)美好的愿景,應(yīng)該是這樣一個(gè)框架:

多因子,新增的數(shù)據(jù)、指標(biāo)進(jìn)來(lái)都可以納入模型;有用更好,沒(méi)用至少不會(huì)影響原有結(jié)果。

可以自適應(yīng)市場(chǎng)環(huán)境,就是需要自我進(jìn)化,而不是靜態(tài)的。

可以按需要優(yōu)化,比如夏普比,最大回撤等。

看起來(lái)強(qiáng)化學(xué)習(xí)是方向。

在原有的engine的基礎(chǔ)上,我繼承并拓展它成為強(qiáng)化學(xué)習(xí)環(huán)境:

from abc import ABC

import gym
import numpy as np
from gym import spaces
from engine.engine_runner import Engine


class FinanceEnv(Engine, gym.Env, ABC):
def __init__(self, symbols, names, fields, features):
Engine.__init__(self, symbols, names, fields)
gym.Env.__init__(self)

# 正則化,和=1,長(zhǎng)度就是組合里的證券數(shù)量
self.df_features = self.df_features[features]
self.action_space = spaces.Box(low=0, high=1, shape=(len(symbols),))
self.observation_space = spaces.Box(
low=-np.inf,
high=np.inf,
shape=(len(symbols), len(self.df_features.columns)), dtype=np.float64
)

print(self.action_space, self.observation_space)

def reset(self):
self.index = 0
self.curr_date = self.dates[self.index]
df = self.df_features.loc[self.curr_date]
print(df.values.shape)
return df.values

def step(self, actions):
done = False
if self.index >= len(self.dates) - 1:
done = True
return self.state, self.reward, done, {}

self._update_bar()
weights = self.softmax_normalization(actions)
wts = {s: w for s, w in zip(self.symbols, weights)}
self.acc.adjust_weights(wts)

df = self.df_features.loc[self.dates[self.index], :]
self.state = df.values
self.reward = self.acc.cache_portfolio_mv[0]

self._move_cursor()
return self.state, self.reward, done, {}

def softmax_normalization(self, actions):
numerator = np.exp(actions)
denominator = np.sum(np.exp(actions))
softmax_output = numerator / denominator
return softmax_output


if __name__ == '__main__':
from stable_baselines3.common.env_checker import check_env
from stable_baselines3 import A2C
from engine.datafeed.dataloader import Dataloader

symbols = ['399006.SZ', '000300.SH']


names = []
fields = []
features = []
# fields += ['$close/Ref($close,20) -1']
fields += ['Slope($close,20)']
names += ['mom']
features += ['mom']

env = FinanceEnv(symbols, names, fields, features)
check_env(env)
model = A2C("MlpPolicy", env)
model.learn(total_timesteps=100000)

之前的文章是從零實(shí)現(xiàn)的,這次是整合進(jìn)了engine里。

打造一個(gè)投資組合管理的金融強(qiáng)化學(xué)習(xí)環(huán)境

今天是第7天,還有一點(diǎn)“弱陽(yáng)”性,估計(jì)明天可以返崗了。

我不太懂足球,但這兩天信息流里實(shí)在太多,太精彩,太勵(lì)志了,多看了幾眼。一點(diǎn)點(diǎn)感悟。一個(gè)人,一輩子,一件事,做到極致是多少幸福的事情,何況還收獲如此高的光榮與夢(mèng)想。天才太難得,但是普通人,也應(yīng)該盡快找到自己可以為子奮斗一生的事業(yè),然后扎下根來(lái),順便解決一個(gè)財(cái)務(wù)自由的問(wèn)題。

——人這一生最大的幸運(yùn),莫過(guò)于他在年富力強(qiáng)時(shí)就發(fā)現(xiàn)了自己的使命?!度祟惾盒情W耀時(shí)》。

環(huán)境代碼請(qǐng)前往星球-量化專欄下載。

明天繼續(xù)強(qiáng)化學(xué)習(xí)。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多