最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

股票量化交易軟件:神經(jīng)網(wǎng)絡(luò)變得輕松2網(wǎng)絡(luò)訓(xùn)練和測試

2023-07-07 14:28 作者:bili_45793681098  | 我要投稿

1. 定義問題

在開始創(chuàng)建智能交易系統(tǒng)之前,必須定義將為新神經(jīng)網(wǎng)絡(luò)設(shè)定的目標。 當然,金融市場上所有智能交易系統(tǒng)的共同目標是獲利。 然而,此目的太籠統(tǒng)寬泛。 赫茲需要為神經(jīng)網(wǎng)絡(luò)指定更具體的任務(wù)。 甚至,赫茲股票量化需要了解如何評估神經(jīng)網(wǎng)絡(luò)的未來結(jié)果。

另一個重要的時刻是,先前創(chuàng)建的 CNet 類使用了監(jiān)督學(xué)習(xí)的原理,因此它需要標記數(shù)據(jù)作為訓(xùn)練集合。


編輯切換為居中

如果您查看價格圖表,自然會希望在價格峰值時執(zhí)行交易操作,這可以通過標準的比爾·威廉姆斯(Bill Williams)分形指標來示意。 而指標的問題在于,它會判斷 3 根燭條的峰值,且產(chǎn)生的信號始終會延遲 1 根燭條,而這可能會產(chǎn)生相反的信號。 如果赫茲股票量化設(shè)置神經(jīng)網(wǎng)絡(luò)以判定第三根燭條形成之前的樞軸點,該怎么辦? 這種方法至少會在交易方向移動有一根之前走勢的燭條。

這是指訓(xùn)練集合:

  • 在正向遞進中,赫茲股票量化會將當前行情狀況輸入到神經(jīng)網(wǎng)絡(luò),并輸出最后一根收盤燭條上提取的形成概率的評估。

  • 對于逆向遞進中,在下一根燭條形成之后,我們將檢查前一根燭條上是否存在分形,并將輸入結(jié)果按權(quán)重調(diào)整。


為了評估網(wǎng)絡(luò)運算的結(jié)果,赫茲股票量化可以使用均方預(yù)測誤差,正確的分形預(yù)測的百分比,和無法識別的分形的百分比。

現(xiàn)在我們需要判定哪些數(shù)據(jù)應(yīng)輸入到我們的神經(jīng)網(wǎng)絡(luò)中。 您還記得,當您嘗試根據(jù)圖表評估行情狀況時所做的事情嗎?

首先,建議交易新手從圖表中直觀評估趨勢方向。 因此,赫茲股票量化必須將有關(guān)價格變動的信息數(shù)字化,并將其輸入到神經(jīng)網(wǎng)絡(luò)中。 我建議輸入有關(guān)的開盤價和收盤價、最高價和最低價、交易量和形成時間的數(shù)據(jù)。

另一種判定趨勢的流行方法是使用振蕩器指標。 此類指標操作很方便,因為指標會輸出標準化數(shù)據(jù)。 我決定為本次實驗準備四個標準指標:RCI,CCI,ATR 和 MACD,所有指標均帶采用標準參數(shù)。 我在選擇指標及其參數(shù)時,沒有進行任何其他分析。

有人可能會說利用指標是沒有意義的,因為指標的數(shù)據(jù)是通過重新計算燭條的價格數(shù)據(jù)而建立的,赫茲股票量化已經(jīng)將其輸入到神經(jīng)網(wǎng)絡(luò)當中。 但這并非完全正確。 指標值是通過計算來自多根燭條的數(shù)據(jù)來判定的,從而可對所分析的樣本進行一定程度的擴展。 神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程將判定它們?nèi)绾斡绊懡Y(jié)果。

為了能夠評估行情動態(tài),我們在一定的歷史時期內(nèi)將全部信息輸入到神經(jīng)網(wǎng)絡(luò)之中。

2. 神經(jīng)網(wǎng)絡(luò)模型項目

