溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用 Python 怎么實現自動交易加密貨幣

發(fā)布時間:2021-06-12 16:48:06 來源:億速云 閱讀:539 作者:Leah 欄目:編程語言

使用 Python 怎么實現自動交易加密貨幣,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。


工具鏈

將在本教程使用如下工具:

  • 幣安專業(yè)交易視圖(已經有其他人做了數據可視化,所以不需要重復造輪子)

  • Jupyter 筆記本:用于數據科學任務

  • Pythonic:作為整體框架

  • PythonicDaemon :作為終端運行(僅適用于控制臺和 Linux)

數據挖掘

為了使加密貨幣交易機器人盡可能做出正確的決定,以可靠的方式獲取資產的美國線open-high-low-close chart(OHLC)數據是至關重要。你可以使用 Pythonic 的內置元素,還可以根據自己邏輯來對其進行擴展。

一般的工作流程:

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術社區(qū)

  2. 與幣安時間同步

  3. 下載 OHLC 數據

  4. 從文件中把 OHLC 數據加載到內存

  5. 比較數據集并擴展更新數據集

這個工作流程可能有點夸張,但是它能使得程序更加健壯,甚至在停機和斷開連接時,也能平穩(wěn)運行。

一開始,你需要 幣安 OHLC 查詢Binance OHLC Query 元素和一個 基礎操作Basic Operation 元素來執(zhí)行你的代碼。

使用 Python 怎么實現自動交易加密貨幣

數據挖掘工作流程

OHLC 查詢設置為每隔一小時查詢一次 TRXBTC 資產對(波場/比特幣)。

使用 Python 怎么實現自動交易加密貨幣

配置 OHLC 查詢元素

其中輸出的元素是 Pandas DataFrame。你可以在 基礎操作 元素中使用 輸入input 變量來訪問 DataFrame。其中,將 Vim 設置為 基礎操作 元素的默認代碼編輯器。

使用 Python 怎么實現自動交易加密貨幣

使用 Vim 編輯基礎操作元素

具體代碼如下:

import pickle, pathlib, osimport pandas as pd outout = None if isinstance(input, pd.DataFrame):    file_name = 'TRXBTC_1h.bin'    home_path = str(pathlib.Path.home())    data_path = os.path.join(home_path, file_name)     try:        df = pickle.load(open(data_path, 'rb'))        n_row_cnt = df.shape[0]        df = pd.concat([df,input], ignore_index=True).drop_duplicates(['close_time'])        df.reset_index(drop=True, inplace=True)        n_new_rows = df.shape[0] - n_row_cnt        log_txt = '{}: {} new rows written'.format(file_name, n_new_rows)    except:        log_txt = 'File error - writing new one: {}'.format(e)        df = input     pickle.dump(df, open(data_path, "wb" ))    output = df

首先,檢查輸入是否為 DataFrame 元素。然后在用戶的家目錄(~/)中查找名為 TRXBTC_1h.bin 的文件。如果存在,則將其打開,執(zhí)行新代碼段(try 部分中的代碼),并刪除重復項。如果文件不存在,則觸發(fā)異常并執(zhí)行 except 部分中的代碼,創(chuàng)建一個新文件。

只要啟用了復選框 日志輸出log output,你就可以使用命令行工具 tail 查看日志記錄:

$ tail -f ~/Pythonic_2020/Feb/log_2020_02_19.txt

出于開發(fā)目的,現在跳過與幣安時間的同步和計劃執(zhí)行,這將在下面實現。

準備數據

下一步是在單獨的 網格Grid 中處理評估邏輯。因此,你必須借助返回元素Return element 將 DataFrame 從網格 1 傳遞到網格 2 的第一個元素。

在網格 2 中,通過使 DataFrame 通過 基礎技術分析Basic Technical Analysis 元素,將 DataFrame 擴展包含 EMA 值的一列。

使用 Python 怎么實現自動交易加密貨幣

在網格 2 中技術分析工作流程

配置技術分析元素以計算 25 個值的 EMA。

使用 Python 怎么實現自動交易加密貨幣

配置技術分析元素

當你運行整個程序并開啟 技術分析Technical Analysis 元素的調試輸出時,你將發(fā)現 EMA-25 列的值似乎都相同。

使用 Python 怎么實現自動交易加密貨幣

