我們首先先簡單介紹algorithm環境所需要的一些知識,在這邊,algorithm裡面提供的函數可以處理包括訂單調度以及執行等功能,我們在這邊介紹一些核心函數。
initialize(context)
這是一個初始化函數,以context作為一個input,所有參數的初始化與一次性邏輯都寫在這。這裡另一個重點為context為一python 字典,是用儲存整個過程的狀態,所有的變數應該存入context裡面,而非在宣告一個全局變數,存變數的方法(contex.some_attribute)
before_trading_start(context, data)
這個函數會在每天交易開始前被呼叫,使用context(參數)與data(每天資料)作為input。這個函數可作為資料的前處理。
schedule_function(func, day_rule, time_rule)
Quantopian預設在9:30AM-4PM Eastern Time 作交易,schedule_function可以指定時間執行特定的函數。
以上是完整的程式碼:
# Import Algorithm API
import quantopian.algorithm as algo
# Pipeline imports
from quantopian.pipeline import Pipeline
from quantopian.pipeline.data.psychsignal import stocktwits
from quantopian.pipeline.factors import SimpleMovingAverage
from quantopian.pipeline.filters import QTradableStocksUS
def initialize(context):
#Attach pipeline to algorithm
algo.attach_pipeline(
make_pipeline(),
'data_pipeline'
)
algo.schedule_function(
rebalance,
date_rule=algo.date_rules.week_start(),
time_rule=algo.time_rules.market_open()
)
def before_trading_start(context, data):
context.pipeline_data = algo.pipeline_output('data_pipeline')
def make_pipeline():
base_universe = QTradableStocksUS()
sentiment_score = SimpleMovingAverage(
inputs=[stocktwits.bull_minus_bear],
window_length=3
)
return Pipeline(
columns={
'sentiment_score':sentiment_score,
},
screen=(
base_universe &
sentiment_score.notnull()
)
)
def rebalance(context, data):
log.info(context.pipeline_data.head(10))