小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

定制股票交易OpenAI Gym強(qiáng)化學(xué)習(xí)環(huán)境

 taotao_2016 2019-04-12

▎作者:Adam King

編譯:公眾號(hào)翻譯部


前言


OpenAI 的 gym 是一個(gè)很棒的軟件包,允許你創(chuàng)建自定義強(qiáng)化學(xué)習(xí)agents。它提供了相當(dāng)多的預(yù)構(gòu)建環(huán)境,如CartPole、MountainCar,以及大量免費(fèi)的Atari游戲供用戶體驗(yàn)。

這些環(huán)境非常適合學(xué)習(xí),但最終你將需要設(shè)置一個(gè)agent來解決自定義問題。為此,你需要?jiǎng)?chuàng)建一個(gè)關(guān)于你特定問題域的自定義環(huán)境。之后,我們將創(chuàng)建一個(gè)自定義股票市場(chǎng)環(huán)境來模擬股票交易。


代碼在文末獲取

首先,讓我們了解一下環(huán)境到底是什么。環(huán)境包含運(yùn)行agent并允許其學(xué)習(xí)的所有必要功能。每個(gè)環(huán)境必須實(shí)現(xiàn)下gym界面:

在構(gòu)造函數(shù)中,我們首先定義 action_space 的類型和大小,它將包含agent在環(huán)境中可能采取的所有操作。類似地,我們將定義 observation_space,它包含agent要觀察的所有環(huán)境數(shù)據(jù)。

我們的重置方法將被調(diào)用,以周期性地將環(huán)境重置為初始狀態(tài)。在此之后,將在環(huán)境中執(zhí)行許多步驟,其中模型將提供一個(gè)操作,并且必須執(zhí)行該操作,然后返回下一個(gè)觀察結(jié)果。這也是計(jì)算獎(jiǎng)勵(lì)的地方,稍后會(huì)詳細(xì)介紹。

最后,可以定期調(diào)用render方法來打印再現(xiàn)的環(huán)境。這可以像打印語(yǔ)句一樣簡(jiǎn)單,也可以像使用openGL渲染3D環(huán)境一樣復(fù)雜。對(duì)于本例,我們將堅(jiān)持使用print語(yǔ)句。

股票交易環(huán)境


我們將創(chuàng)建一個(gè)股票交易環(huán)境。然后,我們將訓(xùn)練agent成為一個(gè)有利可圖的貿(mào)易環(huán)境。

我們需要考慮的第一件事是人工交易者如何感知他們所處的環(huán)境。在決定交易之前,他們會(huì)觀察到什么?

交易員很可能會(huì)看一些股票價(jià)格走勢(shì)的圖表,或許還會(huì)加上一些技術(shù)指標(biāo)。在此基礎(chǔ)上,他們將把這些視覺信息與他們之前對(duì)類似價(jià)格走勢(shì)的了解相結(jié)合,從而對(duì)股票可能的走勢(shì)做出明智的決定。

所以讓我們把這轉(zhuǎn)換成我們的agent應(yīng)該如何感知它的環(huán)境。

observation_space包含我們希望agent在進(jìn)行交易之前或不進(jìn)行交易之前考慮的所有輸入變量。在本例中,我們希望agent查看過去五天股票的數(shù)據(jù)(開、高、低、收和日成交量),以及其他一些數(shù)據(jù),如帳戶余額、當(dāng)前股票頭寸和當(dāng)前利潤(rùn)。

這里的直覺是,對(duì)于每個(gè)時(shí)間步驟,我們希望我們的agent考慮導(dǎo)致當(dāng)前價(jià)格價(jià)格變動(dòng)的行為,以及它們自己的投資組合的狀態(tài),以便為下一步行動(dòng)做出明智的決策。

一旦交易者感知到了他們所處的環(huán)境,他們就需要采取行動(dòng)。在我們的agent例子中,它的action_space將包含三種可能性:買進(jìn)股票、賣出股票或什么都不做。

但這還不,我們需要知道每次買入或賣出的股票數(shù)量。使用gym的Box space,我們可以創(chuàng)建一個(gè)動(dòng)作空間,其中包含離散數(shù)量的動(dòng)作類型(買進(jìn)、賣出和持有),以及連續(xù)的買進(jìn)/賣出金額(分別為:賬戶余額/頭寸大小的0-100%)。

你將注意到這個(gè)金額對(duì)于hold操作是不必要的,但是無論如何都會(huì)提供。我們的agent最初并不知道這一點(diǎn),但隨著時(shí)間的推移,應(yīng)該會(huì)知道這個(gè)金額與此操作無關(guān)。

在實(shí)現(xiàn)我們的環(huán)境之前,最后要考慮的是激勵(lì)。我們想激勵(lì)長(zhǎng)期持續(xù)的利潤(rùn)。在每個(gè)步驟,我們將把激勵(lì)設(shè)置為賬戶余額乘以到目前為止的時(shí)間步數(shù)的一部分。

這樣做的目的是在早期階段推遲對(duì)agent的過快獎(jiǎng)勵(lì),并允許它在過于深入地優(yōu)化單個(gè)策略之前進(jìn)行充分的探索。它還將獎(jiǎng)勵(lì)那些長(zhǎng)期維持較高平衡的agent,而不是那些使用不可持續(xù)策略快速賺錢的agent。

實(shí)現(xiàn)


現(xiàn)在我們已經(jīng)定義了我們的觀察空間、行動(dòng)空間和激勵(lì),是時(shí)候?qū)崿F(xiàn)我們的環(huán)境了。首先,我們需要在環(huán)境的構(gòu)造函數(shù)中定義action_space和observation_space。環(huán)境期望傳入一個(gè)pandas的dataframe,其中包含要學(xué)習(xí)的股票數(shù)據(jù)。類似這樣的數(shù)據(jù)格式:

接下來,我們將編寫reset方法,在創(chuàng)建新環(huán)境或重置現(xiàn)有環(huán)境的狀態(tài)時(shí)調(diào)用該方法。在這里,我們將設(shè)置每個(gè)agent的初始余額,并將其打開位置初始化為空列表。

我們將當(dāng)前步驟設(shè)置為dataframe中的一個(gè)隨機(jī)點(diǎn),因?yàn)槲覀兊脑S多agent經(jīng)常在訓(xùn)練中重置環(huán)境。nextObservation方法編譯最后五個(gè)時(shí)間步驟的股票數(shù)據(jù),附加agent的帳戶信息,并將所有值縮放到0到1之間。

接下來,我們的環(huán)境需要能夠邁出一步。在每一步,我們將采取指定的行動(dòng)(由我們的模型選擇),計(jì)算激勵(lì),并返回下一個(gè)觀察結(jié)果。

現(xiàn)在,我們的_takeAction方法需要執(zhí)行模型提供的操作,并購(gòu)買、出售或持有股票。

現(xiàn)在唯一要做的就是將環(huán)境呈現(xiàn)到屏幕上。為了簡(jiǎn)單起見,我們將呈現(xiàn)到目前為止的利潤(rùn)和一些其他有趣的指標(biāo)。

我們的環(huán)境是完整的?,F(xiàn)在,我們可以使用dataframe實(shí)例化StockTradingEnv環(huán)境,并使用來自stable-baselines的模型對(duì)其進(jìn)行測(cè)試。

https://github.com/hill-a/stable-baselines

當(dāng)然,我們先做了個(gè)簡(jiǎn)單的測(cè)試,如果真的想通過使用深度學(xué)習(xí)對(duì)股市進(jìn)行應(yīng)用,那將需要更多的時(shí)間和精力。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

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

    類似文章 更多