Пример 2. Работа с фиксированным списком акций.

Общие вопросы

Важное примечание. Все акции, указанные в списке должны торговаться на периоде на котором будет проводиться тестирование алгоритма.
def initialize(context):
    # Указываем список акций, которыми будем торговать
    # Они храняться в специальном объекте Security
    context.stocks = symbols('AAPL', 'IBM', 'CSCO') # Акции: Apple, IBM, Cisco
 
    # Устанавливаем минимальный и максимальный размер открытой позиции
    # в денежном выражении			
    context.max_notional = 1000000.1
    context.min_notional = -1000000.0
    
def handle_data(context, data):
    # Инициализируем позицию в ноль в начале каждого фрейма
    pos = 0
   
    # Пробегаем по всем акциям и вычисляем нашу суммарную позицию по всем акциям
    for stock in context.stocks:
        price = data[stock].price 
        pos = pos + context.portfolio.positions[stock].amount * price
       
    # Пробегаем по всем акциям и если текущая цена меньше средневзвешенной минус 0.5% и лимит
    # по открытой позиции на продажу не достигнут, то продаем.
    # Если текущая цена больше средневзвешенной плюс 0.5% и лимит
    # по открытой позиции на куплю не достигнут, то покупаем.
    # Обновляем открытую позицию
    for stock in context.stocks:   
        vwap = data[stock].vwap(3) # Volume-Weighted Average Price средняя цена взвещенная по объему
        price = data[stock].price  
 
        if price < vwap * 0.995 and pos > context.min_notional:
            order(stock,-100) # Продаем 100 штук акций
            pos = pos - price*100
        elif price > vwap * 1.005 and pos < context.max_notional:
            order(stock,+100) # Покупаем 100 штук акций
            pos = pos + price*100