自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用Python打造加密貨幣算法交易機(jī)器人 原創(chuàng)

發(fā)布于 2024-9-13 12:54
瀏覽
0收藏

大家好,我是橙哥!今天我們來(lái)聊一聊Freqtrade,F(xiàn)reqtrade是一個(gè)開(kāi)源的加密貨幣量化交易機(jī)器人,用Python編寫(xiě)。它支持主流的交易所,可以通過(guò)Telegram或網(wǎng)頁(yè)界面來(lái)控制,還提供回測(cè)、圖表和資金管理工具,并可以通過(guò)機(jī)器學(xué)習(xí)來(lái)優(yōu)化交易策略。

下面我們來(lái)了解一下freqtrade的工作原理,看看如何使用命令行工具下載歷史數(shù)據(jù),創(chuàng)建新的配置文件和新的策略;如何使用Python和Pandas編寫(xiě)策略:我們將定義一個(gè)簡(jiǎn)單的移動(dòng)平均策略,在以太坊(ETH)和比特幣(BTC)之間進(jìn)行交易,來(lái)增加持有的比特幣數(shù)量。我們可以用freqtrade進(jìn)行以下操作:

開(kāi)發(fā)策略:輕松使用 Python 和 pandas 開(kāi)發(fā)策略。我們將在下面創(chuàng)建一個(gè)簡(jiǎn)單的策略,freqtrade 有一些示例策略倉(cāng)庫(kù)。

下載市場(chǎng)數(shù)據(jù):快速下載你選擇的加密貨幣的歷史價(jià)格數(shù)據(jù)。

回測(cè):查看你的策略在現(xiàn)實(shí)世界中是否有盈利機(jī)會(huì)。

優(yōu)化:使用 hyperopt 為你的策略找到最佳參數(shù)。

選擇交易對(duì):你的選擇可以是靜態(tài)的或基于簡(jiǎn)單過(guò)濾器的動(dòng)態(tài)選擇,例如交易量大于某個(gè)數(shù)量。

模擬運(yùn)行:使用模擬錢(qián)包在實(shí)時(shí)數(shù)據(jù)上測(cè)試策略。

實(shí)時(shí)運(yùn)行:通過(guò)加密貨幣交易所的 API 使用真實(shí)資金部署策略。

使用 Telegram 機(jī)器人:通過(guò) Telegram 控制和監(jiān)控你的策略。

分析和可視化交易歷史:利用保存文件或 SQL 數(shù)據(jù)庫(kù)中的交易數(shù)據(jù)。

Freqtrade 的安裝

讓我們從安裝開(kāi)始,Docker 是所有安裝方法中最便捷的方式。你需要先安裝 Docker 和 docker-compose,然后通過(guò)啟動(dòng) Docker Desktop 確保 Docker 正在運(yùn)行?,F(xiàn)在可以通過(guò)在你想要的目錄中發(fā)出以下命令來(lái)設(shè)置 freqtrade:

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

現(xiàn)在應(yīng)該會(huì)有以下目錄結(jié)構(gòu):

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

要驗(yàn)證 freqtrade 是否已正確安裝并準(zhǔn)備好使用,請(qǐng)運(yùn)行幫助命令:

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

你會(huì)看到以下輸出:

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

幫助命令的輸出列出了所有可用的freqtrade命令。在這一部分,我們將探討最重要的命令及其使用方法。首先是回測(cè)。

回測(cè):freqtrade測(cè)試交易策略的方法

在下面,我們將創(chuàng)建一個(gè)簡(jiǎn)單的策略并在歷史數(shù)據(jù)上進(jìn)行回測(cè)。通過(guò)歷史數(shù)據(jù)測(cè)試策略,模擬策略預(yù)期的交易行為。雖然這不能保證在實(shí)盤(pán)中的表現(xiàn),但它是一個(gè)獲勝/虧損策略的參考。

Freqtrade通過(guò)以下步驟進(jìn)行策略回測(cè):