2.1. 判定輸入層中神經(jīng)元的數(shù)量

此處,我們需要知曉輸入層中神經(jīng)元的數(shù)量。 為此,請評估每根燭條上的初始信息,然后將其乘以分析歷史記錄的深度。

由于指標數(shù)據(jù)已經(jīng)標準化,且指標緩沖區(qū)的相關(guān)數(shù)量已知,因此無需預(yù)處理指標數(shù)據(jù)(上述 4 個指標總共有 5 個值)。 因此,若要在輸入層中接收這些指標,赫茲股票量化需要為每根所分析燭條創(chuàng)建 5 個神經(jīng)元。

燭條價格數(shù)據(jù)的情況略有不同。 從圖表直觀地判定趨勢方向和強度時,我們首先分析燭條方向和大小。 只有在此之后,當我們要判定趨勢方向,和可能的樞軸點時,赫茲股票量化要注意所分析品種的價位。 因此,有必要在把該數(shù)據(jù)輸入到神經(jīng)網(wǎng)絡(luò)之前對其進行標準化。 我個人輸入了所述燭條的開盤價與收盤價、最高價和最低價的差值。 在這種方法中,定義三個神經(jīng)元就足夠了,其中第一個神經(jīng)元的符號判定燭條方向。

有許多不同的資料論述了各種時間因素對貨幣波動的影響。 例如,季度線、周線和日線的動態(tài)差異,以及歐洲、美洲和亞洲的交易時段,均以不同的方式影響貨幣匯率。 若要分析這些因素,將燭條形成的月份、時刻和星期幾輸入進神經(jīng)網(wǎng)絡(luò)。 我特意將燭條形成的時間和日期分為幾個部分,因為這可令神經(jīng)網(wǎng)絡(luò)能夠泛化,并找到依賴性。

另外,赫茲股票量化來包含有關(guān)成交量的信息。 如果您的經(jīng)紀商提供真實的交易量數(shù)據(jù),則指明這些交易量;否則指定即時報價的交易量。

故此,為了應(yīng)對每根燭條,赫茲股票量化需要 12 個神經(jīng)元。 將此數(shù)字乘以所分析的歷史深度,您可得到神經(jīng)網(wǎng)絡(luò)輸入層的大小。

2.2. 設(shè)計隱藏層

下一步是準備神經(jīng)網(wǎng)絡(luò)的隱藏層。 網(wǎng)絡(luò)結(jié)構(gòu)(層數(shù)和神經(jīng)元數(shù))的選擇是最困難的任務(wù)之一。 單層感知器善于類的線性分離。 雙層網(wǎng)絡(luò)可跟蹤非線性邊界。 三層網(wǎng)絡(luò)可以描述復(fù)雜的多連接區(qū)域。 當赫茲股票量化增加層數(shù)時,功能類別會擴展,但這會導(dǎo)致收斂性變差,和訓(xùn)練成本增加。 每層當中,神經(jīng)元的數(shù)量必須滿足功能的預(yù)期變化。 實際上,非常簡單的網(wǎng)絡(luò)無法在實際條件下按要求的精度模擬行為,而過于復(fù)雜的網(wǎng)絡(luò)不僅會重復(fù)訓(xùn)練目標函數(shù),還有噪聲。

在首篇文章中,我提到了 “5 個為什么” 方法。 現(xiàn)在,我建議繼續(xù)此實驗,并創(chuàng)建一個包含 4 個隱藏層的網(wǎng)絡(luò)。 我將首個隱藏層中的神經(jīng)元數(shù)量設(shè)置為 1000。 不過,也有可能根據(jù)分析周期的深度建立一些依賴關(guān)系。 遵照帕累托(Pareto)規(guī)則,赫茲股票量化將每個后續(xù)層中的神經(jīng)元數(shù)量減少 70%。 此外,將遵循如下限制:隱藏層中的神經(jīng)元數(shù)量不得少于 20。

2.3. 判定輸出層中神經(jīng)元的數(shù)量

