Herkese Merhaba, Uzun zamandır blog yazısı paylaşmıyordum, trading view için geliştirdiğim strateji koduyla dönelim dedik.
Şimdi borsapin frama stratejisi, trend takibini daha “akıllı” hale getirmek için iki güçlü yaklaşım kullanıyor. FRAMA (Fractal Adaptive Moving Average) ve Supertrend. Amaç, piyasadaki gürültüyü filtreleyip yalnızca güçlü ve sürdürülebilir trendlere girmek.
Stratejinin temelinde üç katmanlı bir filtreleme var. İlk olarak haftalık zaman diliminde FRAMA’nın yukarı eğimli olması gerekiyor. Bu, büyük resimde piyasanın gerçekten yükseliş trendinde olduğunu doğrular ve yatay piyasaları büyük ölçüde eler. Ardından günlük grafikte fiyatın FRAMA’nın üzerinde olması ve aynı zamanda FRAMA’nın yukarı yönlü olması gerekiyor. Son olarak ise Supertrend göstergesinin alış sinyali üretmesiyle bu üç koşul birlikte sağlandığında sistem “onaylı” bir long pozisyon açıyor.
Çıkış tarafında ise aceleci davranılmıyor. Günlük FRAMA’nın altına iniş tek başına yeterli değil; belirli sayıda bar boyunca bu zayıflığın devam etmesi gerekiyor. Buna ek olarak Supertrend’in satış sinyali vermesiyle birlikte pozisyon kapatılıyor.
Buradaki yaklaşım, ani dalgalanmalarda gereksiz çıkışları azaltmak, kısa vadeli gürültüyü filtreleyip orta-uzun vadeli trendleri yakalamaya odaklanıyoruz, disiplinli bir trend takip sistemi size sunar.. Özellikle “trend varsa kal, yoksa uzak dur” yada “düşen bıçağı tutma” mantıklarından esinlenildi.
// @frama & Supertrend - BorsaPin Kursatsenturk.com
// Giriş: Haftalık Yukarı Eğimli olacak + Günlük FRAMA AL sinyali verecek + Supertrend AL
// Çıkış: Günlük FRAMA (Teyitli) + Supertrend SAT
//@version=5
strategy("@frama BorsaPin Stratejisi", overlay=true, initial_capital=10000,
default_qty_type=strategy.percent_of_equity, default_qty_value=100,
process_orders_on_close=true)
// ═══════════════════════════════════════════════════════════════
// GİRDİLER
// ═══════════════════════════════════════════════════════════════
grp_date = "Backtest Tarih Aralığı"
startDate = input.time(timestamp("2024-01-01 00:00 +0300"), "Başlangıç", group=grp_date)
endDate = input.time(timestamp("2026-12-31 23:59 +0300"), "Bitiş", group=grp_date)
isInDate_Range = time >= startDate and time <= endDate
grp_params = "Gösterge Ayarları"
frama_len = input.int(16, "FRAMA Uzunluk", group=grp_params)
fc = input.int(1, "Hızlı Periyot (FC)", group=grp_params)
sc = input.int(200, "Yavaş Periyot (SC)", group=grp_params)
st_len = input.int(10, "Supertrend Periyot", group=grp_params)
st_mult = input.float(3.4, "Supertrend Çarpan", step=0.1, group=grp_params)
grp_logic = "Giriş ve Çıkış Filtreleri"
slope_thresh = input.float(0.1, "Haftalık Min. Eğim % (Yatay Filtresi)", step=0.01, group=grp_logic)
confirm_bars = input.int(3, "Satış Öncesi Bekleme (Bar Sayısı)", minval=1, group=grp_logic)
// ═══════════════════════════════════════════════════════════════
// Frama Hesaplama Fonksiyonu
// ═══════════════════════════════════════════════════════════════
f_frama(_src, _len, _fc, _sc) =>
float _frama = na
_half = _len / 2
_n1 = (ta.highest(high, _half) - ta.lowest(low, _half)) / _half
_n2 = (ta.highest(high[_half], _half) - ta.lowest(low[_half], _half)) / _half
_n3 = (ta.highest(high, _len) - ta.lowest(low, _len)) / _len
_dimen = (_n1 > 0 and _n2 > 0 and _n3 > 0) ? (math.log(_n1 + _n2) - math.log(_n3)) / math.log(2) : 1.0
_w = math.exp(-4.6 * (_dimen - 1))
_sc_a = 2.0 / (_sc + 1), _fc_a = 2.0 / (_fc + 1)
_alpha = math.max(_sc_a, math.min(_fc_a, _w * (_fc_a - _sc_a) + _sc_a))
_frama := na(_frama[1]) ? _src : (_alpha * _src) + ((1.0 - _alpha) * nz(_frama[1], _src))
[_frama, _frama > nz(_frama[1], 0)]
// ═══════════════════════════════════════════════════════════════
// Hesaplamalar
// ═══════════════════════════════════════════════════════════════
// 1. Haftalık Frama (10 İşlem Günü / 2 Hafta Modu)
[wf_val, wf_up] = request.security(syminfo.tickerid, "W", f_frama(hlc3, frama_len, fc, sc), lookahead=barmerge.lookahead_on)
wf_slope_pct = ((wf_val - nz(wf_val[1])) / nz(wf_val[1])) * 100
wf_strict_up = wf_up and wf_slope_pct > slope_thresh // Yatay piyasa filtresi
// 2. Günlük Frama
[f_val, f_up] = f_frama(hlc3, frama_len, fc, sc)
// 3. Günlük Supertrend
[st_val, st_dir] = ta.supertrend(st_mult, st_len)
st_buy = st_dir == -1
// ═══════════════════════════════════════════════════════════════
// Mantık
// ═══════════════════════════════════════════════════════════════
// Giriş: Haftalık Eğim + Günlük Frama Üstü + Supertrend Yeşil
long_entry = wf_strict_up and close > f_val and st_buy
// ÇIKIŞ: Günlük Frama Altı (onaylı) + Supertrend Kırmızı
var int bars_below_frama = 0
bars_below_frama := (close < f_val or not f_up) ? bars_below_frama + 1 : 0
long_exit = (bars_below_frama >= confirm_bars) and (st_dir == 1)
// ═══════════════════════════════════════════════════════════════
// Görseller
// ═══════════════════════════════════════════════════════════════
// Haftalık (Mavi), Günlük (Yeşil/Kırmızı), Supertrend
plot(wf_val, "Haftalık Kilit", color=wf_strict_up ? color.blue : color.gray, linewidth=4)
plot(f_val, "Günlük Frama", color=f_up ? color.green : color.red, linewidth=2)
plot(st_val, "Supertrend", color=st_buy ? color.teal : color.orange, style=plot.style_linebr)
// Mum Boyama
bar_color = long_entry ? #00ff88 : (strategy.position_size > 0 and not long_exit ? #9ea4ad : #ff0044)
barcolor(bar_color)
// ═══════════════════════════════════════════════════════════════
// Emirler
// ═══════════════════════════════════════════════════════════════
if isInDate_Range
if long_entry
strategy.entry("Long", strategy.long, comment="Onaylı AL")
if long_exit and strategy.position_size > 0
strategy.close("Long", comment="Onaylı Çıkış")
Bu strateji güçlü bir trend takip sistemi olsa da, bazı önemli sakıncaları ve dikkat edilmesi gereken noktalar var.
Öncelikle FRAMA ve Supertrend gibi trend bazlı göstergeler, yatay (sideways) piyasalarda gecikmeli ve yanıltıcı sinyaller üretir. Özellikle trend oluşmadan önce yapılan girişler küçük geri çekilmelerde stop olma riskini artırır.
Haftalık filtre bu riski azaltmaya çalışsa da tamamen ortadan kaldırmayabilir. İkinci olarak, strateji gecikmeli (lagging) bir yapıya sahip. Yani fiyat hareketini önceden tahmin etmekten çok, oluşmuş trendi takip eder. Bu durum güçlü trendlerde avantaj sağlarken, hızlı dönüşlerde geç kalmaya neden olabilir.
Ayrıca Supertrend ve FRAMA birlikte kullanıldığı için bazı dönemlerde fazla filtreleme (over-filtering) oluşabilir ve bu da işlem sayısını ciddi şekilde azaltır. Bu, performansı artırabilir ama fırsat kaçırma riskini de beraberinde getirir. Son olarak, bu tür sistemler geçmiş veride iyi sonuç verse bile, piyasa rejimi değiştiğinde (volatilite, haber akışı, kriz dönemleri) performansları farklılaşır. Bu nedenle bu stratejiyi tek başına karar sistemi olarak değil, mutlaka risk yönetimi ve portföy çeşitlendirmesi ile birlikte kullanılmalı. Fundamental analizler, diğer tekniklerle desteklenmeside önemlidir.

Bir yanıt yazın