Time Zone & SessionsThis Pine Script indicator highlights major trading sessions (New York, London, Tokyo, Sydney) with customizable time zones. It supports two custom sessions and dynamically blends colors when sessions overlap (e.g., London & New York). The script also includes alerts for session openings.
ניתוח פונדמנטאלי
VWAP + Momentum ReversalJust a work in progress to see what works, have generated some code with VWAP, RSI, MACD in order to get the most accurate representation
FinFluential Global M2 Money Supply // Days Offset =The "Global M2 Money Supply" indicator calculates and visualizes the combined M2 money supply from multiple countries and regions worldwide, expressed in trillions of USD.
M2 is a measure of the money supply that includes cash, checking deposits, and easily convertible near-money assets. This indicator aggregates daily M2 data from various economies, converts them into a common USD base using forex exchange rates, and plots the total as a single line on the chart.
It is designed as an overlay indicator aligned to the right scale, making it ideal for comparing global money supply trends with price action or other market data.
Key Features
Customizable Time Offset: Users can adjust the number of days to shift the M2 data forward or backward (from -1000 to +1000 days) via the indicator settings. This allows for alignment with historical events or forward-looking analysis.
Global Coverage Includes:
Eurozone: Eurozone M2 (converted via EUR/USD)
North America: United States, Canada
Non-EU Europe: Switzerland, United Kingdom, Finland, Russia
Pacific: New Zealand
Asia: China, Taiwan, Hong Kong, India, Japan, Philippines, Singapore
Latin America: Brazil, Colombia, Mexico
Middle East: United Arab Emirates, Turkey
Africa: South Africa
RSI, CCI & ADX CompositeThe RSI and CCI signals are simplified—if the RSI is above 50 it’s counted as bullish, if below it’s bearish; similarly, if the CCI is above 0 it’s bullish, below 0 it’s bearish. • The ADX is calculated manually and used as a filter. When ADX isn’t strong (below a user‑defined threshold) the composite signal simply reads “No Clear Trend.” A composite signal is then built from the two signals (RSI + CCI) and interpreted as “Strong Bullish,” “Bullish,” “Neutral,” “Bearish,” or “Strong Bearish.” In addition to simple plots of the individual indicators, a table is displayed in the top‑right corner showing numeric values (RSI, CCI, and ADX) as well as the composite signal text.
Spekulator Maliyet Analizi Pro V4//@version=6
indicator('Spekulator Maliyet Analizi Pro V4', overlay = true, max_labels_count = 500, max_lines_count = 500)
// =================== GLOBAL DEĞİŞKENLER ===================
// Trend değişkenleri
var bool uptrend = false
var float last_swing_low = na
var float last_swing_high = na
var int last_swing_low_index = na
var int last_swing_high_index = na
// Maliyet değişkenleri
var float alis_maliyeti = na
var float satis_maliyeti = na
var float alis_maliyeti_alt = na
var float alis_maliyeti_ust = na
var float satis_maliyeti_alt = na
var float satis_maliyeti_ust = na
// Pozisyon değişkenleri
var bool pozisyonda = false
var bool son_islem_alis = false
var float giris_fiyati = na
var float cikis_fiyati = na
var int son_giris_cikis_zamani = 0
var float max_kar = 0.0
var float max_zarar = 0.0
var float curr_kar = 0.0
var bool olasi_alis = false
var bool olasi_satis = false
var bool alis_sinyal = false
var bool satis_sinyal = false
var float trailing_stop_seviyesi = na
var float trailing_stop_max = na
var float trailing_stop_min = na
var bool alis_yapildi = false
var bool satis_yapildi = false
// Sinyal kosullari
var bool alis_kosul_1 = false
var bool satis_kosul_1 = false
var bool alis_filtre = false
var bool satis_filtre = false
var bool alis_ek_kosul = false
var bool satis_ek_kosul = false
var bool alis_pozisyon_kosul = false
var bool satis_pozisyon_kosul = false
var bool pozisyon_kisitlama_alis = false
var bool pozisyon_kisitlama_satis = false
var bool alis_crossover = false
var bool satis_crossunder = false
var float olasi_alis_seviyesi = na
var float olasi_satis_seviyesi = na
// Crossover/Crossunder değişkenleri
var bool alis_tp_crossover = false
var bool satis_tp_crossunder = false
var bool alis_sl_crossunder = false
var bool satis_sl_crossover = false
var bool trailing_stop_crossunder = false
// Pre-calculated check variables
var bool alis_tp_crossover_check = false
var bool alis_sl_crossunder_check = false
var bool satis_tp_crossunder_check = false
var bool satis_sl_crossover_check = false
var bool trailing_stop_crossunder_check = false
// POC değişkenleri (Point of Control)
var float poc_fiyat = na
var float poc_hacim = 0.0
var float poc_yuzde = 0.0
var float rsi = na
var float rsi_deger = na
var bool rsi_alis_kosul = true
var bool rsi_satis_kosul = true
var float alis_sl = na
var float alis_tp = na
var float satis_sl = na
var float satis_tp = na
var color poc_renk = color.white
var string poc_metin = ""
// Volatilite değişkenleri
var float volatilite = na
var float volatilite_ort = na
var float fiyat_degisim_yuzde = 0.0
var bool siradisi_fiyat = false
var bool siradisi_hacim = false
var bool siradisi_volatilite = false
var bool siradisi_hareket = false
var bool siradisi_alis = false
var bool siradisi_satis = false
var bool yukselen_mumlar = false
var bool dusen_mumlar = false
var float swing_yuksek = na
var float swing_dusuk = na
var float hacim_orani = 0.0
var float vol_sma = 0.0
var bool yuksek_hacim = false
var table table_obj = na
// VPVR Değişkenleri
var float vpvr_poc_fiyat = na
var bool vpvr_ustunde = false
var color vpvr_poc_renk = color.gray
var string vpvr_poc_metin = ""
var float vpvr_poc_hacim = 0.0
var float vpvr_poc_yuzde = 0.0
// Histogram veri dizileri
var float vpvr_histogram_alt_liste = array.new_float()
var float vpvr_histogram_ust_liste = array.new_float()
var float vpvr_histogram_fiyat_liste = array.new_float()
var float vpvr_histogram_alim_hacmi_liste = array.new_float()
var float vpvr_histogram_satim_hacmi_liste = array.new_float()
var float vpvr_histogram_hacim_yuzde_liste = array.new_float()
// Görsel objeler için diziler
var box vpvr_alim_kutulari = array.new_box()
var box vpvr_satim_kutulari = array.new_box()
var line vpvr_cizgiler = array.new_line()
// =================== GORSEL AYARLAR ===================
g_grup1 = "Gorsel Ayarlar - Renkler"
i_alis_renk = input.color(color.green, "Alis Bölgesi Rengi", group=g_grup1)
i_satis_renk = input.color(color.red, "Satis Bölgesi Rengi", group=g_grup1)
i_ok_renk_alis = input.color(color.green, "Alis Ok Rengi", group=g_grup1)
i_ok_renk_satis = input.color(color.red, "Satis Ok Rengi", group=g_grup1)
i_olasi_alis_renk = input.color(color.new(color.green, 50), "Olası Alış Rengi", group=g_grup1)
i_olasi_satis_renk = input.color(color.new(color.red, 50), "Olası Satış Rengi", group=g_grup1)
i_sl_renk = input.color(color.red, "Stop Loss Rengi", group=g_grup1)
i_tp_renk = input.color(color.green, "Take Profit Rengi", group=g_grup1)
i_panel_yazi_renk = input.color(color.white, "Panel Yazı Rengi", group=g_grup1)
i_panel_baslik_renk = input.color(color.yellow, "Panel Başlık Rengi", group=g_grup1)
i_panel_renk = input.color(color.new(color.black, 90), "Panel Arka Plan Rengi", group=g_grup1)
g_grup2 = "Gorsel Ayarlar - Stil"
i_cizgi_kalinlik = input.int(2, "Ana Çizgi Kalınlığı", minval=1, maxval=4, group=g_grup2)
i_sl_tp_kalinlik = input.int(1, "SL/TP Çizgi Kalınlığı", minval=1, maxval=4, group=g_grup2)
i_panel_konum = input.string("Sag Üst", "Panel Konumu", options= , group=g_grup2)
i_panel_saydamlik = input.int(50, "Panel Saydamlığı", minval=0, maxval=100, group=g_grup2)
g_grup3 = "Hesaplama - Swing Ayarları"
i_swing_periyot = input.int(10, "Swing Periyodu", minval=5, maxval=50, group=g_grup3, tooltip="Swing noktalarını belirlemek için kullanılacak periyot")
i_swing_yuzde = input.float(1.5, "Min. Swing (%)", minval=0.5, step=0.1, group=g_grup3, tooltip="Minimum swing hareketi yüzdesi")
i_swing_onay = input.int(3, "Swing Onay Mumu", minval=1, maxval=5, group=g_grup3, tooltip="Swing noktasının onaylanması için gereken mum sayısı")
i_pivot_lookback = input.int(10, "Pivot Lookback", minval=5, maxval=50, group=g_grup3, tooltip="Pivot noktalarını belirlemek için kullanılacak periyot")
g_grup4 = "Hesaplama - Fibonacci Ayarları"
i_fib_seviye = input.float(0.618, "Ana Fibonacci Seviyesi", minval=0.1, maxval=1.0, step=0.001, group=g_grup4)
i_fib_alt = input.float(0.5, "Alt Fibonacci Seviyesi", minval=0.1, maxval=1.0, step=0.001, group=g_grup4)
i_fib_ust = input.float(0.786, "Üst Fibonacci Seviyesi", minval=0.1, maxval=1.0, step=0.001, group=g_grup4)
g_grup5 = "Risk Yönetimi"
i_sl_yuzde = input.float(1.5, "Stop Loss (%)", minval=0.5, step=0.1, group=g_grup5)
i_tp_yuzde = input.float(3.0, "Take Profit (%)", minval=1.0, step=0.1, group=g_grup5)
i_trailing_stop = input.bool(false, "Trailing Stop Kullan", group=g_grup5)
i_trailing_yuzde = input.float(1.0, "Trailing Stop (%)", minval=0.5, step=0.1, group=g_grup5)
g_grup6 = "Filtreler"
i_rsi_aktif = input.bool(false, "RSI Filtresini Kullan", group=g_grup6)
i_rsi_period = input.int(14, "RSI Periyodu", minval=1, group=g_grup6)
i_rsi_ust = input.int(70, "RSI Üst Sınır", minval=50, maxval=100, group=g_grup6)
i_rsi_alt = input.int(30, "RSI Alt Sınır", minval=0, maxval=50, group=g_grup6)
i_hacim_aktif = input.bool(false, "Hacim Filtresini Kullan", group=g_grup6)
i_hacim_period = input.int(20, "Hacim Ortalama Periyodu", minval=1, group=g_grup6)
i_hacim_carpan = input.float(1.5, "Hacim Çarpanı", minval=1.0, step=0.1, group=g_grup6)
g_grup7 = "Sinyal Ayarları"
i_alis_sinyal_seviyesi = input.float(0.0, "Alış Sinyal Seviyesi (%)", minval=-100, maxval=100, step=0.1, group=g_grup7)
i_satis_sinyal_seviyesi = input.float(0.0, "Satış Sinyal Seviyesi (%)", minval=-100, maxval=100, step=0.1, group=g_grup7)
i_sinyal_tetik_yuzde = input.float(2.0, "Sinyal Mesafesi (%)", minval=0.1, maxval=10.0, step=0.1, group=g_grup7, tooltip="Maliyet seviyesine göre sinyal mesafesi")
i_sinyal_ters_yon = input.bool(true, "Sadece Ters Yön Sinyalleri", group=g_grup7, tooltip="Aktif olduğunda, sadece önceki sinyalin tersi yönünde sinyal üretir")
i_sinyal_pozisyon_kontrol = input.bool(true, "Pozisyon Kontrolü", group=g_grup7, tooltip="Aktif olduğunda, pozisyondayken aynı yönde sinyal üretmez")
g_grup8 = "Olası Sinyal Ayarları"
i_olasi_sinyal_hassasiyeti = input.float(0.5, "Olası Sinyal Hassasiyeti (%)", minval=0.1, maxval=5.0, step=0.1, group=g_grup8)
// =================== YENİ EKLENTİ: SIRA DIŞI HAREKET ALGILAMA ===================
g_grup10 = "Sıra Dışı Hareket Algılama"
i_siradisi_fiyat_yuzde = input.float(3.0, "Ani Fiyat Değişimi (%)", minval=0.5, step=0.1, group=g_grup10, tooltip="Bu yüzdenin üzerindeki ani fiyat değişimleri anormal hareket olarak işaretlenir")
i_siradisi_hacim_carpan = input.float(2.5, "Hacim Artış Çarpanı", minval=1.5, step=0.1, group=g_grup10, tooltip="Normal hacimin bu katı üzerindeki hacimler anormal olarak kabul edilir")
i_siradisi_volatilite_carpan = input.float(2.0, "Volatilite Artış Çarpanı", minval=1.2, step=0.1, group=g_grup10, tooltip="Normal volatilitenin bu katı üzerindeki değerler anormal olarak kabul edilir")
// =================== VOLUME PROFILE VISIBLE RANGE AYARLAR ===================
g_grup_vpvr = "Volume Profile Ayarları"
i_vpvr_aktif = input.bool(false, "VPVR Göster", group=g_grup_vpvr, tooltip="Volume Profile Visible Range özelliğini etkinleştirir")
i_line_renk = input.color(color.new(color.gray, 25), "Üst/Alt Çizgi Rengi", group=g_grup_vpvr)
i_alis_bar_renk = input.color(color.new(color.green, 25), "Alış Bar Rengi", group=g_grup_vpvr)
i_satis_bar_renk = input.color(color.new(color.red, 25), "Satış Bar Rengi", group=g_grup_vpvr)
i_bar_sayisi = input.int(90, "Bar Sayısı", minval=14, maxval=365, group=g_grup_vpvr)
i_son_mumdan_mesafe = input.int(2, "Son Mumdan Mesafe", minval=2, maxval=20, group=g_grup_vpvr)
i_histogram_sayisi = input.int(50, "Histogram Sayısı", minval=10, maxval=200, group=g_grup_vpvr)
i_poc_genislik = input.int(50, "PoC Genişliği", minval=20, maxval=100, group=g_grup_vpvr)
// =================== FONKSİYONLAR ===================
isSwingHigh(index) =>
high > high and high > high and high > high and high > high
isSwingLow(index) =>
low < low and low < low and low < low and low < low
// Olası sinyal fonksiyonları
getOlasiAlisSinyali(curr_close, prev_close, maliyet) =>
result = false
if not na(maliyet)
fark_yuzde = math.abs((curr_close - maliyet) / maliyet * 100)
result := curr_close > prev_close and fark_yuzde <= i_olasi_sinyal_hassasiyeti
result
getOlasiSatisSinyali(curr_close, prev_close, maliyet) =>
result = false
if not na(maliyet)
fark_yuzde = math.abs((curr_close - maliyet) / maliyet * 100)
result := curr_close < prev_close and fark_yuzde <= i_olasi_sinyal_hassasiyeti
result
// Olası sinyal seviyelerini hesaplama fonksiyonları
getOlasiAlisSeviyesi(maliyet) =>
float sonuc = na
if not na(maliyet)
sonuc := maliyet * (1 - i_olasi_sinyal_hassasiyeti/100)
sonuc
getOlasiSatisSeviyesi(maliyet) =>
float sonuc = na
if not na(maliyet)
sonuc := maliyet * (1 + i_olasi_sinyal_hassasiyeti/100)
sonuc
// =================== TEKNİK GÖSTERGELER ===================
// RSI Hesaplama
rsi := ta.rsi(close, i_rsi_period)
rsi_deger := rsi
rsi_alis_kosul := i_rsi_aktif ? rsi < i_rsi_alt : true
rsi_satis_kosul := i_rsi_aktif ? rsi > i_rsi_ust : true
// Hacim Analizi
vol_sma := ta.sma(volume, i_hacim_period)
float yerel_hacim_orani = volume / vol_sma
hacim_orani := yerel_hacim_orani
yuksek_hacim := i_hacim_aktif ? yerel_hacim_orani > i_hacim_carpan : true
// Sıra dışı hareket hesaplamaları
volatilite := ta.atr(14)
volatilite_ort := ta.sma(volatilite, 20)
// Fiyat değişimi hesaplama
fiyat_degisim_yuzde := math.abs((close - close ) / close * 100)
// Sıra dışı hareket sinyalleri
siradisi_fiyat := fiyat_degisim_yuzde > i_siradisi_fiyat_yuzde
siradisi_hacim := hacim_orani > i_siradisi_hacim_carpan
siradisi_volatilite := volatilite > volatilite_ort * i_siradisi_volatilite_carpan
// Genel sıra dışı hareket tespiti (en az ikisi doğru olmalı)
siradisi_hareket := (siradisi_fiyat and siradisi_hacim) or (siradisi_fiyat and siradisi_volatilite) or (siradisi_hacim and siradisi_volatilite)
// Alış veya satış yönünü belirle
siradisi_alis := siradisi_hareket and close > open
siradisi_satis := siradisi_hareket and close < open
// =================== HESAPLAMALAR ===================
// Trend değişkenleri
yukselen_mumlar := close > open
dusen_mumlar := close < open
// =================== SWING HIGH/LOW HESABI ===================
// Swing High/Low hesaplama
swing_yuksek := ta.pivothigh(i_pivot_lookback, i_pivot_lookback)
swing_dusuk := ta.pivotlow(i_pivot_lookback, i_pivot_lookback)
// Son swing high/low güncelleme
if not na(swing_yuksek)
last_swing_high := swing_yuksek
if not na(swing_dusuk)
last_swing_low := swing_dusuk
// Trend belirleme
if not na(last_swing_high) and not na(last_swing_low)
if high > last_swing_high and not uptrend
uptrend := true
if low < last_swing_low and uptrend
uptrend := false
// =================== MALİYET HESABI ===================
// Maliyet değişkenleri daha önce tanımlandı
// Alış maliyeti hesaplama
if uptrend and not na(last_swing_low) and not na(last_swing_high)
fib_range = last_swing_high - last_swing_low
alis_maliyeti := last_swing_high - fib_range * i_fib_seviye
alis_maliyeti_alt := last_swing_high - fib_range * i_fib_alt
alis_maliyeti_ust := last_swing_high - fib_range * i_fib_ust
// Satış maliyeti hesaplama
if not uptrend and not na(last_swing_low) and not na(last_swing_high)
fib_range = last_swing_high - last_swing_low
satis_maliyeti := last_swing_low + fib_range * i_fib_seviye
satis_maliyeti_alt := last_swing_low + fib_range * i_fib_alt
satis_maliyeti_ust := last_swing_low + fib_range * i_fib_ust
// =================== POZİSYON YÖNETİMİ ===================
// Pozisyon değişkenleri zaten daha önce tanımlandı, tekrar etmiyoruz
// Stop ve hedef seviyeleri artık başlangıçta tanımlandığı için yeniden tanımlamıyoruz, sadece değer atıyoruz
alis_sl := na
alis_tp := na
satis_sl := na
satis_tp := na
if not na(alis_maliyeti)
alis_sl := alis_maliyeti * (1 - i_sl_yuzde/100)
alis_tp := alis_maliyeti * (1 + i_tp_yuzde/100)
if not na(satis_maliyeti)
satis_sl := satis_maliyeti * (1 + i_sl_yuzde/100)
satis_tp := satis_maliyeti * (1 - i_tp_yuzde/100)
// =================== SİNYAL HESAPLAMA ===================
var float last_signal_price = na
var int last_signal_type = 0 // 1 = alis, -1 = satis, 0 = sinyal yok
var string last_signal_time = na
var bool last_signal_success = false
var int win_count = 0
var int loss_count = 0
var int total_signals = 0
var string status_text = ""
var color status_color = color.gray
var float profit_pct = 0.0
var float loss_pct = 0.0
var float trail_level = na
// Alış ve satış sinyalleri
alis_crossover := ta.crossover(close, alis_maliyeti * (1 + i_alis_sinyal_seviyesi/100))
satis_crossunder := ta.crossunder(close, satis_maliyeti * (1 + i_satis_sinyal_seviyesi/100))
// Olası sinyal seviyeleri
olasi_alis_seviyesi := getOlasiAlisSeviyesi(alis_maliyeti)
olasi_satis_seviyesi := getOlasiSatisSeviyesi(satis_maliyeti)
// Sinyal koşulları
alis_kosul_1 := alis_crossover
satis_kosul_1 := satis_crossunder
// Sinyal filtreleme
alis_filtre := rsi_alis_kosul and yuksek_hacim
satis_filtre := rsi_satis_kosul and yuksek_hacim
// Ek sinyal kontrolü
alis_ek_kosul := i_sinyal_ters_yon ? last_signal_type <= 0 or not pozisyonda : true
satis_ek_kosul := i_sinyal_ters_yon ? last_signal_type >= 0 or not pozisyonda : true
alis_pozisyon_kosul := i_sinyal_pozisyon_kontrol ? not pozisyonda or not son_islem_alis : true
satis_pozisyon_kosul := i_sinyal_pozisyon_kontrol ? not pozisyonda or son_islem_alis : true
// Pozisyon-bazlı sinyal kısıtlaması (Bu kısıtlama her zaman aktif olacak)
pozisyon_kisitlama_alis := not (pozisyonda and son_islem_alis) // Zaten alis pozisyonundaysak yeni alis sinyali verme
pozisyon_kisitlama_satis := not (pozisyonda and not son_islem_alis) // Zaten satis pozisyonundaysak yeni satis sinyali verme
// Final sinyaller
alis_sinyal := alis_kosul_1 and alis_filtre and alis_ek_kosul and alis_pozisyon_kosul and pozisyon_kisitlama_alis
satis_sinyal := satis_kosul_1 and satis_filtre and satis_ek_kosul and satis_pozisyon_kosul and pozisyon_kisitlama_satis
// Olası sinyaller
olasi_alis := getOlasiAlisSinyali(close, close , alis_maliyeti) and not alis_yapildi and rsi_alis_kosul and not (pozisyonda and son_islem_alis)
olasi_satis := getOlasiSatisSinyali(close, close , satis_maliyeti) and not satis_yapildi and rsi_satis_kosul and not (pozisyonda and not son_islem_alis)
// Sinyal yönetimi
if alis_sinyal
total_signals := total_signals + 1
last_signal_type := 1
last_signal_price := close
last_signal_time := str.format("{0}", timeframe.period)
last_signal_success := false
pozisyonda := true
son_islem_alis := true
giris_fiyati := close
max_kar := 0.0
max_zarar := 0.0
trailing_stop_seviyesi := close * (1 - i_trailing_yuzde/100)
alis_yapildi := true
satis_yapildi := false
status_text := "Alış Sinyali - " + str.tostring(math.round(close, 2))
status_color := i_alis_renk
if satis_sinyal
total_signals := total_signals + 1
last_signal_type := -1
last_signal_price := close
last_signal_time := str.format("{0}", timeframe.period)
last_signal_success := false
pozisyonda := true
son_islem_alis := false
giris_fiyati := close
max_kar := 0.0
max_zarar := 0.0
trailing_stop_seviyesi := close * (1 + i_trailing_yuzde/100)
satis_yapildi := true
alis_yapildi := false
status_text := "Satış Sinyali - " + str.tostring(math.round(close, 2))
status_color := i_satis_renk
// Trailing Stop güncelleme
if i_trailing_stop and pozisyonda
if son_islem_alis
trail_level := close * (1 - i_trailing_yuzde/100)
trailing_stop_seviyesi := math.max(trailing_stop_seviyesi, trail_level)
else
trail_level := close * (1 + i_trailing_yuzde/100)
trailing_stop_seviyesi := math.min(trailing_stop_seviyesi, trail_level)
// TP/SL için crossover/crossunder hesaplamaları
// Calculate crossover/crossunder variables once per bar
alis_tp_crossover_check := ta.crossover(close, alis_tp)
alis_sl_crossunder_check := ta.crossunder(close, alis_sl)
satis_tp_crossunder_check := ta.crossunder(close, satis_tp)
satis_sl_crossover_check := ta.crossover(close, satis_sl)
trailing_stop_crossunder_check := i_trailing_stop and ta.crossunder(close, trailing_stop_seviyesi)
// Update global crossover/crossunder variables
alis_tp_crossover := alis_tp_crossover_check
satis_tp_crossunder := satis_tp_crossunder_check
alis_sl_crossunder := alis_sl_crossunder_check
satis_sl_crossover := satis_sl_crossover_check
trailing_stop_crossunder := trailing_stop_crossunder_check
// Pozisyon takibi
if pozisyonda
if son_islem_alis
curr_kar := (close - giris_fiyati) / giris_fiyati * 100
max_kar := math.max(max_kar, curr_kar)
max_zarar := math.min(max_zarar, curr_kar)
// TP veya SL - Use the check variables
if (alis_tp_crossover_check or (i_trailing_stop ? trailing_stop_crossunder_check : alis_sl_crossunder_check))
pozisyonda := false
alis_yapildi := false
last_signal_type := 0 // Pozisyondan çıkışta signal type'ı sıfırla
if close >= alis_tp
win_count := win_count + 1
last_signal_success := true
profit_pct := profit_pct + i_tp_yuzde
status_text := "Alış TP - Kar: " + str.tostring(math.round(i_tp_yuzde, 2)) + "%"
status_color := i_tp_renk
else
loss_count := loss_count + 1
last_signal_success := false
loss_pct := loss_pct + i_sl_yuzde
status_text := "Alış SL - Zarar: " + str.tostring(math.round(i_sl_yuzde, 2)) + "%"
status_color := i_sl_renk
else
curr_kar := (giris_fiyati - close) / giris_fiyati * 100
max_kar := math.max(max_kar, curr_kar)
max_zarar := math.min(max_zarar, curr_kar)
// TP veya SL
if (satis_tp_crossunder_check or (i_trailing_stop ? trailing_stop_crossunder_check : satis_sl_crossover_check))
pozisyonda := false
satis_yapildi := false
last_signal_type := 0 // Pozisyondan çıkışta signal type'ı sıfırla
if close <= satis_tp
win_count := win_count + 1
last_signal_success := true
profit_pct := profit_pct + i_tp_yuzde
status_text := "Satış TP - Kar: " + str.tostring(math.round(i_tp_yuzde, 2)) + "%"
status_color := i_tp_renk
else
loss_count := loss_count + 1
last_signal_success := false
loss_pct := loss_pct + i_sl_yuzde
status_text := "Satış SL - Zarar: " + str.tostring(math.round(i_sl_yuzde, 2)) + "%"
status_color := i_sl_renk
// =================== GÖRSEL ELEMANLARI ===================
// Maliyet çizgileri
plot(alis_maliyeti, "Alış Maliyeti", color=color.new(i_alis_renk, 0), linewidth=i_cizgi_kalinlik, style=plot.style_linebr)
plot(satis_maliyeti, "Satış Maliyeti", color=color.new(i_satis_renk, 0), linewidth=i_cizgi_kalinlik, style=plot.style_linebr)
// Alt ve üst maliyet seviyeleri
plot(alis_maliyeti_alt, "Alış Alt Seviye", color=color.new(i_alis_renk, 70), linewidth=1, style=plot.style_linebr)
plot(alis_maliyeti_ust, "Alış Üst Seviye", color=color.new(i_alis_renk, 70), linewidth=1, style=plot.style_linebr)
plot(satis_maliyeti_alt, "Satış Alt Seviye", color=color.new(i_satis_renk, 70), linewidth=1, style=plot.style_linebr)
plot(satis_maliyeti_ust, "Satış Üst Seviye", color=color.new(i_satis_renk, 70), linewidth=1, style=plot.style_linebr)
// Stop loss ve take profit çizgileri
plot(alis_sl, "Alış Stop Loss", color=color.new(i_sl_renk, 0), linewidth=i_sl_tp_kalinlik, style=plot.style_circles)
plot(alis_tp, "Alış Take Profit", color=color.new(i_tp_renk, 0), linewidth=i_sl_tp_kalinlik, style=plot.style_circles)
plot(satis_sl, "Satış Stop Loss", color=color.new(i_sl_renk, 0), linewidth=i_sl_tp_kalinlik, style=plot.style_circles)
plot(satis_tp, "Satış Take Profit", color=color.new(i_tp_renk, 0), linewidth=i_sl_tp_kalinlik, style=plot.style_circles)
// Trailing Stop çizgisi
plot(i_trailing_stop and pozisyonda ? trailing_stop_seviyesi : na, "Trailing Stop", color=color.new(i_sl_renk, 30), linewidth=1, style=plot.style_stepline)
// Ana sinyal okları
plotshape(alis_sinyal, "Alış Sinyali", style=shape.triangleup, location=location.belowbar, color=i_ok_renk_alis, size=size.normal)
plotshape(satis_sinyal, "Satış Sinyali", style=shape.triangledown, location=location.abovebar, color=i_ok_renk_satis, size=size.normal)
// Olası sinyal okları ve seviyeleri
plotshape(olasi_alis, "Olası Alış", style=shape.circle, location=location.belowbar, color=i_olasi_alis_renk, size=size.tiny)
plotshape(olasi_satis, "Olası Satış", style=shape.circle, location=location.abovebar, color=i_olasi_satis_renk, size=size.tiny)
// Sıra dışı hareket okları
plotshape(siradisi_alis, "Sıra Dışı Yükseliş", style=shape.diamond, location=location.belowbar, color=color.new(i_alis_renk, 0), size=size.large)
plotshape(siradisi_satis, "Sıra Dışı Düşüş", style=shape.diamond, location=location.abovebar, color=color.new(i_satis_renk, 0), size=size.large)
// =================== VOLUME PROFILE VISIBLE RANGE ===================
// VPVR Hesaplama ve Çizim
if barstate.islast
// Sadece son barda VPVR hesaplamaları yap
if i_vpvr_aktif
// VPVR aktif ise
// Değişkenleri tanımla
float aralik_ust = ta.highest(high, i_bar_sayisi)
float aralik_alt = ta.lowest(low, i_bar_sayisi)
float aralik_yukseklik = aralik_ust - aralik_alt
float poc_fiyat_temp = na
float histogram_yukseklik = aralik_yukseklik / i_histogram_sayisi
// Histogram dizilerini yeniden ayarla
array.clear(vpvr_histogram_alt_liste)
array.clear(vpvr_histogram_ust_liste)
array.clear(vpvr_histogram_fiyat_liste)
array.clear(vpvr_histogram_alim_hacmi_liste)
array.clear(vpvr_histogram_satim_hacmi_liste)
array.clear(vpvr_histogram_hacim_yuzde_liste)
// Histogram dizilerini doldur
for i = 0 to i_histogram_sayisi - 1
float histogram_alt = aralik_alt + histogram_yukseklik * i
float histogram_ust = aralik_alt + histogram_yukseklik * (i + 1)
array.push(vpvr_histogram_alt_liste, histogram_alt)
array.push(vpvr_histogram_ust_liste, histogram_ust)
array.push(vpvr_histogram_fiyat_liste, (histogram_alt + histogram_ust) / 2)
array.push(vpvr_histogram_alim_hacmi_liste, 0.0)
array.push(vpvr_histogram_satim_hacmi_liste, 0.0)
array.push(vpvr_histogram_hacim_yuzde_liste, 0.0)
// Bar'ların hacimlerini histogramlara ata
for i = 0 to i_bar_sayisi - 1
float mevcut_bar_yukseklik = high - low
if mevcut_bar_yukseklik > 0
float mevcut_alim_hacmi = volume * (close - low ) / mevcut_bar_yukseklik
float mevcut_satim_hacmi = volume * (high - close ) / mevcut_bar_yukseklik
// Mevcut hacim yüzdesini histogramlara dağıt
for j = 0 to i_histogram_sayisi - 1
if j < array.size(vpvr_histogram_alt_liste) and j < array.size(vpvr_histogram_ust_liste)
float h_alt = array.get(vpvr_histogram_alt_liste, j)
float h_ust = array.get(vpvr_histogram_ust_liste, j)
// Bar ve histogram arasındaki kesişim hesapla
float hedef = math.max(h_ust, high ) - math.min(h_alt, low )
- math.max(0, math.max(h_ust, high ) - math.min(h_ust, high ))
- math.max(0, math.max(h_alt, low ) - math.min(h_alt, low ))
float hacim_yuzde = hedef / mevcut_bar_yukseklik
if hacim_yuzde > 0
float h_alim = array.get(vpvr_histogram_alim_hacmi_liste, j)
float h_satim = array.get(vpvr_histogram_satim_hacmi_liste, j)
array.set(vpvr_histogram_alim_hacmi_liste, j, h_alim + mevcut_alim_hacmi * hacim_yuzde)
array.set(vpvr_histogram_satim_hacmi_liste, j, h_satim + mevcut_satim_hacmi * hacim_yuzde)
// En yüksek hacimli histogramı bul (POC - Point of Control)
float en_yuksek_hacim = 0.0
for i = 0 to i_histogram_sayisi - 1
if i < array.size(vpvr_histogram_alim_hacmi_liste) and i < array.size(vpvr_histogram_satim_hacmi_liste)
float h_alim = array.get(vpvr_histogram_alim_hacmi_liste, i)
float h_satim = array.get(vpvr_histogram_satim_hacmi_liste, i)
float h_toplam = h_alim + h_satim
if h_toplam > en_yuksek_hacim
en_yuksek_hacim := h_toplam
poc_fiyat_temp := array.get(vpvr_histogram_fiyat_liste, i)
// POC değerlerini güncelle
vpvr_poc_fiyat := poc_fiyat_temp
vpvr_poc_hacim := en_yuksek_hacim
if not na(vpvr_poc_fiyat)
vpvr_poc_yuzde := (close - vpvr_poc_fiyat) / vpvr_poc_fiyat * 100
// Kapanış fiyatı POC'un üzerinde mi kontrol et
vpvr_ustunde := close > vpvr_poc_fiyat
// POC metni ve rengini ayarla
if vpvr_poc_yuzde > 0
vpvr_poc_renk := color.green
vpvr_poc_metin := str.tostring(vpvr_poc_fiyat, "#.00") + " ↑"
else
vpvr_poc_renk := color.red
vpvr_poc_metin := str.tostring(vpvr_poc_fiyat, "#.00") + " ↓"
// Önceki kutuları ve çizgileri temizle
if array.size(vpvr_alim_kutulari) > 0
for i = 0 to array.size(vpvr_alim_kutulari) - 1
box.delete(array.get(vpvr_alim_kutulari, i))
if array.size(vpvr_satim_kutulari) > 0
for i = 0 to array.size(vpvr_satim_kutulari) - 1
box.delete(array.get(vpvr_satim_kutulari, i))
if array.size(vpvr_cizgiler) > 0
for i = 0 to array.size(vpvr_cizgiler) - 1
line.delete(array.get(vpvr_cizgiler, i))
array.clear(vpvr_alim_kutulari)
array.clear(vpvr_satim_kutulari)
array.clear(vpvr_cizgiler)
// Aralık üst ve alt sınırlarını çiz
int zaman_birimi = int(time - time )
line ust_cizgi = line.new(time , aralik_ust, time + i_son_mumdan_mesafe * zaman_birimi, aralik_ust,
xloc=xloc.bar_time, color=i_line_renk, width=2)
line alt_cizgi = line.new(time , aralik_alt, time + i_son_mumdan_mesafe * zaman_birimi, aralik_alt,
xloc=xloc.bar_time, color=i_line_renk, width=2)
// Çizgileri diziye ekle
array.push(vpvr_cizgiler, ust_cizgi)
array.push(vpvr_cizgiler, alt_cizgi)
// Histogramları çiz
// Önce maksimum hacmi bul
float max_hacim = en_yuksek_hacim
if max_hacim > 0
for i = 0 to i_histogram_sayisi - 1
if i < array.size(vpvr_histogram_alt_liste) and i < array.size(vpvr_histogram_ust_liste) and i < array.size(vpvr_histogram_alim_hacmi_liste) and i < array.size(vpvr_histogram_satim_hacmi_liste)
float h_alt = array.get(vpvr_histogram_alt_liste, i)
float h_ust = array.get(vpvr_histogram_ust_liste, i)
float h_alim = array.get(vpvr_histogram_alim_hacmi_liste, i)
float h_satim = array.get(vpvr_histogram_satim_hacmi_liste, i)
float h_toplam = h_alim + h_satim
if h_toplam > 0
float genislik = i_poc_genislik * h_toplam / max_hacim
float alim_genislik = math.floor(genislik * h_alim / h_toplam)
float satim_genislik = math.floor(genislik * h_satim / h_toplam)
// Alım ve satım histogramlarını çiz
if alim_genislik > 0
box alim_kutu = box.new( left=int(bar_index + i_son_mumdan_mesafe), top=h_ust, right=int(bar_index + i_son_mumdan_mesafe + alim_genislik), bottom=h_alt, bgcolor=i_alis_bar_renk, border_color=color.new(color.black, 80))
array.push(vpvr_alim_kutulari, alim_kutu)
if satim_genislik > 0
box satim_kutu = box.new( left=int(bar_index + i_son_mumdan_mesafe + alim_genislik), top=h_ust, right=int(bar_index + i_son_mumdan_mesafe + alim_genislik + satim_genislik), bottom=h_alt, bgcolor=i_satis_bar_renk, border_color=color.new(color.black, 80))
array.push(vpvr_satim_kutulari, satim_kutu)
else
// VPVR aktif değilse tüm görsel nesneleri temizle
// Kutuları temizle
if array.size(vpvr_alim_kutulari) > 0
for i = 0 to array.size(vpvr_alim_kutulari) - 1
box.delete(array.get(vpvr_alim_kutulari, i))
if array.size(vpvr_satim_kutulari) > 0
for i = 0 to array.size(vpvr_satim_kutulari) - 1
box.delete(array.get(vpvr_satim_kutulari, i))
// Çizgileri temizle
if array.size(vpvr_cizgiler) > 0
for i = 0 to array.size(vpvr_cizgiler) - 1
line.delete(array.get(vpvr_cizgiler, i))
// Dizileri temizle
array.clear(vpvr_alim_kutulari)
array.clear(vpvr_satim_kutulari)
array.clear(vpvr_cizgiler)
// VPVR POC (Point of Control) Bilgisi
if barstate.islast
if i_vpvr_aktif
// VPVR aktifse POC bilgilerini göster
table.cell(table_obj, 0, 19, "VPVR POC:", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 19, vpvr_poc_metin, text_color=vpvr_poc_renk, text_size=size.small, bgcolor=i_panel_renk)
if not na(vpvr_poc_yuzde)
table.cell(table_obj, 0, 20, "POC'ye Mesafe (%):", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 20, str.tostring(vpvr_poc_yuzde, "#.##") + "%",
text_color=vpvr_poc_yuzde >= 0 ? color.green : color.red,
text_size=size.small,
bgcolor=i_panel_renk)
// POC'un üstünde mi altında mı bilgisi
table.cell(table_obj, 0, 21, "POC Durumu:", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 21, vpvr_ustunde ? "POC Üzerinde ↑" : "POC Altında ↓",
text_color=vpvr_ustunde ? color.green : color.red,
text_size=size.small,
bgcolor=i_panel_renk)
else
table.cell(table_obj, 0, 20, "POC'ye Mesafe (%):", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 20, "HESAPLANIYOR", text_color=i_panel_yazi_renk, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 0, 21, "POC Durumu:", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 21, "HESAPLANIYOR", text_color=i_panel_yazi_renk, text_size=size.small, bgcolor=i_panel_renk)
else
// VPVR aktif değilse boş hücreler göster
table.cell(table_obj, 0, 19, "", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 19, "", text_color=i_panel_yazi_renk, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 0, 20, "", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 20, "", text_color=i_panel_yazi_renk, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 0, 21, "", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 21, "", text_color=i_panel_yazi_renk, text_size=size.small, bgcolor=i_panel_renk)
// =================== PANEL ===================
// Panel pozisyonunu ayarla
var panel_pos = i_panel_konum == "Sag Üst" ? position.top_right :
i_panel_konum == "Sol Üst" ? position.top_left :
i_panel_konum == "Sag Alt" ? position.bottom_right : position.bottom_left
// Renk ayarları
var panel_bg_renk = i_panel_renk
var panel_text_renk = color.white
var alim_renk = i_alis_renk
var satim_renk = i_satis_renk
// Tablo oluştur
table_obj := table.new(panel_pos, 2, 22, i_panel_renk, frame_width=2, frame_color=panel_text_renk, border_color=panel_text_renk, border_width=1)
// Maliyet referansları için formatlama fonksiyonu
f_renk_format(deger, ref_alt, ref_ust) =>
deger < ref_alt ? satim_renk : deger > ref_ust ? alim_renk : panel_text_renk
// Tablo başlığı
f_tablo_guncelle(table_obj) =>
table.cell(table_obj, 0, 0, "Spekulator Maliyet Analizi Pro V4", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 0, "v4.1", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
// Piyasa bilgileri
table.cell(table_obj, 0, 1, "PİYASA BİLGİLERİ", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 1, "", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 0, 2, "Trend:", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
trend_durum = uptrend ? 1 : -1
trend_renk = trend_durum == 1 ? alim_renk : satim_renk
trend_metin = trend_durum == 1 ? "YUKARI (Alış)" : "AŞAĞI (Satış)"
table.cell(table_obj, 1, 2, trend_metin, text_color=trend_renk, text_size=size.small, bgcolor=i_panel_renk)
// Maliyet bilgileri
table.cell(table_obj, 0, 3, "MALİYET HESABI", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 3, "", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 0, 4, "Kritik Fib. 61.8%:", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 4, str.tostring(alis_maliyeti, "#.00"), text_color=f_renk_format(close, alis_maliyeti * 0.99, alis_maliyeti * 1.01), text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 0, 5, "Kritik Fib. 78.6%:", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 5, str.tostring(satis_maliyeti, "#.00"), text_color=f_renk_format(close, satis_maliyeti * 0.99, satis_maliyeti * 1.01), text_size=size.small, bgcolor=i_panel_renk)
// Diğer maliyet bilgileri...
table.cell(table_obj, 0, 6, "TE Maliyet (ORT):", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 6, str.tostring(alis_maliyeti, "#.00"), text_color=f_renk_format(close, alis_maliyeti * 0.99, alis_maliyeti * 1.01), text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 0, 7, "TE Min. Maliyet:", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 7, str.tostring(alis_maliyeti_alt, "#.00"), text_color=f_renk_format(close, alis_maliyeti_alt * 0.99, alis_maliyeti_alt * 1.01), text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 0, 8, "TE Maks. Maliyet:", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 8, str.tostring(alis_maliyeti_ust, "#.00"), text_color=f_renk_format(close, alis_maliyeti_ust * 0.99, alis_maliyeti_ust * 1.01), text_size=size.small, bgcolor=i_panel_renk)
// Pozisyon durumu
table.cell(table_obj, 0, 9, "POZİSYON DURUMU", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 9, "", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
var int son_trend_yonu = 0
var int son_trend_uzunlugu = 0
if close > open
if son_trend_yonu == 1
son_trend_uzunlugu := son_trend_uzunlugu + 1
else
son_trend_yonu := 1
son_trend_uzunlugu := 1
else if close < open
if son_trend_yonu == -1
son_trend_uzunlugu := son_trend_uzunlugu + 1
else
son_trend_yonu := -1
son_trend_uzunlugu := 1
pos_durum_renk = pozisyonda ? (son_islem_alis ? alim_renk : satim_renk) : panel_text_renk
pos_durum_metin = pozisyonda ? (son_islem_alis ? "UZUN (Alış)" : "KISA (Satış)") : "POZİSYON YOK"
table.cell(table_obj, 0, 10, "Mevcut Pozisyon:", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 10, pos_durum_metin, text_color=pos_durum_renk, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 0, 11, "Sinyal Tipi:", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
sinyal_renk = last_signal_type == 1 ? alim_renk : last_signal_type == -1 ? satim_renk : panel_text_renk
sinyal_metin = last_signal_type == 1 ? "ALIS" : last_signal_type == -1 ? "SATIŞ" : "YOK"
table.cell(table_obj, 1, 11, sinyal_metin, text_color=sinyal_renk, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 0, 12, "Olası Sinyal:", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
olasi_sinyal_renk = olasi_alis ? alim_renk : olasi_satis ? satim_renk : panel_text_renk
olasi_sinyal_metin = olasi_alis ? "OLASI ALIS" : olasi_satis ? "OLASI SATIŞ" : "YOK"
table.cell(table_obj, 1, 12, olasi_sinyal_metin, text_color=olasi_sinyal_renk, text_size=size.small, bgcolor=i_panel_renk)
// Hacim ve volatilite
table.cell(table_obj, 0, 13, "DESTEKLEYEN FAKTÖRLER", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 13, "", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
// RSI
rsi_renk = rsi < 30 ? alim_renk : rsi > 70 ? satim_renk : panel_text_renk
table.cell(table_obj, 0, 14, "RSI Değeri:", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 14, str.tostring(rsi, "#.00"), text_color=rsi_renk, text_size=size.small, bgcolor=i_panel_renk)
// Hacim Durumu
float yerel_hacim_orani = volume / vol_sma
hacim_renk = yerel_hacim_orani > 1.1 ? alim_renk : yerel_hacim_orani < 0.9 ? satim_renk : panel_text_renk
table.cell(table_obj, 0, 15, "Hacim Oranı:", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 15, str.tostring(yerel_hacim_orani, "#.00x"), text_color=hacim_renk, text_size=size.small, bgcolor=i_panel_renk)
// Mevcut Aralık
fiyat_araligi = (high - low) / low * 100
aralik_renk = fiyat_araligi > 1.5 ? alim_renk : panel_text_renk
table.cell(table_obj, 0, 16, "Fiyat Aralığı (%):", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 16, str.tostring(fiyat_araligi, "#.00") + "%", text_color=aralik_renk, text_size=size.small, bgcolor=i_panel_renk)
// Ardışık Mum Sayısı
mum_renk = son_trend_yonu == 1 ? alim_renk : son_trend_yonu == -1 ? satim_renk : panel_text_renk
mum_metin = son_trend_yonu == 1 ? "+" + str.tostring(son_trend_uzunlugu) + " YEŞİL" : son_trend_yonu == -1 ? "-" + str.tostring(son_trend_uzunlugu) + " KIRMIZI" : "NÖTR"
table.cell(table_obj, 0, 17, "Ardışık Mumlar:", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 17, mum_metin, text_color=mum_renk, text_size=size.small, bgcolor=i_panel_renk)
// Anormal Hareket Uyarısı
var int siradisi_durumlar = 0
siradisi_durumlar := siradisi_alis or siradisi_satis ? siradisi_durumlar + 1 : siradisi_durumlar
siradisi_renk = siradisi_durumlar > 0 ? color.yellow : panel_text_renk
siradisi_metin = siradisi_durumlar > 0 ? "Sıra Dışı İşaret" : "NORMAL"
table.cell(table_obj, 0, 18, "Sıra Dışı Durum:", text_color=color.white, text_size=size.small, bgcolor=i_panel_renk)
table.cell(table_obj, 1, 18, siradisi_metin, text_color=siradisi_renk, text_size=size.small, bgcolor=i_panel_renk)
// Panel'i güncelle
if barstate.islast
f_tablo_guncelle(table_obj)
// =================== ALERTLER ===================
alertcondition(alis_sinyal, "Alış Sinyali", "Fiyat alış maliyetini yukarı kırdı")
alertcondition(satis_sinyal, "Satış Sinyali", "Fiyat satış maliyetini aşağı kırdı")
alertcondition(alis_tp_crossover, "Alış TP", "Alış pozisyonu kar hedefine ulaştı")
alertcondition(satis_tp_crossunder, "Satış TP", "Satış pozisyonu kar hedefine ulaştı")
alertcondition(alis_sl_crossunder, "Alış SL", "Alış pozisyonu stop loss seviyesinde")
alertcondition(satis_sl_crossover, "Satış SL", "Satış pozisyonu stop loss seviyesinde")
alertcondition(trailing_stop_crossunder, "Trailing Stop", "Trailing stop seviyesine ulaşıldı")
alertcondition(olasi_alis, "Olası Alış", "Olası alış fırsatı")
alertcondition(olasi_satis, "Olası Satış", "Olası satış fırsatı")
// Sıra dışı hareket alertleri
alertcondition(siradisi_alis, "Sıra Dışı Yükseliş", "Anormal derecede hızlı bir yükseliş tespit edildi!")
alertcondition(siradisi_satis, "Sıra Dışı Düşüş", "Anormal derecede hızlı bir düşüş tespit edildi!")
FVG Detector by SZEMEKSkrypt "FVG Detector by SZEMEK" to zaawansowany wskaźnik dla platformy TradingView, który służy do wykrywania i wizualizacji luk wartości godziwej (Fair Value Gaps, FVG) na wykresie.
Oto rozszerzony opis funkcjonalności skryptu:
Główne cechy
Wykrywanie FVG:
Skrypt identyfikuje zarówno bycze (Bullish), jak i niedźwiedzie (Bearish) luki wartości godziwej.
Użytkownik może wybrać, które typy FVG mają być wyświetlane (Bullish, Bearish, oba lub żadne).
Wizualizacja FVG:
Luki są przedstawiane jako prostokątne boxy na wykresie.
Kolor i przezroczystość boxów są konfigurowalne osobno dla FVG byczych i niedźwiedzich.
Możliwość dodania ramki do boxów FVG z osobnymi ustawieniami kolorów.
Etykiety FVG:
Opcja wyświetlania etykiet na boxach FVG.
Konfigurowalne kolory i rozmiary etykiet.
Etykiety pokazują procent wypełnienia FVG.
Dynamiczne śledzenie wypełnienia FVG:
Skrypt monitoruje, w jakim stopniu każda luka została wypełniona przez późniejsze ruchy ceny.
Stopień wypełnienia jest wizualizowany za pomocą szarego koloru nakładanego na oryginalny box FVG.
Procent wypełnienia jest aktualizowany na etykiecie.
Automatyczne usuwanie FVG:
Możliwość ustawienia progu procentowego (100%, 75%, 50% lub brak usuwania), po którego przekroczeniu FVG jest usuwany z wykresu.
Jeśli wybrano opcję "nie usuwaj", całkowicie wypełnione FVG zmieniają kolor na szary.
Ograniczenie sprawdzanych świec:
Użytkownik może określić maksymalną liczbę świec wstecz, które skrypt będzie analizował w poszukiwaniu FVG.
Optymalizacja wydajności:
Skrypt wykorzystuje tablice do przechowywania i zarządzania wykrytymi FVG, co poprawia wydajność przy dużej liczbie FVG na wykresie.
Zaawansowane funkcje
Dokładne obliczanie procentu wypełnienia FVG, uwzględniające zarówno knoty, jak i ciała świec.
Dynamiczne aktualizowanie boxów FVG i ich etykiet w czasie rzeczywistym.
Elastyczne zarządzanie pamięcią poprzez usuwanie nieaktualnych lub wypełnionych FVG.
Skrypt ten stanowi zaawansowane narzędzie do analizy technicznej, umożliwiające traderom identyfikację potencjalnych obszarów wsparcia i oporu bazujących na koncepcji luk wartości godziwej.
ADR%-8 EMA Extension-ADR% Lines This indicator shows the following:
What is the ADR%
How far is the ADR% from the 8 EMA
What is the range of the ADR% for the day.
Multi-EMA Combination with Multi-Timeframe EMA By BCB ElevateBenefits and Features of the Multi-EMA Combination Indicator with Multi-Timeframe EMA:
Key Features:
Multiple EMA Support:
Tracks up to six EMAs simultaneously, each with customizable lengths and colors.
Allows traders to observe various short-term and long-term trends in the market.
Multi-Timeframe EMA (MTF EMA):
Incorporates a higher timeframe EMA directly into the current chart.
Useful for aligning intraday trading strategies with broader market trends.
Provides customizable settings, including the EMA length and timeframe.
Combined Alerts:
Automated alerts for key crossover and crossunder events.
Alerts include:
EMA 1 crossing EMA 2 (shorter-term signals).
EMA 1 crossing EMA 2 and EMA 3 together (stronger confirmation signals).
Can enable or disable buy and sell alerts separately.
Customizability:
Users can set EMA lengths, colors, and other preferences directly from the settings menu.
The multi-timeframe EMA can be toggled on/off for flexibility.
User-Friendly Visuals:
Clearly plots EMAs with different colors and line widths to distinguish trends.
The multi-timeframe EMA uses a unique style for better visibility.
Stock to Gold RatioYou can use this as simply a guide or to see how a physical asset compares to a company or another physical commodity.
All time frames and all stocks that can be charted work with this code/indicator. It relies on the gold spot and not the futures so there isn't as much noise in the charting.
If you want to trend line arcuately, then go into settings and in style make sure to apply crosses or circles and place your points on the highs or lows you want. Then simply reapply line choice and go from there.
You may say why gold...Well maybe its your currency that is falling and not the metal going up hmm....Kinda like the stock I chose to advertise this.
For when it come to hands full of things, One is Silver, and the other...Gold.
PE Ratio vs FD Rate (%)This indicator shows whether Nifty is cheap in front of bank FD rates.
One have to input PE ratio of the stock and bank FD rate and this indicator will tell you whether it's correct time to buy or not.
ADX (14,14) with Signals and LabelsADX14 indicator for trend identification bullish view or bearish view
Simple Bull and Bear Algo SignalThis Indicator has filtered out most of the noise, with combination of Moving average as second confirmation, it provides as accurate as possible to avoid any false signal. You have the option to change the MA based on your needs, and TP / SL leveling as well. Enjoy!
You may join my telegram for other Free indicator or EA at no cost!
t.me
Cash Flow YieldsCash Flow Yields Indicator
This indicator offers a straightforward way to visualize a company’s cash flow metrics—Free Cash Flow (FCF), Operating Cash Flow (OCF), and Capital Expenditures (CapEx)—as yields relative to its market capitalization. With the flexibility to switch between Trailing Twelve Months (TTM) and Quarterly data, it’s perfect for spotting financial efficiency trends at a glance. Values are plotted as dynamic lines with smart color coding and labeled for clarity.
Features:
TTM & Quarterly Data: Toggle between financial periods to suit your analysis.
Color-Coded Lines: Green for positive OCF, teal for positive FCF, and blue for CapEx. Red and maroon kick in when values turn negative.
Yield Perspective: See FCF, OCF, and CapEx as percentages of market cap, making it easy to compare cash flow strength across companies.
Clear Labels: The latest values pop up on the chart, positioned to the right of the last bar.
Simple & Intuitive: No clutter - just clean lines and numbers to help you focus on what matters.
To use it, add it to your chart and toggle between TTM or Quarterly to see trends. FCF should roughly equal OCF minus CapEx. Adjust your view to focus on companies with strong FCF yields for potential opportunities.
This indicator is freely available and open-source on TradingView for everyone to use. Enjoy!
Weekly Expected Move with TableThis indicator simply takes the values that you receive from the published chart from the discord group and places the lines on the chart for tracking along with a table.
Primarily for the NQ and ES.
Simply update the 2 weekly close and EM inputs.
This is to adjust for the differing "Settlement close" vs Trading View's Actual Close.
The Published value is the Exchange Settlement close value
Once you enter in the EM value. the IV from the "Options ATM" table will be reverse calculated and used for the Sigma 2 calculations completing the tables..
Since Options data is not present in Tradingview. we have to enter in the EM value from the chart published.
Looking to expand the indicator for additional symbols if there's interest
The Prediction row that's optional. simply provides a prediction of chance that price will hit the target upper and lowers.
Enjoy!
Estrategia Rentable de TradingDescripción de la Estrategia:
Medias Móviles: Utiliza una media móvil rápida y una lenta para identificar tendencias. Se generan señales de compra cuando la media rápida cruza por encima de la lenta y señales de venta cuando cruza por debajo.
RSI: Se utiliza el RSI para confirmar las entradas. Se busca comprar cuando el RSI está en sobreventa y vender cuando está en sobrecompra.
Gestión de Riesgos: Se establecen niveles de stop loss y take profit basados en porcentajes configurables.
D'Trade&Chill - SMC V2.01-1Price action and supply and demand is a key strategy use in trading. We wanted it to be easy and efficient for user to identify these zones, so the user can focus less on marking up charts and focus more on executing trades.
This indicator shows you supply and demand zones by using pivot points to show you the recent highs and the recent lows.
Features
This indicator includes some features relevant to SMC , these are highlighted below:
Full internal & swing market structure labeling in real-time
Swing Structure: Displays the swing structure labels & solid lines on the chart (BOS).
Supply & demand ( bullish & bearish )
Swing Points: Displays swing points labels on chart such as HH, HL, LH, LL.
Options to style the indicator to more easily display these concepts
White OB (supply): search for short opportunities
Blue OB (demand): search for long opportunities
Break of structure ( BOS )
For markets to move up and down a break in market structure must occur. A break in market structure occurs when the market begins to shift direction and break the previous HH and HL or HL and LL of the market. We also integrated the feature that you can see the BOS lines. In the indicator settings you can adjust the color of the label.
Copy từ tác giả FluidTrades - SMC Lite . Cảm Ơn tác giả đã có 1 chỉ báo tuyệt vời.
Settings
SwingHigh/Low Length: Allows the user to select Historical (default) or Present, which displays only recent data on the chart.
Supply/demand box width: Allows user to change the size of the supply and demand box
History to keep: allows the user to select how many most recent supply & demand box appear on the chart.
Visual settings
Show zig zag : allow user to see market patters within the market
Show price action labels: allow user to turn on/off the (swing points)
Supply box color : allow users to change the color of their supply box
Demand box color : allow users to change the color of their supply box
Bos label color : allow users to change the color of their BOS label
Poi label color : allow user to change the color of their POI label
Price action label : allow users to change the color of their swing points labels
Zig zag color : allow users to change the color of the zig/zag market patters
Warning
Never blindly take a trade on a supply/demand box - wait for a proper market structure to occur before considering a trade
QuantaFlux MomentumQuantaFlux Momentum is a powerful, multi-factor indicator-strategy designed to capture robust market trends while filtering out noise. Here’s what it offers:
Pivot-Based Slope Lines
Identifies swing highs/lows and projects dynamic trendlines to spot breakout signals.
ADX & DI Tracking
Confirms trend strength using classic DI+ (green), DI− (red), and ADX threshold.
Includes divergence signals when DI+ and DI− cross.
MomentumFlow Engine
Employs MFI/RSI and ATR logic to issue momentum-based buy/sell signals.
Adjustable cooldown prevents rapid, back-to-back signals.
Z-Score Reversal Alerts
Detects extremes (overbought/oversold) in price distribution.
Issues additional buy/sell signals at statistical outlier zones.
Customizable Filters
MA Filter: Only trade with the short-term MA above/below the long-term MA.
RSI Filter: Optional requirement for RSI > 50 (longs) or < 50 (shorts).
ADX Rising: Demands ADX to be rising for stronger trend conviction.
Adaptive Trade Management
Partial Profits: Lock in gains early with ATR-based targets.
Trailing Stop: Protect the remainder of your position as price moves.
Time-Based Exit: Closes trades automatically after a user-defined number of bars.
Composite vs. Independent Mode
Combine signals (MomentumFlow, Z-Score, and Slope Breaks) for more robust confirmations.
Or act on any single signal independently for more frequent trades.
Bonus Features
Comprehensive Info Table (top-right) showing RSI, MACD, DI+, DI−, Z-Score, MAs, and ADX at a glance.
RSI Trend Insight: Classifies RSI movement over a short lookback as rising, falling, or neutral.
Price Action Trend: Highlights Uptrend, Downtrend, or No Clear Trend based on multiple conditions.
PE Ratio & MAPE Ratio & Moving Average Indicator
Overview:
This indicator is designed to help traders monitor changes in a stock’s Price-to-Earnings (P/E) ratio using earnings per share data provided by TradingView’s financial database. It displays the raw P/E ratio alongside a smoothed trend line in a dedicated pane, allowing you to observe valuation trends over time.
Key Features:
Customizable Earnings Period: Choose your preferred earnings period (e.g., TTM, Fiscal Year, or Fiscal Quarter) to match your analysis style.
Real-Time P/E Calculation: The indicator computes the P/E ratio based on the latest available data and the current closing price.
Smoothed Trend Line: In addition to the raw P/E ratio, a smoothed moving line is plotted to help you easily identify underlying trends and turning points.
Alert Conditions: Built-in alert settings notify you when the P/E ratio shows significant directional changes, enabling you to react quickly to market shifts.
User-Friendly Interface: Simple inputs make customization straightforward, even if you’re not a coding expert.
The indicator has been thoroughly tested and is designed to accurately calculate and display the P/E Ratio in real-time , ensuring reliability in various market conditions..
Users can fully customize the indicator by adjusting the earnings period (TTM, Fiscal Year, or Fiscal Quarter) and smoothing parameters to match their analysis style and preferences.
The moving average smoothing options allow traders to fine-tune the trend line for a more accurate representation of the stock’s valuation.
How to Use:
Add the Indicator: Apply it to your TradingView chart to see the P/E ratio and its trend line displayed in a separate pane.
Customize Settings: Adjust the earnings period as needed using the input options.
Set Up Alerts: Configure alerts through TradingView’s Alerts panel to be notified when key changes occur in the P/E ratio’s behavior.
Integrate with Your Strategy: Use this tool in combination with your other technical and fundamental analysis methods to make more informed trading decisions.
Disclaimer:
This indicator is for informational and educational purposes only and does not constitute financial advice. Always conduct your own research before making any trading decisions.
EMA Ribbon with 100 MA BY TIJUThe EMA Ribbon with 100 MA is a powerful and visually intuitive indicator designed to help traders identify trends, momentum, and potential support/resistance levels using multiple Exponential Moving Averages (EMAs). By plotting a series of EMAs with varying periods, the script creates a "ribbon" effect on the chart, making it easier to spot trend direction and strength at a glance.
Key Features:
Multiple EMAs for Trend Analysis:
The script plots 8 EMAs with periods ranging from 20 to 55, creating a gradient ribbon effect.
The 100-period EMA is added as a thick blue line, acting as a key level for long-term trend analysis.
Customizable Periods:
Each EMA period is fully customizable, allowing traders to tailor the indicator to their preferred trading style and timeframe.
Visual Clarity:
The EMAs are color-coded, making it easy to distinguish between different periods and identify the overall trend direction.
Dynamic Support/Resistance:
The EMAs act as dynamic support and resistance levels, helping traders identify potential entry and exit points.
Drop Candles Feature:
The script includes an option to drop the first N candles, ensuring cleaner calculations and avoiding false signals during the initial periods.
How to Use:
Trend Identification:
Uptrend: When the shorter-period EMAs are stacked above the longer-period EMAs, it indicates a strong uptrend.
Downtrend: When the longer-period EMAs are stacked above the shorter-period EMAs, it indicates a strong downtrend.
Consolidation: When the EMAs are intertwined, it suggests a sideways or weak trend.
Support/Resistance Levels:
Use the EMAs as dynamic support/resistance levels. For example, in an uptrend, the price may bounce off the lower EMAs.
100-Period EMA:
The 100-period EMA (thick blue line) acts as a key level for long-term trend analysis. A price above this line suggests a bullish bias, while a price below suggests a bearish bias.
Customization:
Adjust the EMA periods and colors to suit your trading strategy.
Use the Drop first N candles option to avoid false signals during the initial periods.
Example Use Cases:
Trend Following:
Enter long positions when the price is above the EMA ribbon and the EMAs are stacked in an uptrend.
Enter short positions when the price is below the EMA ribbon and the EMAs are stacked in a downtrend.
Dynamic Support/Resistance:
Use the EMAs as dynamic support/resistance levels for setting stop-loss or take-profit targets.
Confirmation Tool:
Combine the EMA Ribbon with other indicators (e.g., RSI, MACD) to confirm trade signals.
Settings:
MA-1 to MA-8 Periods: Adjust the periods for the 8 EMAs (default: 20, 25, 30, 35, 40, 45, 50, 55).
MA-100 Period: Adjust the period for the 100 EMA (default: 100).
Source: Choose the price source for the EMAs (default: Close).
Drop First N Candles: Drop the first N candles to avoid false signals (default: 1).
Why Use EMA Ribbon ?
Versatility: Suitable for all trading styles (scalping, day trading, swing trading) and timeframes.
Visual Appeal: The color-coded ribbon makes it easy to interpret the trend at a glance.
Customizable: Tailor the indicator to your specific trading strategy.
Dynamic Levels: Use the EMAs as dynamic support/resistance levels for better risk management.
TILT - Timed Index of Liquidity TrendsThe Timed Index of Liquidity Trends (TILT) is a tracking tool for high-market cap, high-volatility assets like Bitcoin (BTCUSD), the S&P 500 (SPY), the Nasdaq 100 (QQQ), and Gold. Liquidity drives markets; understanding when liquidity is expanding or contracting can help traders anticipate major market swings with greater confidence.
TILT’s M2 Calculation
TILT is based on a global M2 money supply proxy, which aggregates liquidity conditions from major economies. Since TradingView does not provide direct M2 data for all regions, the indicator uses market-based proxies instead:
🇺🇸 United States – S&P 500 Index (SPX)
🇨🇦 Canada – TSX Composite Index (TSX)
🇪🇺 Eurozone – EUR/USD Exchange Rate (EURUSD)
🇬🇧 United Kingdom – GBP/USD Exchange Rate (GBPUSD)
🇷🇺 Russia – Moscow Exchange Index (MOEX)
🇨🇳 China – China 50 Index (CN50USD)
🇯🇵 Japan – Nikkei 225 Index (JPN225)
🇦🇺 Australia – Gold (XAUUSD) as a liquidity proxy
🇮🇳 India – Nifty 50 Index (NIFTY)
🇰🇷 South Korea – KOSPI Index (KOSPI)
🇧🇷 Brazil – Bovespa Index (IBOV)
🇿🇦 South Africa – USD/ZAR Exchange Rate (USDZAR)
By summing these liquidity proxies, TILT provides a comprehensive view of global M2 conditions, allowing traders to see when money supply is expanding (bullish liquidity conditions) or contracting (bearish liquidity conditions).
How to Use TILT for Trading High-Volatility Assets
TILT is not a traditional price indicator. It is a macro tool designed to show whether liquidity is flowing into or out of the financial system. Assets like Bitcoin, QQQ, and Gold tend to perform well when liquidity is expanding and decline when liquidity is contracting.
₿ Bitcoin (BTCUSD) – The Ultimate Liquidity Sponge
Bitcoin thrives on excess liquidity because it is still a speculative asset with no central authority.
· Liquidity Expanding → BTC tends to rise, as speculative capital flows in.
· Liquidity Contracting → BTC struggles or enters a bear market as leverage dries up.
Example Use Case: If TILT turns green (expanding liquidity) and BTC is near a technical support zone, it may indicate a buying opportunity before the next rally.
📊 S&P 500 (SPY) & Nasdaq 100 (QQQ) – Growth & Risk Appetite
These indices are heavily influenced by liquidity conditions because they represent growth stocks and corporate credit access.
· SPY (🇺🇸) → Moves based on global liquidity, particularly Fed policy & M2 expansion.
· QQQ (🇺🇸) → Even more sensitive than SPY due to high exposure to tech stocks.
Example Use Case: If TILT shows liquidity expansion, QQQ often leads SPY higher, providing early signals for market-wide risk-on behavior.
🥇 Gold – Liquidity & Inflation Hedge
Gold is a monetary asset, meaning it benefits from liquidity expansion and inflation fears.
· Liquidity Expanding → Gold can rally as real yields decline.
· Liquidity Contracting → Gold struggles, especially if real yields rise.
Example Use Case: If TILT turns red (liquidity contracting) and bond yields are rising, gold could enter a bearish phase.
⏱️ Timing Market Swings with the Offset Function
The offset function in TILT allows traders to shift liquidity data forward or backward in time to find the best correlation with price action. However, the offset is not fixed and should be re-evaluated periodically to ensure it remains optimized as a leading indicator. Liquidity cycles and market conditions change over time, meaning an offset that worked well in one period may need adjustment in another.
🤔 Why Use an Offset?
Liquidity moves markets with a lag – The effect of M2 expansion/contraction takes time to show up in risk assets.
Finding the right lag helps confirm liquidity-driven price moves – This is crucial for Bitcoin, QQQ, and Gold, which react differently to liquidity shifts.
Since liquidity conditions evolve, the offset should be adjusted from time to time to maintain predictive accuracy.
👋 How to Fit the Offset Using Vertical Reference Lines
The best way to optimize the offset is by testing historical liquidity cycles and using vertical reference lines (and/or the Date Range tool) to align liquidity trends with major price swings.
Step 1: Plot TILT and the asset you’re analyzing (e.g., BTCUSD) on the same chart.
Step 2: Add vertical lines on significant price reversals (major tops & bottoms).
Step 3: Adjust TILT’s offset forward or backward to see if liquidity trends lead or lag those reversals.
Step 4: Periodically revisit the offset setting to ensure it still aligns well with current market conditions.
Example: If BTC topped 10 bars after TILT turned red, you might set the offset to +10 to better align liquidity changes with price action. If, over time, BTC begins reacting faster or slower to liquidity shifts, the offset should be updated accordingly.
💡 Advanced Tips for TILT Users
· Combine TILT With Sentiment Indicators Like the Fear & Greed Index
· Low Fear & Expanding Liquidity → Strong buy signal for BTC & risk assets
· High Greed & Contracting Liquidity → Caution: Market topping signal
· Use With Volume & On-Chain Metrics for BTC
· Rising TILT + Increasing BTC Volume → Confirms strong accumulation
· TILT Falling + Weak BTC Volume → Potential distribution & market risk
· Watch for Divergences
If BTC makes a new high but TILT is falling, it could indicate a liquidity-driven market top.
If BTC makes a new low but TILT is rising, it could indicate a bottom forming.
Conclusion: TILT = The Macro Liquidity Key for Volatile Assets
TILT is an effective tool for timing market swings in Bitcoin, QQQ, SPY, and Gold, as these assets are highly sensitive to liquidity cycles.
· Tracks global M2 trends using liquidity proxies from major economies
· Helps confirm major tops & bottoms in risk assets
· Offset function allows precise timing of liquidity-driven market moves
· Offset should be reviewed periodically to maintain optimal accuracy
· Pairs well with sentiment tools like the Fear & Greed Index for crypto
By using TILT correctly, traders can anticipate major market turns and position ahead of liquidity-driven moves.
Gabriel's Global Market CapGabriel's Global Market Cap is a comprehensive financial indicator designed to track and analyze the total market capitalization across multiple asset classes. It incorporates various financial markets, including stocks, bonds, real estate, cryptocurrencies, commodities, derivatives, private equity, insurance, OTC markets, and natural resources, to provide a holistic view of global market dynamics.
This indicator integrates Ehlers' Adaptive Dominant Cycle Detection and a custom VIX formula to adjust market values based on volatility and volume fluctuations, allowing for a more refined understanding of market conditions.
Key Features
✅ Multi-Market Analysis – Tracks 10+ global financial sectors, each represented by a key ETF or index.
✅ Normalization & Readability – Converts market cap values into an easy-to-read format (Millions, Billions, Trillions, Quadrillions).
✅ Volatility & Volume Adjustments – Optional VIX-based smoothing and relative volume adjustment for more dynamic readings.
✅ Ehlers’ Cycle Detection – Utilizes dominant cycle length detection to uncover market rhythms and cyclic behavior.
✅ Risk Thresholds & Background Coloring – Identifies overbought and oversold conditions with cyclic bands and background shading.
✅ Customizable Inputs – Users can toggle different market categories on/off for focused analysis.
✅ Interactive Data Table – Displays real-time values for each asset class in a structured table format.
Market Categories & Data Sources
📈 Global Stock Market – iShares MSCI ACWI ETF (ACWI)
💰 Global Bond Market – Vanguard Total World Bond ETF (BNDW)
🏡 Real Estate Market – iShares Global REIT ETF (REET)
₿ Cryptocurrency Market – Total Crypto Market Cap (CRYPTOCAP:TOTAL)
🌾 Commodities Market – Invesco DB Commodity Index Fund (DBC)
📊 Derivatives Market – CME Group (CME)
🏦 Private Equity & VC – ProShares Global Listed Private Equity ETF (PEX)
🛡️ Insurance Market – SPDR S&P Insurance ETF (KIE)
💹 OTC Markets – OTC Markets Group (OTCM)
⛽ Natural Resources – iShares Global Energy ETF (IXC)
Technical Enhancements
1️⃣ Custom Volatility Index (VIX) Calculation (Work In Progress)
Adjusts asset values based on volatility conditions using Ehlers' Cycle Detection.
Higher VIX reduces market cap, while lower VIX stabilizes it.
2️⃣ Adaptive Market Normalization
Converts absolute market values into a relative strength scale (0-100) for better visual analysis.
Uses historical min/max values to adjust dynamically.
3️⃣ Cyclic Analysis & Overbought/Oversold Levels
Detects hidden market rhythms & time cycles.
Calculates upper and lower risk bands based on dominant cycle length.
Applies background shading for visualizing low or high risk periods.
Customization Options
🔧 Enable/Disable Market Categories – Select which asset classes to track.
📊 Toggle VIX & Volume Smoothing – Adjust how market cap reacts to volatility & volume.
🎨 Cyclic Risk Bands – Highlight overbought/oversold conditions with dynamic background colors.
Visual Elements
📉 Market Cap Trends – Each category is plotted with a unique color.
🌎 Total Global Value (TGV) – A combined index representing all selected markets.
🎨 Background Coloring – Indicates high/low risk periods.
📋 Real-Time Data Table – Displays normalized & raw market cap values in an easy-to-read format.
Practical Applications
📊 Macroeconomic Analysis – Track global liquidity and investment shifts across asset classes.
💹 Volatility & Risk Assessment – Identify high-risk market conditions based on cyclic behavior.
📈 Cross-Market Comparisons – See which sectors are leading or lagging in value growth.
🔍 Crypto & Stock Market Trends – Analyze how traditional and digital assets correlate.