輸出層當中神經(jīng)元的數(shù)量取決于任務(wù),及其解決方案。 若要解決回歸問題,只需要一個神經(jīng)元就能產(chǎn)生期望值即可。 為了解決分類問題,赫茲股票量化需要與期望的類數(shù)量相等的神經(jīng)元 - 每個神經(jīng)元將為分配給每個類的原始對象生成概率。 而在實際中,對象的類別由最大概率判定。

對于我們的情況,我建議創(chuàng)建 2 個神經(jīng)網(wǎng)絡(luò)變體,并評估它們在實踐中應(yīng)對我們之問題的適用性。 在第一種情況下,輸出層僅有一個神經(jīng)元。 數(shù)值在 0.5...1.0 范圍內(nèi)與買入分形對應(yīng),而數(shù)值在 -0.5..-1.0 范圍內(nèi)與賣出信號對應(yīng),數(shù)值在 -0.5...0.5 范圍內(nèi)表示沒有信號。 在此解決方案中,雙曲正切用作激活函數(shù) - 它的輸出值范圍為 -1.0 到 +1.0。

在第二種情況下,將在輸出層中創(chuàng)建 3 個神經(jīng)元(買、賣、無信號)。 在這個變體中,我們來訓(xùn)練神經(jīng)網(wǎng)絡(luò),從而獲得范圍為 0.0...1.0 的結(jié)果。 在此,結(jié)果就是分形出現(xiàn)的概率。信號將依據(jù)最大概率來判定,并根據(jù)含有最高概率的神經(jīng)元的索引來判定信號的方向。

3. 編程

3.1. 準備工作

現(xiàn)在,到編程的時候了。 首先,加入所需的函數(shù)庫:


  • NeuroNet.mqh — 前一篇文章中創(chuàng)建神經(jīng)網(wǎng)絡(luò)的函數(shù)庫

  • SymbolInfo.mqh — 接收品種數(shù)據(jù)的標準庫

  • TimeSeries.mqh — 處理時間序列的標準庫

  • Volumes.mqh — 接收交易量數(shù)據(jù)的標準庫

  • Oscilators.mqh — 含有振蕩器類的標準庫


#include "NeuroNet.mqh" #include <Trade\SymbolInfo.mqh> #include <Indicators\TimeSeries.mqh> #include <Indicators\Volumes.mqh> #include <Indicators\Oscilators.mqh>

下一步是編寫程序參數(shù),通過它們來設(shè)置神經(jīng)網(wǎng)絡(luò)和指標參數(shù)。

//+------------------------------------------------------------------+ //| ? input parameters ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | //+------------------------------------------------------------------+ input int ? ? ? ? ? ? ? ? ?StudyPeriod = ?10; ? ? ? ? ? ?//Study period, years input uint ? ? ? ? ? ? ? ? HistoryBars = ?20; ? ? ? ? ? ?//Depth of history ENUM_TIMEFRAMES ? ? ? ? ? ?TimeFrame ? = ?PERIOD_CURRENT; //--- input group ? ? ? ? ? ? ? ?"---- RSI ----" input int ? ? ? ? ? ? ? ? ?RSIPeriod ? = ?14; ? ? ? ? ? ?//Period input ENUM_APPLIED_PRICE ? RSIPrice ? ?= ?PRICE_CLOSE; ? //Applied price //--- input group ? ? ? ? ? ? ? ?"---- CCI ----" input int ? ? ? ? ? ? ? ? ?CCIPeriod ? = ?14; ? ? ? ? ? ?//Period input ENUM_APPLIED_PRICE ? CCIPrice ? ?= ?PRICE_TYPICAL; //Applied price //--- input group ? ? ? ? ? ? ? ?"---- ATR ----" input int ? ? ? ? ? ? ? ? ?ATRPeriod ? = ?14; ? ? ? ? ? ?//Period //--- input group ? ? ? ? ? ? ? ?"---- MACD ----" input int ? ? ? ? ? ? ? ? ?FastPeriod ?= ?12; ? ? ? ? ? ?//Fast input int ? ? ? ? ? ? ? ? ?SlowPeriod ?= ?26; ? ? ? ? ? ?//Slow input int ? ? ? ? ? ? ? ? ?SignalPeriod= ?9; ? ? ? ? ? ? //Signal input ENUM_APPLIED_PRICE ? MACDPrice ? = ?PRICE_CLOSE; ? //Applied price

