Strategi dagangan momentum arah aliran berbilang masa

ATR EMA VWAP CHoCH BOS CVD
Tarikh penciptaan: 2025-05-15 15:53:29 Akhirnya diubah suai: 2025-05-15 15:53:29
Salin: 1 Bilangan klik: 354
2
fokus pada
319
Pengikut

Strategi dagangan momentum arah aliran berbilang masa Strategi dagangan momentum arah aliran berbilang masa

Gambaran keseluruhan

Strategi perdagangan dinamika trend pelbagai kitaran masa adalah sistem perdagangan komprehensif yang menyediakan pedagang dengan alat yang kuat untuk menangkap trend pasaran dan meminimumkan isyarat palsu dengan mengintegrasikan analisis trend pelbagai kitaran masa, isyarat dinamika, pengesahan jumlah transaksi dan konsep dana pintar (perubahan ciri struktur CHoCH dan struktur BOS). Komponen “AI” yang unik dalam strategi menganalisis trend dalam pelbagai kitaran masa, menyediakan dashboard yang jelas dan boleh dikendalikan, menjadikannya mudah digunakan oleh pedagang pemula dan berpengalaman.

Prinsip Strategi

Strategi ini adalah satu sistem perdagangan yang konsisten yang dicipta dengan menggabungkan beberapa komponen:

  1. Analisis trend pelbagai tempoh masaStrategi: menggunakan tiga tempoh masa ((1 jam, 4 jam, 24 jam) untuk menilai trend, menggunakan purata bergerak indeks ((EMA) dan purata harga bertimbangan kuantiti ((VWAP)). Apabila harga berada di atas EMA dan VWAP, trend dianggap sebagai bullish; apabila harga berada di bawahnya, ia dianggap sebagai bearish; jika tidak, ia adalah neutral.

  2. Penapis tenaga: mengukur peratusan perubahan harga di antara tiang berturut-turut dan menyesuaikan dengan kadar turun naik (tetinggi) berdasarkan purata julat sebenar[ATR]) untuk membuat perbandingan. Ini memastikan perdagangan hanya dilakukan semasa pergerakan harga yang ketara, menyaring keadaan pergerakan rendah.

  3. Penapis kuantiti (pilihan)Periksa sama ada jumlah dagangan semasa melebihi purata jangka panjang dan menunjukkan perubahan jumlah dagangan jangka pendek yang positif. Ini mengesahkan penyertaan pasaran yang kuat dan mengurangkan risiko pecah palsu.

  4. Penembusan penapis (pilihan): Minta harga untuk menembusi (membeli) atau menembusi (menjual) puncak/rendah terkini, pastikan isyarat selaras dengan perubahan struktur pasaran.

  5. Konsep kewangan pintar (CHoCH/BOS)

    • Perubahan ciri struktur ((CHoCH): Potensi reversal dikesan apabila harga turun atau naik melalui titik tinggi aksen terdekat ((jual) atau melalui titik rendah aksen terdekat ((beli), masing-masing.
    • Pelanggaran struktur ((BOS): Apabila harga dengan momentum yang kuat menembusi titik rendah aksen terkini ((jual) atau menembusi titik tinggi aksen terkini ((beli), mengesahkan trend berterusan. Isyarat-isyarat ini digambarkan sebagai garis-garis mendatar yang diberi label, menjadikan tahap penting mudah dilihat.
  6. Dashboard trend AISkor trend yang dikira dengan menggabungkan arah trend, momentum dan kadar turun naik dalam pelbagai bingkai masa. Skor lebih tinggi daripada 0.5 menunjukkan trend “naik”, dan kurang daripada -0.5 menunjukkan trend “turun”, jika tidak, ia adalah “netral”. Skor menunjukkan kekuatan trend (peratusan), keyakinan AI (berdasarkan kesesuaian trend), dan keseluruhan latar belakang pasaran yang terkumpul dalam perbezaan trafik (CVD).

  7. Garis trend dinamikGaris sokongan dan rintangan digambarkan berdasarkan pergerakan rendah dan tinggi terkini dalam tempoh yang ditentukan oleh pengguna. Garis ini menyesuaikan diri dengan keadaan pasaran dan berwarna mengikut kekuatan trend.

Kelebihan Strategik

Strategi dagangan kuantiti trend dinamik pelbagai kitaran masa mempunyai beberapa kelebihan yang ketara:

  1. Mengurangkan isyarat palsuStrategi ini meminimumkan perdagangan dalam pasaran yang tidak menentu atau rendah kepercayaan dengan menuntut trend, momentum, jumlah transaksi dan keserasian penapis penembusan.

  2. Sesuaikan diri dengan pasaran: Nilai terhad dinamik berdasarkan ATR boleh disesuaikan dengan dinamik turun naik, memastikan isyarat kekal relevan di pasaran trend dan pasaran rantau.

  3. Mempermudahkan pengambilan keputusan: Dashboard AI mengintegrasikan data pelbagai kitaran masa yang rumit ke dalam jadual yang mesra pengguna, menghilangkan keperluan untuk analisis manual.

  4. Menggunakan wang pintar:CHoCH dan BOS signal capture agencies price action patterns, memberikan kelebihan kepada peniaga untuk mengenal pasti reversal dan perlanjutan.

  5. Kejelasan visualStrategi: Menjadikan struktur pasaran lebih jelas dengan menandai tahap, isyarat, dan garis trend yang penting, membantu peniaga memahami lebih baik tingkah laku harga.

  6. Pengurusan risiko terbina dalam: Tahap penutupan dan hentian yang telah ditentukan memupuk pengurusan risiko yang disiplin, yang penting untuk kejayaan dagangan jangka panjang.

  7. Amaran awalDengan isyarat “siap sedia”, peniaga boleh diberi amaran sebelum setup sepenuhnya berkembang, yang membolehkan lebih banyak masa untuk persediaan dan perancangan.

Risiko Strategik

Walaupun terdapat banyak kelebihan, strategi ini mempunyai risiko yang berpotensi:

  1. Perangkap pengoptimuman parameterParameter strategi yang terlalu optimum boleh menyebabkan kecocokan kurva yang tidak berfungsi dengan baik dalam keadaan pasaran masa depan. Penyelesaian adalah dengan melakukan pengulangan yang luas di beberapa pasaran dan tempoh masa untuk mencari set parameter yang mantap.

  2. Isyarat kelewatanPenggunaan pelbagai penapis boleh menyebabkan isyarat melambatkan pergerakan harga, kadang-kadang terlepas titik masuk yang ideal. Penyelesaian adalah dengan menyesuaikan parameter yang lebih sensitif terhadap kelajuan pasaran, seperti panjang sumbu pusat dan nilai setinggi.

  3. Salah mengenal pasti trendDalam pasaran yang sangat tidak menentu atau tanpa arah, penilaian trend mungkin tidak tepat. Penyelesaian adalah untuk mengurangkan perdagangan atau menambah keperluan penapis yang lebih ketat dalam keadaan ini.

  4. Kekurangan dalam pengurusan dana: Stop dan stop loss yang ditetapkan mungkin tidak sesuai untuk semua keadaan pasaran. Penyelesaian adalah untuk menyesuaikan mereka dengan nilai berdasarkan ATR untuk menyesuaikan dengan turun naik semasa.

  5. Komputer intensifKompleksiti strategi mungkin menyebabkan masalah prestasi pada platform tertentu, terutamanya apabila menganalisis banyak data sejarah. Penyelesaian adalah untuk mengehadkan jangka masa pengemasan semula atau mempermudahkan pengiraan yang tidak penting.

  6. Ketergantungan dataStrategi bergantung pada data jangka masa yang tepat, yang mungkin tidak boleh digunakan dalam semua persekitaran perdagangan. Penyelesaian adalah untuk melaksanakan pilihan alternatif yang boleh dipercayai, seperti pengiraan nilai tempatan yang ditunjukkan dalam kod.

  7. Keutamaan untuk pasaran yang sangat mudah bergerakKaedah ini mungkin menghasilkan lebih banyak isyarat yang salah di pasaran yang kurang cair. Penyelesaian adalah dengan memberi tumpuan kepada pasangan mata wang utama, saham yang dipegang secara meluas, dan mata wang kripto utama.

Arah pengoptimuman strategi

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Parameter penyesuaianMampu menyesuaikan parameter secara automatik, seperti mengoptimumkan nilai terhad dinamik berdasarkan data kadar turun naik sejarah. Ini dapat meningkatkan kemampuan strategi untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.

  2. Integrasi Pembelajaran Mesin: Menggunakan algoritma pembelajaran mesin untuk mengenal pasti kombinasi parameter terbaik, atau untuk meramalkan prestasi strategi di bawah keadaan pasaran tertentu. Ini boleh dilakukan dengan menganalisis data prestasi sejarah untuk meningkatkan lagi aspek “AI” strategi.

  3. Penunjuk Sentimen PasaranMenambah data sentimen pasaran luaran, seperti indeks VIX atau analisis sentimen media sosial, memberikan latar belakang yang lebih luas untuk membuat keputusan perdagangan. Ini dapat membantu strategi untuk mengelakkan perdagangan dalam keadaan pasaran yang melampau.

  4. Penapis masaMenambah penapis berdasarkan pola masa turun naik pasaran, mengelakkan perdagangan semasa turun naik rendah yang diketahui (seperti sesi pertengahan Asia). Ini dapat mengurangkan jumlah isyarat berkualiti rendah.

  5. Analisis korelasiTambah pemeriksaan kesesuaian antara aset untuk memastikan perdagangan selaras dengan pergerakan pasaran yang berkaitan (contohnya, indeks dolar dalam perdagangan EUR / USD). Ini boleh memberikan pengesahan isyarat tambahan.

  6. Pengurusan wang yang lebih baikMempunyai tahap hentian / kehilangan dinamik berdasarkan kadar turun naik, dan menambah peraturan pengurusan wang, seperti menyesuaikan saiz kedudukan dengan pertumbuhan akaun. Ini akan meningkatkan pulangan yang disesuaikan dengan risiko jangka panjang.

  7. Optimasi prestasi: Mempermudahkan kod, mengurangkan pengiraan yang tidak perlu, terutamanya pada garis trend dan paparan jadual, untuk meningkatkan tindak balas strategi dalam perdagangan masa nyata.

  8. Data tidak berkaitanStrategi penambahbaikan untuk menangani gangguan data atau nilai yang hilang dengan lebih elegan, memastikan ketangguhan dalam keadaan yang tidak sesuai.

ringkaskan

Strategi perdagangan dinamik trend jangka masa berbilang menyediakan sistem perdagangan yang komprehensif yang menggabungkan analisis teknikal tradisional, konsep dana pintar dan analisis trend yang didorong oleh AI yang unik. Kekuatannya terletak pada mekanisme penapisan dan pengesahan bertingkat yang memastikan bahawa isyarat perdagangan hanya dihasilkan dalam keadaan kebarangkalian tinggi.

Satu aspek yang sangat inovatif dalam strategi ini adalah penggabungan maklumat trend jangka masa berbilang ke dalam dashboard visual yang intuitif, yang membolehkan peniaga menilai keadaan pasaran dengan cepat tanpa analisis manual yang rumit.

Dengan menggabungkan konsep CHoCH dan BOS dengan bijak, strategi ini dapat menangkap perubahan halus dalam psikologi pasaran, yang biasanya menandakan trend berterusan atau potensi pembalikan. Penggunaan ATR untuk menyesuaikan threshold memastikan strategi dapat disesuaikan dengan keadaan turun naik yang berbeza, menjadikannya sesuai untuk pelbagai keadaan pasaran.

Walaupun terdapat beberapa risiko dan batasan, sistem yang sudah kuat ini dapat dipertingkatkan dengan langkah-langkah pengoptimuman yang disyorkan. Menggunakan prinsip pengurusan risiko dengan bijak dan menyesuaikan parameter mengikut matlamat perdagangan dan toleransi risiko tertentu, strategi ini berpotensi menjadi alat berharga dalam kotak alat pedagang.

Akhirnya, seperti semua strategi perdagangan, kejayaan akan bergantung kepada pengoptimuman parameter yang sesuai, pelaksanaan disiplin, pengurusan risiko yang mantap dan pemahaman yang mendalam tentang dinamik pasaran.

Kod sumber strategi
/*backtest
start: 2024-05-15 00:00:00
end: 2025-05-13 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("PowerHouse SwiftEdge AI v2.10 Strategy", overlay=true, calc_on_every_tick=true)

// Inputs med fleksible indstillinger
length = input.int(5, "Pivot Length", minval=1, maxval=20, step=1, tooltip="Number of bars to identify pivot highs and lows.")
momentum_threshold_base = input.float(0.01, "Base Momentum Threshold (%)", minval=0.001, maxval=1.0, step=0.001, tooltip="Base percentage change for signals.")
tp_points = input.int(10, "Take Profit (points)", minval=5, maxval=500, step=5)
sl_points = input.int(10, "Stop Loss (points)", minval=5, maxval=500, step=5)
min_signal_distance = input.int(5, "Min Signal Distance (bars)", minval=1, maxval=50, step=1)
tp_box_height = input.float(0.5, "TP Box Height % (Optional)", minval=0.1, maxval=2.0, step=0.1)
pre_momentum_factor_base = input.float(0.5, "Base Pre-Momentum Factor", minval=0.1, maxval=1.0, step=0.1, tooltip="Base factor for Get Ready signals.")
shortTrendPeriod = input.int(30, title="Short Trend Period", minval=10, maxval=100)
longTrendPeriod = input.int(100, title="Long Trend Period", minval=50, maxval=200)

// Brugerdefinerede filtre
use_momentum_filter = input.bool(true, "Use Momentum Filter", group="Signal Filters", tooltip="Require price change to exceed momentum threshold.")
use_trend_filter = input.bool(true, "Use Higher Timeframe Trend Filter", group="Signal Filters", tooltip="Require alignment with the selected higher timeframe trend.")
higher_tf_choice = input.string("60", "Higher Timeframe", options=["60", "240", "D"], group="Signal Filters", tooltip="Choose the timeframe for the higher timeframe filter.")
use_lower_tf_filter = input.bool(true, "Use Lower Timeframe Filter", group="Signal Filters", tooltip="Prevent signals against the selected lower timeframe trend.")
lower_tf_choice = input.string("60", "Lower Timeframe", options=["60", "240", "D"], group="Signal Filters", tooltip="Choose the timeframe for the lower timeframe filter.")
use_volume_filter = input.bool(false, "Use Volume Filter", group="Signal Filters", tooltip="Require volume above average (optional).")
use_breakout_filter = input.bool(false, "Use Breakout Filter", group="Signal Filters", tooltip="Require price to break previous high/low (optional).")
show_get_ready = input.bool(true, "Show Get Ready Signals", group="Signal Filters", tooltip="Enable or disable Get Ready signals.")
restrict_repeated_signals = input.bool(false, "Restrict Repeated Signals", group="Signal Filters", tooltip="Prevent multiple signals in the same trend direction until trend changes.")
restrict_trend_tf_choice = input.string("60", "Restrict Trend Timeframe", options=["60", "240", "D"], group="Signal Filters", tooltip="Choose the timeframe to check trend for restricting repeated signals.")
enable_ai_analysis = input.bool(true, "Enable AI Market Analysis", group="AI Market Analysis", tooltip="Show AI predictions for future trends across timeframes.")
ai_table_position = input.string("Bottom Center", "AI Market Analysis Table Position", options=["Top Left", "Top Center", "Top Right", "Middle Left", "Middle Center", "Middle Right", "Bottom Left", "Bottom Center", "Bottom Right"], group="AI Market Analysis", tooltip="Choose the position of the AI Market Analysis table.")

// Ekstra inputs til valgfrie filtre
volumeLongPeriod = input.int(50, "Long Volume Period", minval=10, maxval=100, group="Volume Filter Settings")
volumeShortPeriod = input.int(5, "Short Volume Period", minval=1, maxval=20, group="Volume Filter Settings")
breakoutPeriod = input.int(5, "Breakout Period", minval=1, maxval=50, group="Breakout Filter Settings")

// Funktion til at konvertere streng til position
f_getTablePosition(position_string) =>
    switch position_string
        "Top Left" => position.top_left
        "Top Center" => position.top_center
        "Top Right" => position.top_right
        "Middle Left" => position.middle_left
        "Middle Center" => position.middle_center
        "Middle Right" => position.middle_right
        "Bottom Left" => position.bottom_left
        "Bottom Center" => position.bottom_center
        "Bottom Right" => position.bottom_right
        => position.middle_right  // Standard fallback

// AI-drevet adaptiv signaljustering med ATR
atr_raw = ta.atr(14)
atr = na(atr_raw) and bar_index > 0 ? (high - low) : atr_raw
volatility_factor = atr / close
momentum_threshold = momentum_threshold_base * (1 + volatility_factor * 2)
pre_momentum_factor = pre_momentum_factor_base * (1 - volatility_factor * 0.5)
pre_momentum_threshold = momentum_threshold * pre_momentum_factor

// Raw CVD-beregning
var float raw_cvd = 0.0
delta_volume = close > close[1] ? volume : close < close[1] ? -volume : 0
raw_cvd := raw_cvd + delta_volume

// Volatility Context baseret på absolut CVD
cvd_level = math.abs(raw_cvd) < 10000 ? "Low" : math.abs(raw_cvd) < 50000 ? "Medium" : "High"
cvd_color = raw_cvd > 0 ? color.lime : raw_cvd < 0 ? color.red : color.yellow

// Beregn prisændring (momentum)
price_change = ((close - close[1]) / close[1]) * 100

// Find højder og lavpunkter
pivot_high = ta.pivothigh(high, length, length)
pivot_low = ta.pivotlow(low, length, length)

// Variabler til at gemme seneste højder og lavpunkter
var float last_high = na
var float last_low = na
if not na(pivot_high)
    last_high := pivot_high
if not na(pivot_low)
    last_low := pivot_low

// Variabler til signalstyring
var float choch_sell_level = na
var float choch_buy_level = na
var float bos_sell_level = na
var float bos_buy_level = na
var float tp_sell_level = na
var float tp_buy_level = na
var int last_signal_bar = -min_signal_distance - 1
var string last_signal = "Neutral"
var int last_trend = 0  // Sporer den sidste trendretning for restrict_repeated_signals

// Multi-tidsramme trendanalyse med robust fallback
// Beregn EMA og VWAP for hver tidsramme
ema60_raw = request.security(syminfo.tickerid, "60", ta.ema(close, 20), lookahead=barmerge.lookahead_on)
vwap60_raw = request.security(syminfo.tickerid, "60", ta.vwap(hlc3), lookahead=barmerge.lookahead_on)
ema240_raw = request.security(syminfo.tickerid, "240", ta.ema(close, 20), lookahead=barmerge.lookahead_on)
vwap240_raw = request.security(syminfo.tickerid, "240", ta.vwap(hlc3), lookahead=barmerge.lookahead_on)
emaD_raw = request.security(syminfo.tickerid, "D", ta.ema(close, 20), lookahead=barmerge.lookahead_on)
vwapD_raw = request.security(syminfo.tickerid, "D", ta.vwap(hlc3), lookahead=barmerge.lookahead_on)

// Lokale EMA og VWAP som fallback
local_ema = ta.ema(close, 20)
local_vwap = ta.vwap(hlc3)

// Fallback for manglende data
ema60 = na(ema60_raw) ? local_ema : ema60_raw
vwap60 = na(vwap60_raw) ? local_vwap : vwap60_raw
ema240 = na(ema240_raw) ? local_ema : ema240_raw
vwap240 = na(vwap240_raw) ? local_vwap : vwap240_raw
emaD = na(emaD_raw) ? local_ema : emaD_raw
vwapD = na(vwapD_raw) ? local_vwap : vwapD_raw

// Trendbestemmelse (1 = op, -1 = ned, 0 = neutral)
trend60 = close > ema60 and close > vwap60 ? 1 : close < ema60 and close < vwap60 ? -1 : 0
trend240 = close > ema240 and close > vwap240 ? 1 : close < ema240 and close < vwap240 ? -1 : 0
trendD = close > emaD and close > vwapD ? 1 : close < emaD and close < vwapD ? -1 : 0

// AI-Trend Strength (-100 til +100)
trend_strength_raw = trend60 + trend240 + trendD
trend_strength = (trend_strength_raw / 3) * 100

// AI Confidence (simuleret succesrate)
var float ai_confidence = 50.0
if trend_strength_raw == 3 or trend_strength_raw == -3
    ai_confidence := 90.0
else if trend_strength_raw >= 2 or trend_strength_raw <= -2
    ai_confidence := 75.0
else
    ai_confidence := 60.0

// Filterbetingelser
// Dynamisk valg af higher timeframe trend (til signalfiltrering)
var int higher_tf_trend = 0
switch higher_tf_choice
    "60" => higher_tf_trend := trend60
    "240" => higher_tf_trend := trend240
    "D" => higher_tf_trend := trendD

bullish_trend_ok = higher_tf_trend == 1
bearish_trend_ok = higher_tf_trend == -1

// Dynamisk valg af lower timeframe trend (til signalfiltrering)
var int lower_tf_trend = 0
switch lower_tf_choice
    "60" => lower_tf_trend := trend60
    "240" => lower_tf_trend := trend240
    "D" => lower_tf_trend := trendD

lower_tf_bullish = lower_tf_trend == 1
lower_tf_bearish = lower_tf_trend == -1
lower_tf_not_neutral = lower_tf_trend != 0

// Dynamisk valg af trend-tidsramme til restrict_repeated_signals
var int restrict_tf_trend = 0
switch restrict_trend_tf_choice
    "60" => restrict_tf_trend := trend60
    "240" => restrict_tf_trend := trend240
    "D" => restrict_tf_trend := trendD

volAvg50 = ta.sma(volume, volumeLongPeriod)
volShort = ta.sma(volume, volumeShortPeriod)
volCondition = volume > volAvg50 and ta.change(volShort) > 0
highestBreakout = ta.highest(high, breakoutPeriod)
lowestBreakout = ta.lowest(low, breakoutPeriod)

// CHoCH og BOS definitioner
choch_sell = ta.crossunder(low, last_high) and close < open
choch_buy = ta.crossover(high, last_low) and close > open
bos_sell = ta.crossunder(low, last_low[1]) and low < last_low[1] and close < open
bos_buy = ta.crossover(high, last_high[1]) and high > last_high[1] and close > open

// Signalbetingelser med valgbare filtre
early_sell_signal = use_momentum_filter ? price_change < -momentum_threshold : true
early_buy_signal = use_momentum_filter ? price_change > momentum_threshold : true
sell_trend_ok = use_trend_filter ? bearish_trend_ok : true
buy_trend_ok = use_trend_filter ? bullish_trend_ok : true
sell_lower_tf_ok = use_lower_tf_filter ? (not lower_tf_bullish and lower_tf_not_neutral) : true
buy_lower_tf_ok = use_lower_tf_filter ? (not lower_tf_bearish and lower_tf_not_neutral) : true
sell_volume_ok = use_volume_filter ? volCondition : true
buy_volume_ok = use_volume_filter ? volCondition : true
sell_breakout_ok = use_breakout_filter ? close < lowestBreakout[1] : true
buy_breakout_ok = use_breakout_filter ? close > highestBreakout[1] : true

// Logik for at begrænse gentagne signaler baseret på restrict_tf_trend
sell_allowed = not restrict_repeated_signals or (last_signal != "Sell" or (last_signal == "Sell" and restrict_tf_trend != last_trend and restrict_tf_trend != -1))
buy_allowed = not restrict_repeated_signals or (last_signal != "Buy" or (last_signal == "Buy" and restrict_tf_trend != last_trend and restrict_tf_trend != 1))

sell_condition = early_sell_signal and (bar_index - last_signal_bar >= min_signal_distance) and sell_trend_ok and sell_lower_tf_ok and sell_volume_ok and sell_breakout_ok and sell_allowed
buy_condition = early_buy_signal and (bar_index - last_signal_bar >= min_signal_distance) and buy_trend_ok and buy_lower_tf_ok and buy_volume_ok and buy_breakout_ok and buy_allowed

get_ready_sell = use_momentum_filter ? (price_change < -pre_momentum_threshold and price_change > -momentum_threshold) : true and (bar_index - last_signal_bar >= min_signal_distance) and sell_trend_ok and sell_lower_tf_ok and sell_volume_ok and sell_breakout_ok
get_ready_buy = use_momentum_filter ? (price_change > pre_momentum_threshold and price_change < momentum_threshold) : true and (bar_index - last_signal_bar >= min_signal_distance) and buy_trend_ok and buy_lower_tf_ok and buy_volume_ok and buy_breakout_ok

// Strategy logic
if buy_condition
    strategy.entry("Long", strategy.long)
    strategy.exit("TP/SL Long", "Long", limit=close + tp_points, stop=close - sl_points)
    label.new(bar_index, low, "Buy", color=color.green, style=label.style_label_up, textcolor=color.white)
    tp_buy_level := high + tp_points
    last_signal := "Buy"
    last_signal_bar := bar_index
    last_trend := restrict_tf_trend

if sell_condition
    strategy.entry("Short", strategy.short)
    strategy.exit("TP/SL Short", "Short", limit=close - tp_points, stop=close + sl_points)
    label.new(bar_index, high, "Sell", color=color.red, style=label.style_label_down, textcolor=color.white)
    tp_sell_level := low - tp_points
    last_signal := "Sell"
    last_signal_bar := bar_index
    last_trend := restrict_tf_trend

// Plot Get Ready signals
if show_get_ready and get_ready_sell
    label.new(bar_index, high, "Get Ready SELL", color=color.orange, style=label.style_label_down, textcolor=color.black, size=size.small)

if show_get_ready and get_ready_buy
    label.new(bar_index, low, "Get Ready BUY", color=color.yellow, style=label.style_label_up, textcolor=color.black, size=size.small)

// Plot CHoCH og BOS som fulde linjer med AI-agtige farver
var line choch_sell_line = na
var line choch_buy_line = na
var line bos_sell_line = na
var line bos_buy_line = na



// Trendlinjer med bufferkontrol og AI-laser-look
var line sup = na
var line res = na

if barstate.islast
    float lowest_y2 = 60000
    int lowest_x2 = 0
    float highest_y2 = 0
    int highest_x2 = 0
    
    // Begræns lookback til max 2000 bars for at undgå bufferfejl
    int maxShortBars = math.min(math.min(shortTrendPeriod, bar_index), 2000)
    for i = 1 to maxShortBars
        if low[i] < lowest_y2
            lowest_y2 := low[i]
            lowest_x2 := i
        if high[i] > highest_y2
            highest_y2 := high[i]
            highest_x2 := i
            
    float lowest_y1 = 60000
    int lowest_x1 = 0
    float highest_y1 = 0
    int highest_x1 = 0
    
    // Begræns lookback til max 2000 bars for at undgå bufferfejl
    int maxLongBars = math.min(math.min(longTrendPeriod, bar_index), 2000)
    for j = shortTrendPeriod + 1 to maxLongBars
        if low[j] < lowest_y1
            lowest_y1 := low[j]
            lowest_x1 := j
        if high[j] > highest_y1
            highest_y1 := high[j]
            highest_x1 := j
            
    int trendStrength = trend_strength_raw

// Plot niveauer
plot(choch_sell_level, title="Last High at CHoCH", color=color.aqua, style=plot.style_circles, linewidth=1, trackprice=false)
plot(choch_buy_level, title="Last Low at CHoCH", color=color.lime, style=plot.style_circles, linewidth=1, trackprice=false)
plot(bos_sell_level, title="Last Low at BOS", color=color.fuchsia, style=plot.style_circles, linewidth=1, trackprice=false)
plot(bos_buy_level, title="Last High at BOS", color=color.teal, style=plot.style_circles, linewidth=1, trackprice=false)
plot(tp_sell_level, title="TP Sell", color=color.red, style=plot.style_circles, linewidth=1, trackprice=false)
plot(tp_buy_level, title="TP Buy", color=color.green, style=plot.style_circles, linewidth=1, trackprice=false)
plot(last_high, title="Last High", color=color.red, style=plot.style_histogram, linewidth=1, trackprice=true)
plot(last_low, title="Last Low", color=color.green, style=plot.style_histogram, linewidth=1, trackprice=true)

// AI Markedsanalyse - Beregn data uanset betingelse
momentum_1h = request.security(syminfo.tickerid, "60", close - close[3], lookahead=barmerge.lookahead_on)
momentum_4h = request.security(syminfo.tickerid, "240", close - close[3], lookahead=barmerge.lookahead_on)
momentum_d = request.security(syminfo.tickerid, "D", close - close[3], lookahead=barmerge.lookahead_on)

// Beregn ATR og SMA(ATR) for hver tidsramme
atr_1h = request.security(syminfo.tickerid, "60", ta.atr(14), lookahead=barmerge.lookahead_on)
atr_4h = request.security(syminfo.tickerid, "240", ta.atr(14), lookahead=barmerge.lookahead_on)
atr_d = request.security(syminfo.tickerid, "D", ta.atr(14), lookahead=barmerge.lookahead_on)
sma_atr_1h = request.security(syminfo.tickerid, "60", ta.sma(ta.atr(14), 20), lookahead=barmerge.lookahead_on)
sma_atr_4h = request.security(syminfo.tickerid, "240", ta.sma(ta.atr(14), 20), lookahead=barmerge.lookahead_on)
sma_atr_d = request.security(syminfo.tickerid, "D", ta.sma(ta.atr(14), 20), lookahead=barmerge.lookahead_on)

// Lokale ATR og SMA(ATR) som fallback
local_atr = ta.atr(14)
local_sma_atr = ta.sma(ta.atr(14), 20)

// Fallback for manglende data
volatility_1h = na(atr_1h) ? local_atr : atr_1h
volatility_4h = na(atr_4h) ? local_atr : atr_4h
volatility_d = na(atr_d) ? local_atr : atr_d
volatility_avg_1h = na(sma_atr_1h) ? local_sma_atr : sma_atr_1h
volatility_avg_4h = na(sma_atr_4h) ? local_sma_atr : sma_atr_4h
volatility_avg_d = na(sma_atr_d) ? local_sma_atr : sma_atr_d
momentum_1h := na(momentum_1h) ? 0 : momentum_1h
momentum_4h := na(momentum_4h) ? 0 : momentum_4h
momentum_d := na(momentum_d) ? 0 : momentum_d

// Analyse baseret på trend, momentum og volatilitet
score_1h = trend60 + (momentum_1h > 0 ? 0.5 : momentum_1h < 0 ? -0.5 : 0) + (volatility_1h > volatility_avg_1h ? 0.5 : 0)
score_4h = trend240 + (momentum_4h > 0 ? 0.5 : momentum_4h < 0 ? -0.5 : 0) + (volatility_4h > volatility_avg_4h ? 0.5 : 0)
score_d = trendD + (momentum_d > 0 ? 0.5 : momentum_d < 0 ? -0.5 : 0) + (volatility_d > volatility_avg_d ? 0.5 : 0)

// Forudsigelser
pred_1h = score_1h > 0.5 ? "Up" : score_1h < -0.5 ? "Down" : "Neutral"
pred_4h = score_4h > 0.5 ? "Up" : score_4h < -0.5 ? "Down" : "Neutral"
pred_d = score_d > 0.5 ? "Up" : score_d < -0.5 ? "Down" : "Neutral"

// Futuristisk AI-Trend Dashboard
var table trendTable = table.new(position.top_right, columns=2, rows=6, bgcolor=color.new(color.black, 50), border_width=2, border_color=color.new(color.teal, 20))
table.cell(trendTable, 0, 0, "AI-Trend Matrix v2.10", text_color=color.new(color.aqua, 0), bgcolor=color.new(color.navy, 60))
table.cell(trendTable, 1, 0, "", bgcolor=color.new(color.navy, 60))
table.merge_cells(trendTable, 0, 0, 1, 0)
table.cell(trendTable, 0, 1, "Trend Strength", text_color=color.white)
table.cell(trendTable, 1, 1, str.tostring(math.round(trend_strength)), text_color=trend_strength > 0 ? color.rgb(0, math.min(255, trend_strength * 2.55), 0) : color.rgb(math.min(255, math.abs(trend_strength) * 2.55), 0, 0))
table.cell(trendTable, 0, 2, "AI Confidence", text_color=color.white)
table.cell(trendTable, 1, 2, str.tostring(ai_confidence) + "%", text_color=color.teal)
table.cell(trendTable, 0, 3, "AI Calibration", text_color=color.white)
table.cell(trendTable, 1, 3, "CVD: " + str.tostring(math.round(raw_cvd)) + " (" + cvd_level + ")", text_color=cvd_color)
table.cell(trendTable, 0, 4, "1H", text_color=color.white)
table.cell(trendTable, 1, 4, trend60 == 1 ? "Up" : trend60 == -1 ? "Down" : "Neutral", text_color=trend60 == 1 ? color.lime : trend60 == -1 ? color.fuchsia : color.yellow)
table.cell(trendTable, 0, 5, "4H", text_color=color.white)
table.cell(trendTable, 1, 5, trend240 == 1 ? "Up" : trend240 == -1 ? "Down" : "Neutral", text_color=trend240 == 1 ? color.lime : trend240 == -1 ? color.fuchsia : color.yellow)

// Tabel for AI Markedsanalyse
if enable_ai_analysis
    var table ai_table = table.new(f_getTablePosition(ai_table_position), columns=4, rows=2, bgcolor=color.new(color.black, 50), border_width=2, border_color=color.new(color.teal, 20))
    table.cell(ai_table, 0, 0, "AI Market Analysis", text_color=color.new(color.aqua, 0), bgcolor=color.new(color.navy, 60))
    table.cell(ai_table, 1, 0, "1H", text_color=color.white)
    table.cell(ai_table, 2, 0, "4H", text_color=color.white)
    table.cell(ai_table, 3, 0, "1D", text_color=color.white)
    table.cell(ai_table, 0, 1, "Prediction", text_color=color.white)
    table.cell(ai_table, 1, 1, pred_1h, text_color=pred_1h == "Up" ? color.lime : pred_1h == "Down" ? color.fuchsia : color.yellow)
    table.cell(ai_table, 2, 1, pred_4h, text_color=pred_4h == "Up" ? color.lime : pred_4h == "Down" ? color.fuchsia : color.yellow)
    table.cell(ai_table, 3, 1, pred_d, text_color=pred_d == "Up" ? color.lime : pred_d == "Down" ? color.fuchsia : color.yellow)

// Debug alerts for null data
if na(ema60) or na(vwap60)
    alert("Warning: 60-minute timeframe data is null!", alert.freq_once_per_bar)
if na(ema240) or na(vwap240)
    alert("Warning: 240-minute timeframe data is null!", alert.freq_once_per_bar)
if na(emaD) or na(vwapD)
    alert("Warning: Daily timeframe data is null!", alert.freq_once_per_bar)