輸出中精度不夠

這是因為調試輸出中的 EMA-25 值僅包含六位小數,即使輸出保留了 8 個字節(jié)完整精度的浮點值。

為了能進行進一步處理,請?zhí)砑?nbsp;基礎操作 元素:

使用 Python 怎么實現自動交易加密貨幣

網格 2 中的工作流程

使用 基礎操作 元素,將 DataFrame 與添加的 EMA-25 列一起轉儲,以便可以將其加載到 Jupyter 筆記本中;

使用 Python 怎么實現自動交易加密貨幣

將擴展后的 DataFrame 存儲到文件中

評估策略

在 Juypter 筆記本中開發(fā)評估策略,讓你可以更直接地訪問代碼。要加載 DataFrame,你需要使用如下代碼:

使用 Python 怎么實現自動交易加密貨幣

用全部小數位表示

你可以使用 iloc 和列名來訪問最新的 EMA-25 值,并且會保留所有小數位。

你已經知道如何來獲得最新的數據。上面示例的最后一行僅顯示該值。為了能將該值拷貝到不同的變量中,你必須使用如下圖所示的 .at 方法方能成功。

你也可以直接計算出你下一步所需的交易參數。

使用 Python 怎么實現自動交易加密貨幣

買賣決策

確定交易參數

如上面代碼所示,我選擇 0.009 作為交易參數。但是我怎么知道 0.009 是決定交易的一個好參數呢? 實際上,這個參數確實很糟糕,因此,你可以直接計算出表現最佳的交易參數。

假設你將根據收盤價進行買賣。

使用 Python 怎么實現自動交易加密貨幣

回測功能

在此示例中,buy_factor 和 sell_factor 是預先定義好的。因此,發(fā)散思維用直接計算出表現最佳的參數。

使用 Python 怎么實現自動交易加密貨幣

嵌套的 for 循環(huán),用于確定購買和出售的參數

這要跑 81 個循環(huán)(9x9),在我的機器(Core i7 267QM)上花費了幾分鐘。

5Af65b11f637ce55589036c357df10.png" target="_blank"><img src="https://s5.51cto.com/oss/202103/29/895Af65b11f637ce55589036c357df10.png" width="auto" border="0" height="auto" alt="" title="">

將利潤與相關的交易參數按降序排序

當你打印出列表時,你會看到 0.002 是最好的參數。

使用 Python 怎么實現自動交易加密貨幣

交易要素和收益的有序列表

當我在 2020 年 3 月寫下這篇文章時,價格的波動還不足以呈現出更理想的結果。我在 2 月份得到了更好的結果,但即使在那個時候,表現最好的交易參數也在 0.002 左右。

分割執(zhí)行路徑

現在開始新建一個網格以保持邏輯清晰。使用 返回 元素將帶有 EMA-25 列的 DataFrame 從網格 2 傳遞到網格 3 的 0A 元素。

在網格 3 中,添加 基礎操作 元素以執(zhí)行評估邏輯。這是該元素中的代碼:

使用 Python 怎么實現自動交易加密貨幣

實現評估策略

如果輸出 1 表示你應該購買,如果輸出 2 則表示你應該賣出。 輸出 0 表示現在無需操作。使用 分支Branch 元素來控制執(zhí)行路徑。

5A397c4d0c592d6c5e8d54b81c.png" target="_blank">

使用 Python 怎么實現自動交易加密貨幣

分支元素:網格 3,2A 位置

因為 0 和 -1 的處理流程一樣,所以你需要在最右邊添加一個分支元素來判斷你是否應該賣出。

使用 Python 怎么實現自動交易加密貨幣

分支元素:網格 3,3B 位置

網格 3 應該現在如下圖所示:

使用 Python 怎么實現自動交易加密貨幣

網格 3 的工作流程

下單

由于無需在一個周期中購買兩次,因此必須在周期之間保留一個持久變量,以指示你是否已經購買。

你可以利用 Stack 元素來實現。顧名思義,棧元素表示可以用任何 Python 數據類型來放入的基于文件的棧。

你需要定義棧僅包含一個布爾類型,該布爾類型決定是否購買了(True)或(False)。因此,你必須使用 False 來初始化棧。例如,你可以在網格 4 中簡單地通過將 False 傳遞給棧來進行設置。