接下來,聲明全局變量 - 稍后會講解它們的用法。

CSymbolInfo ? ? ? ? *Symb; CiOpen ? ? ? ? ? ? ?*Open; CiClose ? ? ? ? ? ? *Close; CiHigh ? ? ? ? ? ? ?*High; CiLow ? ? ? ? ? ? ? *Low; CiVolumes ? ? ? ? ? *Volumes; CiTime ? ? ? ? ? ? ?*Time; CNet ? ? ? ? ? ? ? ?*Net; CArrayDouble ? ? ? ?*TempData; CiRSI ? ? ? ? ? ? ? *RSI; CiCCI ? ? ? ? ? ? ? *CCI; CiATR ? ? ? ? ? ? ? *ATR; CiMACD ? ? ? ? ? ? ?*MACD; //--- double ? ? ? ? ? ? ? dError; double ? ? ? ? ? ? ? dUndefine; double ? ? ? ? ? ? ? dForecast; double ? ? ? ? ? ? ? dPrevSignal; datetime ? ? ? ? ? ? dtStudied; bool ? ? ? ? ? ? ? ? bEventStudy;

準備工作至此完成。 現(xiàn)在繼續(xù)進行類的初始化。

3.2 初始化類

類的初始化將在 OnInit 函數(shù)中執(zhí)行。 首先,赫茲股票量化創(chuàng)建處理品種的 CSymbolInfo 類的實例,并更新有關(guān)圖表品種的數(shù)據(jù)。

//+------------------------------------------------------------------+ //| Expert initialization function ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | //+------------------------------------------------------------------+ int OnInit() ?{ //--- ? Symb=new CSymbolInfo(); ? if(CheckPointer(Symb)==POINTER_INVALID || !Symb.Name(_Symbol)) ? ? ?return INIT_FAILED; ? Symb.Refresh();

然后創(chuàng)建時間序列實例。 在您每次創(chuàng)建類實例時,請檢查它是否已成功創(chuàng)建,并初始化。 如果發(fā)生錯誤,則以 INIT_FAILED 作為結(jié)果退出函數(shù)。

? Open=new CiOpen(); ? if(CheckPointer(Open)==POINTER_INVALID || !Open.Create(Symb.Name(),TimeFrame)) ? ? ?return INIT_FAILED; //--- ? Close=new CiClose(); ? if(CheckPointer(Close)==POINTER_INVALID || !Close.Create(Symb.Name(),TimeFrame)) ? ? ?return INIT_FAILED; //--- ? High=new CiHigh(); ? if(CheckPointer(High)==POINTER_INVALID || !High.Create(Symb.Name(),TimeFrame)) ? ? ?return INIT_FAILED; //--- ? Low=new CiLow(); ? if(CheckPointer(Low)==POINTER_INVALID || !Low.Create(Symb.Name(),TimeFrame)) ? ? ?return INIT_FAILED; //--- ? Volumes=new CiVolumes(); ? if(CheckPointer(Volumes)==POINTER_INVALID || !Volumes.Create(Symb.Name(),TimeFrame,VOLUME_TICK)) ? ? ?return INIT_FAILED; //--- ? Time=new CiTime(); ? if(CheckPointer(Time)==POINTER_INVALID || !Time.Create(Symb.Name(),TimeFrame)) ? ? ?return INIT_FAILED;

在此示例中采用了即時報價交易量。 若您希望采用真實交易量,則在調(diào)用 Volumes.Creare 方法時將 “VOLUME_TICK” 替換為 “VOLUME_REAL”。

