Мои еженедельные/месячные дем-стратегии несовместимы с TradingView.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Мои еженедельные/месячные дем-стратегии несовместимы с TradingView.

Сообщение Anonymous »

Даже после использования GPT я не смог понять точную причину, по которой мой код не работает должным образом.
Вот чего я пытаюсь достичь: 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()
Я нанял разработчика Python, но он не смог разобраться, также попробовал gpt, но не смог найти подходящего решения.
Код ниже для 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»