跳至主要內容
FinLab

用 Python 投資加密貨幣:用 AWS Lambda 即時更新比特幣交易訊號 (Part 11)

用 AWS Lambda 即時更新加密貨幣交易訊號教學封面

上一個單元中,大家都已經操作好了 AWS Lambda,建立一個簡單的 Hello World。接下來,我們就可以開始建構,比特幣的交易系統了!

首先,可以先在 local 端架設環境,方便我們確認程式可以跑,之後再把它複製到雲端即可。

首先在本地端先安裝 python-binance,用來收報價與下單:

pip install python-binance

再來,撰寫交易系統的程式碼:

顯示程式碼
from binance.client import Client
 
# get price from binance api
client = Client()
klines = client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_4HOUR, "two week ago")
 
# function to calculate sma value
def sma(n):
    return sum([float(k[4]) for k in klines[-n-1:-1]])/n
 
# function to calculate previous sma value
def prev_sma(n):
    return sum([float(k[4]) for k in klines[-n-2:-2]])/n
 
# calculate sma 5 and 65
sma60 = sma(65)
sma5 = sma(5)
 
# calculate previous sma 5 and 65
psma60 = prev_sma(65)
psma5 = prev_sma(5)
 
# golden cross
if sma5 > sma60 and psma5 < psma60:
    print('flip to long')
    
# dead cross
if sma5 < sma60 and psma5 > psma60:
    print('flip to short')
 
# hold for short
if sma5 < sma60 and psma5 < psma60:
    print('hold short')
 
# hold for long
if sma5 > sma60 and psma5 > psma60:
    print('hold long')

以上,我們建構一個簡單的程式碼,每次執行,都可以產生出當前的訊號!這個策略,就是我們在前個單元中,經過優化後的均線策略,這邊我們用不同的方式撰寫一次。

接下來,就是將以上的程式碼,移到 AWS Lambda 上!

首先,跟剛剛一樣,在 Lambda 上,我們可以先來安裝:Binance 的 API,來獲取報價跟下單!

之前,我們只需要使用: pip install python-binance 就可以安裝了。

但 AWS 上要安裝 package 呢?AWS 沒有一台 server 可以下安裝指令,所以我們可以先自己下載:「python-binance」這個 package。

壓縮成壓縮檔,這個檔案以AWS的術語,叫做 AWS Layer ,我已經幫大家打包好了,可以點此下載,並將 AWS Layer 上傳上去,方法如下圖:

上傳 AWS Layer 步驟一:建立 Layer 並上傳壓縮檔

上傳 AWS Layer 步驟二:設定 Layer 名稱與執行環境

就等於是安裝完畢了!

剩下就簡單了! 我們可以到上個單元創建的 Lambda 函數:

選取上個單元創建的 Hello World Lambda 函數

並在這個 lambda 函數中,新增我們剛剛上傳的layer:

在 Lambda 函數中新增剛剛上傳的 Layer 步驟一

在 Lambda 函數中新增剛剛上傳的 Layer 步驟二

最後,我們點選 Hello Lmabda 並往下拉到程式碼編輯視窗:

Lambda 程式碼線上編輯視窗

複製到下方的程式碼,到程式碼編輯視窗之中:

顯示程式碼
import json
from binance.client import Client
 
def lambda_handler(event, context):
    
    client = Client()
    
    klines = client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_4HOUR, "two week ago")
    
    def sma(n):
        return sum([float(k[4]) for k in klines[-n-1:-1]])/n
    
    def prev_sma(n):
        return sum([float(k[4]) for k in klines[-n-2:-2]])/n
    
    sma60 = sma(65)
    sma5 = sma(5)
    
    psma60 = prev_sma(65)
    psma5 = prev_sma(5)
    
    ret = ''
    
    if sma5 > sma60 and psma5 < psma60:
        ret = 'flip to long'
        
    if sma5 < sma60 and psma5 > psma60:
        ret = 'flip to short'
        
    if sma5 < sma60 and psma5 < psma60:
        ret = 'hold short'
    
    if sma5 > sma60 and psma5 > psma60:
        ret = 'hold long'
 
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('btc-trading-signal: ' + ret)
    }

點選「測試」按鈕後,可以用了!

Lambda 執行測試後顯示比特幣交易訊號 hold short 的結果

上圖中,顯示「hold short」代表我們現在是持續偏空的狀態,每次按一下 test , 就可以顯示目前的訊號喔!

目前我們要登入AWS,並且執行 lambda 才能看到訊號,有點麻煩呀!

所以在下一個單元,我們將會分享: 怎麼樣從手機上看到交易訊號 以及把這個交易訊號實際下單的方法! 可以到粉專按讚追蹤,才不會錯過我們每週的更新喔!

如果喜歡我們的文章,也歡迎參考我們最新募資的線上課程「用 Python 理財:打造加密貨幣實戰策略」,在線上課程中,我們會更有系統、更完整地教您如何從無到有,打造10種加密貨幣實戰策略,並且能夠自動化雲端交易!有興趣的話,可以點此觀看課程介紹影片喔!

想建立自己的策略?

用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案

免費開始