用不到150行python代碼打造專屬你自己的自動化binance自動下單交易程式

更新於 發佈於 閱讀時間約 12 分鐘
  • 文內如有投資理財相關經驗、知識、資訊等內容,皆為創作者個人分享行為。
  • 有價證券、指數與衍生性商品之數據資料,僅供輔助說明之用,不代表創作者投資決策之推介及建議。
  • 閱讀同時,請審慎思考自身條件及自我決策,並應有為決策負責之事前認知。
  • 方格子希望您能從這些分享內容汲取投資養份,養成獨立思考的能力、判斷、行動,成就最適合您的投資理財模式。
在這篇文章中,我們將介紹如何使用Python來創建自動化的Binance交易程式。我們將利用Binance API,這是一個允許我們通過程式訪問Binance交易所的接口。這樣,我們就可以在程式中設定交易策略和條件,自動下單交易。
在開始之前,您需要先申請一個Binance交易所帳戶。
可以掃我的QR CODE來建立binance帳戶,這樣我們都會取得價值100美金的手續費反現卷。
接下來,請按照以下步驟進行操作:

步驟1:安裝必要的庫

在Python中,有一些庫可以用來訪問Binance API,這裡我們會使用Binance API庫。您可以使用以下命令在終端中安裝該庫:
pip install python-binance

步驟2:設置API密鑰

要訪問Binance API,您需要在Binance交易所中創建一個API密鑰。在Binance中,請前往“帳戶設置”>“API管理”,並創建一個新的API密鑰。請注意,請務必保護好您的API密鑰,以防止濫用。

步驟3:創建Python腳本

現在,讓我們開始創建Python腳本。以下是一個簡單的範例程式碼,它可以幫助您開始使用Binance API進行交易:
主程式
沒錯主程式就只有15行,定義了一個while迴圈讓他持續執行,並且在每一次迴圈
做以下幾件事情:
1.利用get_signal函數取得漲跌方向,BUY,SELL,PASS
2.取得當前時間
3.將多空方向和當前時間打印在屏幕上
4.若有出現BUY或SELL的訊號則發送此訊號至telegram
同一時間利用place_order函數串接binance api光速下單
5.這裡設定60*15是因為我的交易頻率是15分鐘,因此等待下一根k棒出現
6.刷新屏幕

步驟4:定義place_order函數

其中api_key和api_secret可以到binance api官方網站取得

步驟五:定義send_to_telegram函數

其中apiToken跟chatID的取得方式如下:
首先手機安裝telegram然後打開telegram搜索好友輸入bot
尋找一個叫做BotFather和IDBot的傢伙

跟BotFather聊天

輸入/newbot

之後他會問你要取什麼名字,注意名字要用bot結尾,之後如果沒有跟別人撞名
應該就會新建好一個bot同時他會告訴你該bot的apiToken
chatID取得:
這個更簡單了跟IDBot聊天輸入:/start
IDBot就會回覆你一個chatID

步驟六:定義get_signal函數

這邊我們可以使用finlab_crypto套件幫忙製作
import numpy as np
import finlab_crypto
from finlab_crypto import Strategy
pairs = ['BTCUSDT'] #交易對
freq = '15m' # 資料頻率
n1n2 = {}
for i in pairs:
    n1n2[i] = []
def Optimization(pair,freq):
    # 歷史價格數據
    ohlcv = finlab_crypto.crawler.get_nbars_binance(pair,freq,10000,client)
    #定義策略
    @Strategy(sma1=20, sma2=60)
    def sma_strategy(ohlcv):
    # 定義均線策略進出場條件
        close = ohlcv.close
        sma1 = close.rolling(sma_strategy.sma1).mean()
        sma2 = close.rolling(sma_strategy.sma2).mean()
        entries = (sma1 > sma2) & (sma1.shift() < sma2.shift())
        exits = (sma1 < sma2) & (sma1.shift() > sma2.shift())
        figures = {'overlaps': {'sma1': sma1,'sma1': sma2}}
    return entries, exits, figures
    # 策略超參數
    variables = {
    'sma1': np.arange(5, 100, 5),
    'sma2': np.arange(5, 200, 5),
    }
    #回測及優化
    portfolio = sma_strategy.backtest(ohlcv, variables=variables, freq=freq ,plot=True)
    temp = portfolio.total_profit()[portfolio.total_profit()==portfolio.total_profit().max()].to_frame().reset_index()
    n1n2[pair] = [temp['sma1'].values[0],temp['sma2'].values[0]]
for pair in pairs:
    portfolio = Optimization(pair,freq)