為配置文件中提供的貨幣對(duì)(如ETH/BTC、ADA/BTC、XRP/BTC等)加載歷史數(shù)據(jù);

調(diào)用策略的bot_loop_start()函數(shù)一次。這在實(shí)時(shí)運(yùn)行中啟動(dòng)一個(gè)新循環(huán),而在回測(cè)中只需要一次;

調(diào)用populate_indicators()方法計(jì)算每個(gè)貨幣對(duì)的技術(shù)指標(biāo);

調(diào)用populate_buy_trend()和populate_sell_trend()方法計(jì)算每個(gè)貨幣對(duì)的買(mǎi)賣(mài)信號(hào);

如果策略實(shí)現(xiàn)了,通過(guò)調(diào)用confirm_trade_entry()和confirm_trade_exit()方法確認(rèn)買(mǎi)賣(mài)交易;

遍歷每個(gè)時(shí)間段(如5分鐘、1小時(shí)、1天等),模擬入場(chǎng)和出場(chǎng)點(diǎn);

生成回測(cè)報(bào)告,匯總所有交易及其在指定期間的盈虧情況。

下載數(shù)據(jù)

要進(jìn)行回測(cè),我們需要從交易所獲取歷史價(jià)格數(shù)據(jù)。讓我們使用以下命令從Binance下載一些數(shù)據(jù):

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

該命令的參數(shù)告訴freqtrade以下內(nèi)容:

-p ETH/BTC - 下載以太坊(ETH)-比特幣(BTC)對(duì)的數(shù)據(jù)
-t 1d - 下載時(shí)間周期為1天的數(shù)據(jù)
--timerange 20200101-20201231 - 下載2020年1月1日至12月31日的數(shù)據(jù)
--exchange binance - 從Binance下載數(shù)據(jù)。在這里,您可以使用freqtrade支持的任何交易所

此命令生成了以下文件:

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

其中包含多個(gè)開(kāi)盤(pán)-最高-最低-收盤(pán)-成交量(OHLCV)數(shù)據(jù)記錄,如下:

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

列的含義如下:

時(shí)間:Unix 時(shí)間戳(毫秒)
開(kāi)盤(pán)價(jià):蠟燭圖開(kāi)盤(pán)價(jià)最高價(jià):蠟燭圖最高價(jià)
最低價(jià):蠟燭圖最低價(jià)
收盤(pán)價(jià):蠟燭圖收盤(pán)價(jià)
成交量:交易量,以基礎(chǔ)貨幣顯示,本例中為 ETH。BTC 為報(bào)價(jià)貨幣。
這些數(shù)據(jù)可以整齊地顯示在以下蠟燭圖表中:

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

如何解讀上面的圖表
上面的圖表使用蠟燭圖來(lái)表示比簡(jiǎn)單線條更多的信息。你可以在下面的圖片中快速了解蠟燭圖的含義。

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

從上一節(jié)中的OHLCV行示例,你可以看到每個(gè)蠟燭圖代表每行數(shù)據(jù)的開(kāi)盤(pán)、最高、最低、收盤(pán)部分。


現(xiàn)在我們已經(jīng)看到了數(shù)據(jù)的示例并理解了每行的含義,讓我們繼續(xù)配置freqtrade以運(yùn)行策略。

Freqtrade配置

我們已經(jīng)有了回測(cè)策略所需的數(shù)據(jù),但我們還需要?jiǎng)?chuàng)建一個(gè)配置文件,這將使我們能夠輕松控制策略的幾個(gè)參數(shù)。

要?jiǎng)?chuàng)建新的配置,我們運(yùn)行以下命令:

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

你會(huì)看到一些初始問(wèn)題,回答如下:

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

下面,我們需要打開(kāi)配置文件并設(shè)置 pair_whitelist = ["ETH/BTC"],這將設(shè)定我們關(guān)注的貨幣對(duì)。然后我們就可以開(kāi)始了。

實(shí)現(xiàn)一個(gè)簡(jiǎn)單的自定義策略 - 移動(dòng)平均交叉

這個(gè)交易策略其實(shí)非常簡(jiǎn)單,我們只需要做對(duì)兩件事:

低價(jià)買(mǎi)入
高價(jià)賣(mài)出

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

真的這么簡(jiǎn)單嗎?有什么需要注意的嗎?難點(diǎn)在于準(zhǔn)確找到實(shí)際的低點(diǎn)和高點(diǎn)。移動(dòng)平均策略背后的想法如下:

你有兩條線:
慢速移動(dòng)平均線(SMA):長(zhǎng)期平均值,代表一般趨勢(shì)。
快速移動(dòng)平均線(FMA):短期平均值,代表當(dāng)前趨勢(shì)。

對(duì)于我們的策略,我們將使用以下指標(biāo):

當(dāng)FMA上穿SMA時(shí)買(mǎi)入,表示上升趨勢(shì)。
當(dāng)FMA下穿SMA時(shí)賣(mài)出,表示下降趨勢(shì)。

這就是所謂的移動(dòng)平均交叉策略。

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

 freqtrade 的策略實(shí)現(xiàn)

讓我們使用 pandas 實(shí)現(xiàn) freqtrade 中的移動(dòng)平均交叉策略。

首先,我們需要?jiǎng)?chuàng)建一個(gè)新的策略文件,該文件將包含我們買(mǎi)賣(mài)信號(hào)背后的邏輯。

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

現(xiàn)在,我們可以在策略文件夾中找到新創(chuàng)建的文件:

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

SimpleMA_strategy.py 

包含一個(gè)自動(dòng)生成的類 SimpleMA_strategy 和幾個(gè)我們需要更新的函數(shù)。

為了定義我們的簡(jiǎn)單策略,我們需要更新以下三個(gè)函數(shù):

populate_indicators()
populate_buy_trend()
populate_sell_trend()
讓我們逐一了解這些函數(shù)。

  1. populate_indicators()

在這里,我們計(jì)算策略所需的指標(biāo),以生成買(mǎi)賣(mài)信號(hào)。

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

根據(jù)我們的策略,我們計(jì)算快線fast_MA(基于最近5根K線圖)和慢線slow_ma(基于前50根K線圖):

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

2. populate_buy_trend()
此函數(shù)生成我們的買(mǎi)入信號(hào),當(dāng)快速移動(dòng)平均線(fast_MA)上穿慢速移動(dòng)平均線(slow_MA)時(shí)觸發(fā)。

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

我們可以通過(guò)更新 populate_buy_trend() 來(lái)加入以下邏輯,以完成這個(gè)任務(wù):

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

使用qtpylib,我們可以輕松找到均線交叉點(diǎn)。本質(zhì)上,上面的代碼在滿足買(mǎi)入條件(crossed_above)時(shí),將買(mǎi)入列設(shè)置為1。

  1. populate_sell_trend()
    與前一個(gè)函數(shù)類似,此函數(shù)生成我們的賣(mài)出信號(hào)。

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

根據(jù)我們的策略,當(dāng)fast_MA線低于slow_MA線時(shí)的代碼如下。

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

我們現(xiàn)在使用crossed_below——與crossed_above相反的信號(hào)——當(dāng)我們的賣(mài)出條件被觸發(fā)時(shí),它會(huì)在賣(mài)出列中標(biāo)記為1。

默認(rèn)情況下,生成的freqtrade策略文件包含更多選項(xiàng),例如ROI(投資回報(bào)率)和止損,后面我們?cè)儆懻?,現(xiàn)在將暫時(shí)禁用它們。

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

既然我們已經(jīng)制定了一個(gè)策略,我們可以測(cè)試它在過(guò)去數(shù)據(jù)上的表現(xiàn)。

回測(cè)策略定義了我們的簡(jiǎn)單策略后,現(xiàn)在我們想使用歷史數(shù)據(jù)對(duì)其進(jìn)行評(píng)估,通過(guò)回測(cè),我們可以在過(guò)去模擬交易,以評(píng)估其表現(xiàn)。

