第一支策略
class Strategy(StrategyBase):
def __init__(self):
# strategy attributes
self.period = 60 * 60
self.subscribed_books = {}
self.options = {}
# define your attributes here
pass
def on_order_state_change(self, order):
pass
def trade(self, candles):
exchange, pair, base, quote = CA.get_exchange_pair()
close_price = candles[exchange][pair][0]['close']
CA.log('Hello world! Current price is {}'.format(close_price))
我們先從這隻 Python 3 程式看起,程式中宣告了 Strategy
類別,此類別繼承了系統內建的 StrategyBase
類別。
建構 Strategy
物件時會執行 __init__(self)
,並設定 period
, subscribed_books
, options
屬性,分別代表:
- period: 設定策略執行週期,單位為秒,初始化後改變週期無效。
- subscribed_books: 單一交易對策略請勿修改。用於開發多交易對策略時,設定交易所及交易對。
- options: 請勿修改,策略參數使用。
Strategy
需包括以下兩方法:
- on_order_state_change(self, order): 當訂單狀態改別時,系統會將訂單 (
order
) 傳入呼叫此方法。 - trade(self, candles): 每個週期,系統會將最新的價量資料 (
candles
) 傳入呼叫此方法。
在此範例中,我們使用 CA.get_exchange_pair()
拿到交易所名稱 (exchange)、交易對名稱 (pair)、基準貨幣 (base)、標價貨幣 (quote),並透過 exchange, pair 在 candles 中找到收盤價資訊。
candles[exchange][pair]
為 K 線資料陣列,從新到舊排序 (candles[exchange][pair][0]
為最新的 K 線資料),最多保存 500 筆, K 線包含以下資料:
open: 開盤價
high: 最高價
low: 最低價
close: 收盤價
volume: 交易量
time: 時間
在 trade()
最後,使用 CA.log()
將字串 'Hello world! Current price is {}'.format(close_price)
印出,回測結束後會顯示在紀錄欄位。