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

上一個單元中,
大家都已經操作好了 AWS Lambda
建立一個簡單的 Hello World

接下來,
我們就可以開始建構
比特幣的交易系統了

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

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

1
pip install python-binance

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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 並往下拉到程式碼編輯視窗:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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 才能看到訊號
有點麻煩呀!

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

文章不錯,影音課程更讚:


或我們按個 鼓勵一下吧!