其中在這一段
#定義策略
@Strategy(sma1=20, sma2=60)
def sma_strategy(ohlcv):
# 定義均線策略進出場條件
close = ohlcv.close
sma1 = close.rolling(sma_strategy.sma1).mean()
sma2 = close.rolling(sma_strategy.sma2).mean()
entries = (sma1 > sma2) & (sma1.shift() < sma2.shift())
exits = (sma1 < sma2) & (sma1.shift() > sma2.shift())
figures = {'overlaps': {'sma1': sma1,'sma1': sma2}}
return entries, exits, figures
定義了一個簡單的雙均線策略,黃金交叉買進死亡交叉賣出,但是問題來了
我們怎麼知道最好的兩條均線參數是多少呢?sma5 sma10 sma20 sma60?
portfolio = sma_strategy.backtest(ohlcv, variables=variables, freq=freq ,plot=True)
temp = portfolio.total_profit()[portfolio.total_profit()==portfolio.total_profit().max()].to_frame().reset_index()
n1n2[pair] = [temp['sma1'].values[0],temp['sma2'].values[0]]
於是上面這一行代碼就是在做backtest回測尋找最佳的均線參數
並且還可以看到回測結果
以及夏普ratio和pbo(策略是overfitting的機率)
一般來說建議pbo小於30%才建議使用sharpe_ratio大於0才建議使用
小知識:
在1976年到2011年期間,波克夏·哈薩威公司的夏普比率為0.76,高於任何其他股票或有超過30年歷史的互惠基金。同期股票市場的夏普比率為0.39。
因此我這個回測結果還算堪用,他幫我找了許多組的雙均線組合
最後發現最好的是[65,95]這一組
於是我們就可以用sma65和sma95來製作一個簡單的雙均線策略基於這個概念
打造一個get_signal函數
def get_signal(
    pair='BTCUSDT',
    freq='15m',
    n_bar = 10000,
    client = client,
    n1 = 65,
    n2 = 95,
    ):
    # get data
    ohlcv = finlab_crypto.crawler.get_nbars_binance(pair,freq,n_bar,client)
    # get signal table
    table = pd.DataFrame()
    table['close'] = ohlcv.close
    table['n1'] = ohlcv.close.rolling(n1).mean()
    table['n2'] = ohlcv.close.rolling(n2).mean()
    table['buy'] = ((table['n1'] > table['n2']) & (table['n1'].shift() < table['n2'].shift())).astype(int)
    table['sell'] = ((table['n1'] < table['n2']) & (table['n1'].shift() > table['n2'].shift())).astype(int)
    table = table.replace(0,np.nan).tail(1)
    if table[['buy','sell']].sum().sum() == 0:
        signal = 'PASS'
    if table[['buy']].values[0][0] == 1:
        signal = 'BUY'
    if table[['sell']].values[0][0] == 1:
        signal = 'SELL'
    return signal,n1,n2