使用 Python 怎么實現自動交易加密貨幣

將 False 變量傳輸到后續(xù)的棧元素中

在分支樹后的棧實例可以進行如下配置:

使用 Python 怎么實現自動交易加密貨幣

設置棧元素

在棧元素設置中,將 對輸入的操作Do this with input 設置成 Nothing。否則,布爾值將被 1 或 0 覆蓋。

該設置確保僅將一個值保存于棧中(True 或 False),并且只能讀取一個值(為了清楚起見)。

在棧元素之后,你需要另外一個 分支 元素來判斷棧的值,然后再放置 幣安訂單Binance Order 元素。

使用 Python 怎么實現自動交易加密貨幣

判斷棧中的變量

將幣安訂單元素添加到分支元素的 True 路徑。網格 3 上的工作流現在應如下所示:

使用 Python 怎么實現自動交易加密貨幣

網格 3 的工作流程

幣安訂單元素應如下配置:

使用 Python 怎么實現自動交易加密貨幣

編輯幣安訂單元素

你可以在幣安網站上的帳戶設置中生成 API 和密鑰。

使用 Python 怎么實現自動交易加密貨幣

在幣安賬戶設置中創(chuàng)建一個 API 密鑰

在本文中,每筆交易都是作為市價交易執(zhí)行的,交易量為 10,000 TRX(2020 年 3 月約為 150 美元)(出于教學的目的,我通過使用市價下單來演示整個過程。因此,我建議至少使用限價下單。)

如果未正確執(zhí)行下單(例如,網絡問題、資金不足或貨幣對不正確),則不會觸發(fā)后續(xù)元素。因此,你可以假定如果觸發(fā)了后續(xù)元素,則表示該訂單已下達。

這是一個成功的 XMRBTC 賣單的輸出示例:

使用 Python 怎么實現自動交易加密貨幣

成功賣單的輸出

該行為使后續(xù)步驟更加簡單:你可以始終假設只要成功輸出,就表示訂單成功。因此,你可以添加一個 基礎操作 元素,該元素將簡單地輸出 True 并將此值放入棧中以表示是否下單。

如果出現錯誤的話,你可以在日志信息中查看具體細節(jié)(如果啟用日志功能)。

5A5046bc2.png" target="_blank"><img src="https://s6.51cto.com/oss/202103/29/adafdf0329f7dd08340b4c15A5046bc2.png" width="600" border="0" height="auto" alt="" title="">

在網格 1,1A 位置的幣安調度器

由于幣安調度器元素只執(zhí)行一次,因此請在網格 1 的末尾拆分執(zhí)行路徑,并通過將輸出傳遞回幣安調度器來強制讓其重新同步。

使用 Python 怎么實現自動交易加密貨幣

網格 1:拆分執(zhí)行路徑

5A 元素指向 網格 2 的 1A 元素,并且 5B 元素指向網格 1 的 1A 元素(幣安調度器)。

部署

你可以在本地計算機上全天候 7&times;24 小時運行整個程序,也可以將其完全托管在廉價的云系統(tǒng)上。例如,你可以使用 Linux/FreeBSD  云系統(tǒng),每月約 5 美元,但通常不提供圖形化界面。如果你想利用這些低成本的云,可以使用 PythonicDaemon,它能在終端中完全運行。

使用 Python 怎么實現自動交易加密貨幣

PythonicDaemon 控制臺

PythonicDaemon 是基礎程序的一部分。要使用它,請保存完整的工作流程,將其傳輸到遠程運行的系統(tǒng)中(例如,通過安全拷貝協(xié)議Secure Copy SCP),然后把工作流程文件作為參數來啟動 PythonicDaemon:

$ PythonicDaemon trading_bot_one

為了能在系統(tǒng)啟動時自啟 PythonicDaemon,可以將一個條目添加到 crontab 中:

# crontab -e

5Affe9f04ec1f392dab2124b8.png" target="_blank"><img src="https://s6.51cto.com/oss/202103/29/a0b9ace5Affe9f04ec1f392dab2124b8.png" width="auto" border="0" height="auto" alt="" title="">

在 Ubuntu 服務器上的 Crontab

看完上述內容,你們掌握使用 Python 怎么實現自動交易加密貨幣的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI