Skip to main content

第一支策略

class Strategy(StrategyBase):
def __init__(self):
# strategy attributes
self.period = 60 * 60
self.subscribed_books = {
'Binance': {
'pairs': ['ETH-USDT'],
},
}
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) 印出,回測結束後會顯示在紀錄欄位。