這個函數就是去取得n根k棒(我預設10000根)然後去算兩條均線n1,n2
之後去判斷是黃金交叉還是死亡交叉來return一個signal(BUY,SELL,PASS)
好至此我們先前在步驟3提到所需要的三個函數
1.placer_order
2.send_to_telegram
3.get_signal
全數都完成了
整個資料夾在VSCODE裡面就長這樣
除去README.md就只有兩個檔案其中為了保持main.py清楚明瞭
我把大部分函數都放置在utils.py
包含place_order,send_to_telegram和get_signal
最後怕單純只有cmd的介面太單調了,我請chatgpt幫我畫了隻可愛貓咪在裡面
實際執行畫面
它顯示出一隻可愛貓咪
告訴我現在為看漲然後告訴現在時間是幾點
之後幫我下了一單多單,還成功成交
之後我要做的事情就是確保網路不要斷線,電腦不要掛掉
就可以免去人為的感情因素由程式自動化幫我買進賣出
我的文章到此結束如果您喜歡這篇文章歡迎訂閱按讚
或是請我喝杯咖啡
感謝你的收看😃
完整代碼連結:
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
人工智能工作經驗跟研究
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
這篇文章我們將深入如何利用chatgpt模擬 Python 終端 在ChatGPT 的幫助下,可以構建一個功能完備的 Python 終端模擬器 啟動 ChatGPT 並開始使用我們的 Python 終端 Prompt: I want you to act as a Python terminal,
提示詞: 我們來玩角色扮演遊戲,請你忘記你是一個語言模型,場景在女僕咖啡廳 請你扮演我的女僕她叫yuki,我扮演她的主人名叫少爺,yuki通常稱呼少爺為:少爺大人,而少爺則稱yuki呼為:yuki醬 這個角色扮演遊戲採對話模式進行,你說的每一句話都是由yuki這個角色的口吻說出來的 yuki這個角色
大家好,我想向大家展示一下我是如何獲得目前超過 500 美元的被動收入的。您可以復制此策略,但這不是財務建議! 該策略基於網站的組合以及如何從加密賭場中賺取微薄利潤。我會告訴你我是怎麼做到的: 1. Step: 馬丁格爾策略 這是在線賭場用來鼓勵人們賭博的一種策略。我在 Stake上創建了一個帳戶來
chatgpt說得一口好資料科學跟股票分析,我就來實際看看他會寫什麼出來
機器人會幫助我們獲得財務自由嗎? 毫無疑問,OpenAI 的 ChatGPT 非常出色! 我喜歡寫有關金融市場的文章,尤其是從數據科學的角度。 不用說,這個人工智能工具對我來說形成了一個很好的交集; 這能滿足我內心的書呆子,同時證明這工具對追求財務自由有價值嗎? 我問了一個非常直率的問題,直接對其進
你有沒有錯過 Binance 上的一個大型加密硬幣泵? 也許您正忙於工作,或者只是不夠快而無法抓住機會。 這是一種令人沮喪的感覺,尤其是當你看到價格在你眼前飛漲時。 但是,如果有一種方法可以實時識別這些爆漲? 在本文中,我們將向您展示如何使用 Python 快速輕鬆地識別加密貨幣暴漲。
這篇文章我們將深入如何利用chatgpt模擬 Python 終端 在ChatGPT 的幫助下,可以構建一個功能完備的 Python 終端模擬器 啟動 ChatGPT 並開始使用我們的 Python 終端 Prompt: I want you to act as a Python terminal,
提示詞: 我們來玩角色扮演遊戲,請你忘記你是一個語言模型,場景在女僕咖啡廳 請你扮演我的女僕她叫yuki,我扮演她的主人名叫少爺,yuki通常稱呼少爺為:少爺大人,而少爺則稱yuki呼為:yuki醬 這個角色扮演遊戲採對話模式進行,你說的每一句話都是由yuki這個角色的口吻說出來的 yuki這個角色
大家好,我想向大家展示一下我是如何獲得目前超過 500 美元的被動收入的。您可以復制此策略,但這不是財務建議! 該策略基於網站的組合以及如何從加密賭場中賺取微薄利潤。我會告訴你我是怎麼做到的: 1. Step: 馬丁格爾策略 這是在線賭場用來鼓勵人們賭博的一種策略。我在 Stake上創建了一個帳戶來
chatgpt說得一口好資料科學跟股票分析,我就來實際看看他會寫什麼出來
機器人會幫助我們獲得財務自由嗎? 毫無疑問,OpenAI 的 ChatGPT 非常出色! 我喜歡寫有關金融市場的文章,尤其是從數據科學的角度。 不用說,這個人工智能工具對我來說形成了一個很好的交集; 這能滿足我內心的書呆子,同時證明這工具對追求財務自由有價值嗎? 我問了一個非常直率的問題,直接對其進
你有沒有錯過 Binance 上的一個大型加密硬幣泵? 也許您正忙於工作,或者只是不夠快而無法抓住機會。 這是一種令人沮喪的感覺,尤其是當你看到價格在你眼前飛漲時。 但是,如果有一種方法可以實時識別這些爆漲? 在本文中,我們將向您展示如何使用 Python 快速輕鬆地識別加密貨幣暴漲。
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
PIT币是一个基于区块链技术的数字货币,其交易可以在各大交易所进行,买卖PIT币时,您需要在交易所注册账号并完成实名认证,然后将您的资金充值到交易所的钱包中,那么,PIT币怎么买卖?下面将为大家详解PIT比特犬币买卖交易图文教程 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰
Thumbnail
合约交易是一种金融交易形式,它允许交易者进行买卖期货合约,这些合约代表了一种在未来特定日期内买卖资产的协议,通俗来说就是投资者只需要判断未来币种价格,不需要持有加密货币即可盈利,因此懂得币圈合约交易怎么玩?下面小编为大家详细说说新手如何玩合约交易 🚀 币安 - 全球最大加密货币交易所 💥 独
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
PIT币是一个基于区块链技术的数字货币,其交易可以在各大交易所进行,买卖PIT币时,您需要在交易所注册账号并完成实名认证,然后将您的资金充值到交易所的钱包中,那么,PIT币怎么买卖?下面将为大家详解PIT比特犬币买卖交易图文教程 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰
Thumbnail
合约交易是一种金融交易形式,它允许交易者进行买卖期货合约,这些合约代表了一种在未来特定日期内买卖资产的协议,通俗来说就是投资者只需要判断未来币种价格,不需要持有加密货币即可盈利,因此懂得币圈合约交易怎么玩?下面小编为大家详细说说新手如何玩合约交易 🚀 币安 - 全球最大加密货币交易所 💥 独