回測(cè)并不能完全反映策略在實(shí)際市場(chǎng)中的表現(xiàn),因?yàn)樵趯?shí)時(shí)市場(chǎng)中,其他因素會(huì)影響回報(bào),例如滑點(diǎn)。

要使用freqtrade進(jìn)行回測(cè),我們可以運(yùn)行以下命令,利用我們剛剛創(chuàng)建的類和函數(shù):

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

命令參數(shù)如下所示:

-p ETH/BTC - 交易 ETH/BTC 對(duì),用我們的 BTC 換取 ETH
--timerange 20200101-20201231 - 回測(cè) 2020 年的數(shù)據(jù),從 2020 年 1 月 1 日到 2020 年 12 月 31 日。
c ./user_data/config-learndatasci.json 使用的是本文前面定義的配置文件。
--starting-balance 1 初始余額為 1 BTC。

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

我們獲得了一份完整的報(bào)告,其中包含在指定期間內(nèi)所有交易的成果。

Freqtrade將報(bào)告分為四個(gè)部分:

  1. 回測(cè)結(jié)果報(bào)告:本部分顯示每個(gè)幣對(duì)的性能報(bào)告,在我們的例子中,只有ETH/BTC。列“平均利潤(rùn)%”顯示所有交易產(chǎn)生的平均利潤(rùn),而列“累計(jì)利潤(rùn)%”匯總了所有利潤(rùn)/虧損。列“總利潤(rùn)百分比”則顯示相對(duì)于初始余額的總利潤(rùn)百分比。
  2. 賣(mài)出原因分析:該報(bào)告向我們展示了賣(mài)出原因的性能。根據(jù)我們的策略,我們只使用了賣(mài)出信號(hào),所以我們只有一行。通常,我們還可以因其他原因賣(mài)出,例如接受的回報(bào)率(ROI)和止損。我們將在系列的下篇文章中看到這一點(diǎn)。
  3. 未平倉(cāng)交易分析:該報(bào)告部分顯示在回測(cè)結(jié)束時(shí)未平倉(cāng)的任何交易。在我們的例子中,我們沒(méi)有任何未平倉(cāng)交易,通常這并不非常重要,因?yàn)樗砹嘶販y(cè)的結(jié)束狀態(tài)。
  4. 總結(jié)指標(biāo):就我個(gè)人而言,這是我通常首先查看的區(qū)域。最需要指出的部分如下:

每日交易次數(shù) - 每天平均完成的交易數(shù)量。我通常尋找每天大約進(jìn)行十筆交易的策略。

總利潤(rùn)百分比 - 以初始余額的百分比表示的利潤(rùn)。

最大回撤 - 最大連續(xù)虧損的金額

市場(chǎng)變動(dòng) - 在指定期間內(nèi)市場(chǎng)增長(zhǎng)/縮減的幅度。當(dāng)交易多個(gè)幣對(duì)時(shí),此指標(biāo)是所有幣對(duì)從指定期間開(kāi)始到結(jié)束的市場(chǎng)變動(dòng)的平均值。在我們的例子中,ETH/BTC市場(chǎng)增長(zhǎng)了24.93%。在不同的市場(chǎng)條件下測(cè)試策略至關(guān)重要,而不僅僅是在上漲市場(chǎng)中。

我們可以看到只發(fā)生了六筆交易。這些交易產(chǎn)生了5.09%的利潤(rùn),初始為1 BTC,最終為1.05086506 BTC。

考慮到涉及的風(fēng)險(xiǎn),這一結(jié)果并不令人印象深刻。然而,這個(gè)策略非常簡(jiǎn)單,有很大的改進(jìn)空間:

