Общие вопросы
Важное примечание. Все акции, указанные в списке должны торговаться на периоде на котором будет проводиться тестирование алгоритма.
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