Вот чего я пытаюсь достичь: p>
Для еженедельных сигналов: Моя цель — получать сигналы на покупку и продажу сразу после закрытия каждой пятницы. Я хочу, чтобы эти сигналы генерировались сразу после закрытия рынка в конце недели, чтобы я мог действовать по ним без каких-либо задержек.
Для ежемесячных сигналов: аналогично я хочу получать сигналы покупки и продажи сразу после закрытия каждого месяца. Эти сигналы должны срабатывать сразу после закрытия рынка в последний торговый день месяца.
Однако, несмотря на мои усилия, код, похоже, не работает правильно. Вместо получения сигналов сразу после закрытия недели или месяца, похоже, наблюдается задержка. Я не уверен, почему это происходит, и мне не удалось точно определить причину проблемы.
Цель состоит в том, чтобы сигналы отражали самые последние данные, как только они будут получены. доступно, но текущая реализация этого не обеспечивает.
Приведенный ниже код предназначен для ежемесячных и еженедельных данных.
Код: Выделить всё
for stock in t2_list:
# Download stock data for both intervals
stock_data_weekly = download_weekly_data(stock, start_date, end_date)
stock_data_weekly['Open'] = stock_data_weekly['Open'].round(2)
stock_data_weekly['Close'] = stock_data_weekly['Close'].round(2)
stock_data_weekly['High'] = stock_data_weekly['High'].round(2)
stock_data_weekly['Low'] = stock_data_weekly['Low'].round(2)
stock_data_monthly = download_monthly_data(stock, start_date, end_date)
stock_data_monthly['Open'] = stock_data_monthly['Open'].round(2)
stock_data_monthly['Close'] = stock_data_monthly['Close'].round(2)
stock_data_monthly['High'] = stock_data_monthly['High'].round(2)
stock_data_monthly['Low'] = stock_data_monthly['Low'].round(2)
print(stock, len(stock_data_weekly), len(stock_data_monthly))
sleep(2)
if len(stock_data_weekly) >= 71:
#stock_data_weekly = calculate_macd(stock_data_weekly)
stock_data_weekly = calculate_macd_dema(stock_data_weekly)
#print(stock_data_weekly.iloc[:, -8:])
stock_data_weekly = check_crossovers(stock_data_weekly)
# tradingview_data_weekly = format_tradingview_output(stock_data_weekly)
for i, r in stock_data_weekly.iterrows():
sent_date = i + timedelta(days = 6)
date_str = sent_date.strftime('%Y-%m-%d') # Adjust format as needed
previous_friday = datetime.now() - timedelta(days = dates_diff[datetime.now().weekday()] + 1 )
pre_previous_friday =previous_friday - timedelta(days = 7 )
if r['Crossover'] != 'Neutral' and i>pre_previous_friday and i
#pass
print('weekly', date_str, stock, r['Crossover'])
webhook_discord(webhook_url_weekly, date_str, r['Crossover'], stock, r['Crosspoint'])
sleep(5)
if len(stock_data_monthly) >= 71:
stock_data_monthly = calculate_macd_dema(stock_data_monthly)
stock_data_monthly = check_crossovers(stock_data_monthly)
for i , r in stock_data_monthly.iterrows():
stock_month = i.month
curr_month = datetime.now().month
if curr_month == 1:
acc_month = 12
else:
acc_month = curr_month-1
sent_date = i + timedelta(days = 33)
date_str = sent_date.strftime('%Y-%m') # Adjust format as needed
if r['Crossover'] != 'Neutral' and stock_month==acc_month:
print('monthly', date_str, stock, r['Crossover'])
webhook_discord(webhook_url_monthly, date_str, r['Crossover'], stock, r['Crosspoint'])
#pass
sleep(5)
if __name__ == "__main__":
main()
Код ниже для MACD дема.
Код: Выделить всё
def calculate_macd_dema(df, short_window=12, long_window=26, signal_window=9):
# Calculate Short-term DEMA
def ema(series, span):
ta_ema = ta.ema(series, span)
return ta_ema
def dema(series, span):
ema1 = ema(series, span)
ema2 = ema(ema1, span)
return 2 * ema1 - ema2
# Parameters
sma = 12
lma = 26
tsp = 9
# Calculate DEMAs
df['DEMAfast'] = dema(df['Close'], sma)
df['DEMAslow'] = dema(df['Close'], lma)
# Calculate MACD Line and Signal Line
df['MACD_DEMA'] = df['DEMAfast'] - df['DEMAslow']
#print(df['MACD_DEMA'])
df['Signal_Line'] = dema(df['MACD_DEMA'], tsp)
df['MACDZeroLag'] = df['MACD_DEMA'] - df['Signal_Line']
return df
# Check for MACD and Signal Line crossovers
def check_crossovers(df):
# crossovers = []
# for i in range(1, len(df)):
# if df['MACD_DEMA'].iloc[i] > df['Signal_Line'].iloc[i] and df['MACD_DEMA'].iloc[i - 1] = df['Signal_Line'].iloc[i - 1]:
# crosspoint = df['Close'].iloc[i]
# crossovers.append((df.index[i], "Sell", crosspoint))
# else:
# crossovers.append((df.index[i], "Neutral", None)) # None when there's no crosspoint
df_macd_dema_1 = df['MACD_DEMA']
df_macd_dema_2 = df['MACD_DEMA'].shift(1)
df_signal_1 = df['Signal_Line']
df_signal_2 = df['Signal_Line'].shift(1)
df['Crossover'] = np.where((df_macd_dema_1 > df_signal_1) & (df_macd_dema_2 = df_signal_2), 'Sell', 'Neutral'))
df['Crosspoint'] = np.where( (df['Crossover']=='Buy') | (df['Crossover']=='Sell'), df['Close'], None)
return df
Подробнее здесь: https://stackoverflow.com/questions/792 ... radingview