iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
AI/ ML & Data

自動交易程式探索系列 第 25

Day 25 - 嘗試使用`FinRL`的`BitcoinEnv`,但失敗

  • 分享至 

  • xImage
  •  

接下來幾天我要開始使用FinRL的API來搭建一個簡單的加密貨幣的自動交易機器人;在重新審視FinRL時,我發現FinRL中其實範例多種多樣,其中竟然還有一個BitcoinEnv

在開始嘗試使用後,我就碰到了問題,在資料處理方面從finrl\meta\data_processors\processor_ccxt.py中可以找到CCXTEngineer搭配BitcoinEnv的使用;然而接下來就碰到了很麻煩的問題,在選擇DRLAgent的時候,無論選擇from finrl.agents.stablebaselines3.models import DRLAgent還是from finrl.agents.elegantrl.models import DRLAgent要訓練其中的DRL模型時(如PPO, DDPG, ...等等),都會發生錯誤,因為BitcoinEnv的實作與其不相容。

如果選擇使用from finrl.agents.stablebaselines3.models import DRLAgent,則對應的Env必須要繼承gym.Env;而BitcoinEnv沒有。

選擇使用``from finrl.agents.elegantrl.models import DRLAgent時,也仍然會因為BitcoinEnv中定義的function, variable`名稱不相容而出現各種各樣的錯誤;因此我今天嘗試了很久,最後仍然失敗了。

如果最後還是無法有效解決,我會回去繼續使用比較標準的StockTradingEnv;不過在抽特徵的時候,可能會參考BitcoinEnvCCXTEngineer中的一些內容像是

  1. 使用的tech_indicator`
    • ["macd", "boll_ub", "boll_lb", "rsi_30", "dx_30", "close_30_sma", "close_60_sma"]
  2. 價格只使用ohlcv中的close

參考的CCXTEngineer部分內容如下:

def add_technical_indicators(
    self,
    df,
    pair_list,
    tech_indicator_list=[
        "macd",
        "boll_ub",
        "boll_lb",
        "rsi_30",
        "dx_30",
        "close_30_sma",
        "close_60_sma",
    ],
):
    df = df.dropna()
    df = df.copy()
    column_list = [
        pair_list,
        ["open", "high", "low", "close", "volume"] + (tech_indicator_list),
    ]
    column = pd.MultiIndex.from_product(column_list)
    index_list = df.index
    dataset = pd.DataFrame(columns=column, index=index_list)
    for pair in pair_list:
        pair_column = pd.MultiIndex.from_product(
            [[pair], ["open", "high", "low", "close", "volume"]]
        )
        dataset[pair_column] = df[pair]
        temp_df = df[pair].reset_index().sort_values(by=["index"])
        temp_df = temp_df.rename(columns={"index": "date"})
        crypto_df = Sdf.retype(temp_df.copy())
        for indicator in tech_indicator_list:
            temp_indicator = crypto_df[indicator].values.tolist()
            dataset[(pair, indicator)] = temp_indicator
    print("Succesfully add technical indicators")
    return dataset

def df_to_ary(
    self,
    df,
    pair_list,
    tech_indicator_list=[
        "macd",
        "boll_ub",
        "boll_lb",
        "rsi_30",
        "dx_30",
        "close_30_sma",
        "close_60_sma",
    ],
):
    df = df.dropna()
    date_ary = df.index.values
    price_array = df[pd.MultiIndex.from_product([pair_list, ["close"]])].values
    tech_array = df[
        pd.MultiIndex.from_product([pair_list, tech_indicator_list])
    ].values
    return price_array, tech_array, date_ary

上一篇
Day 24 - 完整的幣安現貨買賣下單程式
下一篇
Day 26 - 加密貨幣自動交易 (1/5)
系列文
自動交易程式探索30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言