上一個單元中,大家都已經操作好了 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 上傳上去,方法如下圖:
就等於是安裝完畢了!
剩下就簡單了!
我們可以到上個單元創建的 Lambda 函數:
並在這個 lambda 函數中,新增我們剛剛上傳的layer:
最後,我們點選 Hello Lmabda 並往下拉到程式碼編輯視窗:
複製到下方的程式碼,到程式碼編輯視窗之中:
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)
}
點選「測試」按鈕後,可以用了!
上圖中,顯示「hold short」代表我們現在是持續偏空的狀態,每次按一下 test ,
就可以顯示目前的訊號喔!
目前我們要登入AWS,並且執行 lambda 才能看到訊號,有點麻煩呀!
所以在下一個單元,我們將會分享:
怎麼樣從手機上看到交易訊號
以及把這個交易訊號實際下單的方法!
可以到粉專按讚追蹤,才不會錯過我們每週的更新喔!
如果喜歡我們的文章,也歡迎參考我們最新募資的線上課程「用 Python 理財:打造加密貨幣實戰策略」,在線上課程中,我們會更有系統、更完整地教您如何從無到有,打造10種加密貨幣實戰策略,並且能夠自動化雲端交易!有興趣的話,可以點此觀看課程介紹影片喔!