與買(mǎi)入并持有相比 僅僅持有ETH,即在測(cè)試期開(kāi)始時(shí)將我們的全部BTC轉(zhuǎn)換為ETH,我們將獲得24.93%的收益(市場(chǎng)變動(dòng)指標(biāo)),但這并不是我們通??梢灶A(yù)期的。我們每次交易只投入了10%的倉(cāng)位,而不是全部。在不同的條件下測(cè)試我們的策略非常重要——不僅在市場(chǎng)上漲時(shí),也在市場(chǎng)下跌時(shí)。

交易更多幣對(duì):我們只考慮了以太坊,這是我們可以交易的數(shù)百種幣之一。這種限制只允許一次進(jìn)行一筆交易,這顯然不是最優(yōu)的。

使用更高級(jí)的策略:我們使用了可以說(shuō)是其中最簡(jiǎn)單的策略之一,僅使用簡(jiǎn)單移動(dòng)平均線作為指標(biāo)。增加復(fù)雜性并不一定意味著更好的性能,但我們可以對(duì)許多指標(biāo)組合進(jìn)行回測(cè),以找到最佳策略。

參數(shù)優(yōu)化:目前,我們尚未嘗試優(yōu)化任何超參數(shù),例如移動(dòng)平均周期、回報(bào)率和止損。

更短的時(shí)間周期:我們只考慮了每日蠟燭圖,這也是為什么機(jī)器人每天只找到大約0.02筆交易,遠(yuǎn)少于人工交易。機(jī)器人通過(guò)更頻繁的交易和查看更詳細(xì)的蠟燭圖,有可能獲得更多利潤(rùn)。

繪制結(jié)果要使用freqtrade的繪圖命令,我們需要修改docker-compose.yml文件。我們唯一需要做的就是注釋掉一行并取消注釋另一行。請(qǐng)查看示例:

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

這會(huì)指示 docker-compose 拉取包含正確繪圖庫(kù)的 freqtrade Docker 鏡像。

現(xiàn)在可以使用 freqtrade plot-dataframe 命令來(lái)可視化數(shù)據(jù)、指標(biāo)以及買(mǎi)賣(mài)信號(hào)。

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

--indicators1 選項(xiàng)定義了我們想要繪制的指標(biāo),即 fast_MA 和 slow_MA。這些指標(biāo)必須在 -s 選項(xiàng)指定的策略內(nèi)定義。

默認(rèn)情況下,這會(huì)在 plot 目錄中創(chuàng)建一個(gè)可用的 plotly html 文件:./user_data/plot/freqtrade-plot-ETH_BTC-1d.html

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

在圖表上,可以觀察機(jī)器人如何按照我們定義的簡(jiǎn)單移動(dòng)平均策略執(zhí)行操作:

  • 當(dāng)fast_MA上穿slow_MA時(shí)買(mǎi)入。
  • 當(dāng)fast_MA下穿slow_MA時(shí)賣(mài)出。

要了解更多plot-dataframe的功能,請(qǐng)運(yùn)行docker-compose run --rm freqtrade plot-dataframe -h或訪問(wèn)相關(guān)文檔。

用Python打造加密貨幣算法交易機(jī)器人-AI.x社區(qū)

總結(jié)

在本文中,我們只是看到了freqtrade可以做的一小部分:

  • 使用pandas定義自定義策略。
  • 使用歷史數(shù)據(jù)進(jìn)行回測(cè)并生成相關(guān)報(bào)告。
  • 使用plotly繪制結(jié)果并可視化模擬交易。

后面我們將了解更多freqtrade的高級(jí)用法,我們將添加更多交易對(duì),討論投資回報(bào)率(ROI)和止損,并正確地定義它們。使用hyperopt優(yōu)化我們的策略,部署一個(gè)實(shí)時(shí)交易機(jī)器人,以及討論更多高級(jí)改進(jìn)方法。


本文轉(zhuǎn)載自公眾號(hào)開(kāi)發(fā)者阿橙 ,作者:橙哥

原文鏈接:??https://mp.weixin.qq.com/s/w7sWQE_GIoIXONjcmktFaA??

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
標(biāo)簽
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