Получение функции def для применения.() К моим акциям
У меня проблемы с тем, чтобы заставить мой код работать. Я кодирую python в тестовой среде под названием "Quantopian". Независимо от того,.apply(), series, .pd или любая другая терминология выходит за рамки моего уровня квалификации. (при условии, что я даже на правильном пути, лол)
Чего я пытаюсь добиться: взяв пару акций и постоянно рассчитывая MACD. Затем, когда индикатор удовлетворяет определенному условию, алгоритм покупает или продает эту конкретную акцию.
Что MACD упрощенно: Индикатор импульса, который смотрит на исторические данные, используя 12, 26 и 9-дневные экспоненциальные скользящие средние и сравнивая их друг с другом. Я разработал свою собственную функцию, это не моя проблема....
Справка: я пытаюсь применить его к пулу акций в моей вселенной, чтобы постоянно вычислять MACD каждую минуту.
Где я в замешательстве: я определил функцию MACD, но не знаю, как заставить ее вычислять каждую минуту для любых запасов в моем пуле.
КОД:
import numpy as np
import math
import talib as ta
import pandas as pd
def initialize(context):
set_commission(commission.PerTrade(cost=10))
context.stocks = symbols('AAPL', 'GOOG_L')
def handle_data(context, data):
for stock in context.stocks:
prices_fast = data.history(context.stocks, "close", 390, "1m").resample("30min").dropna()
prices_slow = data.history(context.stocks, "close", 390, "1m").resample("30min").dropna()
prices_signal = data.history(context.stocks, "close", 390, "1m").resample("30min").dropna()
curr_price = data.history(context.stocks, "price", 30, "1m").resample("30min")[-1:].dropna()
series = pd.Series([stock]).dropna()
macd = series.apply(MACD)
macd_func = stock.apply(MACD)
if macd_func[stock] > 0:
order(stock, 1)
print macd_func
record(macd=macd_func[stock])
def MACD(prices_fast, prices_slow, prices_signal, curr_price):
# Setting MACD Conditions:
slow = 26
fast = 12
signal = 9
# Calcualting Averages:
avg_fast = pd.rolling_sum(prices_fast[:fast], fast)[-1:] / fast
avg_slow = pd.rolling_sum(prices_slow[:slow], slow)[-1:] / slow
avg_signal = pd.rolling_sum(prices_signal[:signal], signal)[-1:] / signal
# Calculating the Weighting Multipliers:
A = 2 / (fast + 1)
B = 2 / (slow + 1)
C = 2 / (signal + 1)
# Calculating the Exponential Moving Averages:
EMA_fast = (curr_price * A) + [avg_fast * (1 - A)]
EMA_slow = (curr_price * B) + [avg_slow * (1 - B)]
EMA_signal = (curr_price * C) + [avg_signal * (1 - C)]
# Calculating MACD Histogram:
macd = EMA_fast - EMA_slow - EMA_signal
Если бы кто-то мог дать мне ручку, я был бы очень признателен!
Большое большое спасибо,
Майк