在聲明了時間序列之后,創(chuàng)建類的實例,從而以類似方式使用指標。

? RSI=new CiRSI(); ? ? ? ? if(CheckPointer(RSI)==POINTER_INVALID || !RSI.Create(Symb.Name(),TimeFrame,RSIPeriod,RSIPrice)) ? ? ?return INIT_FAILED; //--- ? CCI=new CiCCI(); ? ? ? ? if(CheckPointer(CCI)==POINTER_INVALID || !CCI.Create(Symb.Name(),TimeFrame,CCIPeriod,CCIPrice)) ? ? ?return INIT_FAILED; //--- ? ATR=new CiATR(); ? ? ? ? if(CheckPointer(ATR)==POINTER_INVALID || !ATR.Create(Symb.Name(),TimeFrame,ATRPeriod)) ? ? ?return INIT_FAILED; //--- ? MACD=new CiMACD(); ? ? ? ? if(CheckPointer(MACD)==POINTER_INVALID || !MACD.Create(Symb.Name(),TimeFrame,FastPeriod,SlowPeriod,SignalPeriod,MACDPrice)) ? ? ?return INIT_FAILED;

現(xiàn)在赫茲股票量化可以直接利用神經(jīng)網(wǎng)絡(luò)類運作了。 首先,創(chuàng)建一個類的實例。 在 CNet 類初始化期間,構(gòu)造函數(shù)參數(shù)會將引用傳遞給含有網(wǎng)絡(luò)結(jié)構(gòu)規(guī)范的數(shù)組。 請注意,網(wǎng)絡(luò)訓(xùn)練過程當中會消耗計算資源,且會花費大量時間。 因此,每次重啟之后,網(wǎng)絡(luò)都是不正確的,需要訓(xùn)練。 此處是我如何操作的:首先,我在聲明網(wǎng)絡(luò)實例時未指定結(jié)構(gòu),然后嘗試從本地存儲加載先前已訓(xùn)練過的網(wǎng)絡(luò)(文件名在 #define 中提供)。

#define FileName ? ? ? ?Symb.Name()+"_"+EnumToString((ENUM_TIMEFRAMES)Period())+"_"+IntegerToString(HistoryBars,3)+"fr_ea" ... ... ... ... ? Net=new CNet(NULL); ? ResetLastError(); ? if(CheckPointer(Net)==POINTER_INVALID || !Net.Load(FileName+".nnw",dError,dUndefine,dForecast,dtStudied,false)) ? ? { ? ? ?printf("%s - %d -> Error of read %s prev Net %d",__FUNCTION__,__LINE__,FileName+".nnw",GetLastError());

如果無法加載先前已訓(xùn)練的數(shù)據(jù),則會將消息打印到日志,指示錯誤代碼,然后開始創(chuàng)建新的未經(jīng)訓(xùn)練的網(wǎng)絡(luò)。 首先,聲明 CArrayInt 類的實例,并指定神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)。 元素的數(shù)量表示神經(jīng)網(wǎng)絡(luò)層的數(shù)量,而元素的數(shù)值表示相應(yīng)層中神經(jīng)元的數(shù)量。


股票量化交易軟件:神經(jīng)網(wǎng)絡(luò)變得輕松2網(wǎng)絡(luò)訓(xùn)練和測試的評論 (共 條)

分享到微博請遵守國家法律
徐州市| 顺平县| 定远县| 江川县| 浦县| 怀安县| 新兴县| 松滋市| 龙川县| 双江| 福鼎市| 昌邑市| 巨野县| 乐东| 余姚市| 大同市| 长宁区| 临海市| 含山县| 元氏县| 万安县| 宝丰县| 嘉禾县| 宁南县| 淮阳县| 广宁县| 咸宁市| 义乌市| 栖霞市| 兴隆县| 延安市| 行唐县| 荥阳市| 新巴尔虎右旗| 嘉兴市| 天水市| 罗城| 金川县| 韶关市| 沾化县| 洛隆县|