PineScript
Fisher Stratejisi
Merhabalar, bu yazımda Fisher Dönüşünü göstergesi ile genel olarak kullanılan iki stratejiden bahsedeceğim. Bu gösterge iki çizgiden oluşur. Standart versiyonunda aynı RSI’da da olduğu gibi birkaç bölgeye ayrılmıştır. Biz hem bölgeler arası bir strateji yazacağız hem de sadece kesişimlerine göre yazacağız. Diğer strateji yazılarımızdaki kodlarla da harmanlayarak kendinize güzel bir strateji hazırlayabilirsiniz.
Kesişimler
Fisher göstergesindeki iki çizginin kesişimlerine göre işleme girelim. Mavi olan çizgiye Fisher, turuncu olana Trigger diyoruz. Fisher, Trigger’i yukarı kestiğinde LONG açalım. Fisher, Trigger’i aşağı kestiğinde ise SHORT açalım.
Bakın sadece bu iki kesişime strateji kurduğumuzda çok fazla sinyal geliyor. Görsel aşağıdadır.
Strateji kodları aşağıdadır.
//@version=5
strategy(title="Fisher Transform", shorttitle="Fisher", format=format.price, precision=2, overlay=true)
len = input.int(9, minval=1, title="Length")
high_ = ta.highest(hl2, len)
low_ = ta.lowest(hl2, len)
round_(val) => val > .99 ? .999 : val < -.99 ? -.999 : val
value = 0.0
value := round_(.66 * ((hl2 - low_) / (high_ - low_) - .5) + .67 * nz(value[1]))
fish1 = 0.0
fish1 := .5 * math.log((1 + value) / (1 - value)) + .5 * nz(fish1[1])
fish2 = fish1[1]
longCondition = ta.crossover(fish1,fish2)
shortCondition = ta.crossunder(fish1,fish2)
if longCondition
strategy.entry("LONG",strategy.long)
if shortCondition
strategy.entry("SHORT",strategy.short)
Kesişimler ve Bölgeler Filtreli
Bakın sadece kesişimlere göre bir strateji ayarladığımızda çok sinyal alıyoruz. Belki de zarar ediyoruz. Ben bu testerelerden kurtulmak için ne yapmalıyım diye düşünürken aklıma bir fikir geldi. Madem çok kesişim var. Bunları filtrelemeliyim. Fisher değeri yükseldikçe fiyatın da yükseldiğini varsayarak, fisher ve trigger değeri düşük seviyelerde iken yukarı kesişim olduğunda LONG işlem açalım, fisher ve trigger değeri yüksek seviyelerde iken aşağı kesişim geldiğinde de SHORT işlem açalım. Hemen kodlayalım. Siz diğer stratejilerden kontrol ederek stop vs de ekleyebilirsiniz.
Bakın aynı görüntüde işlem sıklığı ne kadar azaldı. Fakat yine hatalı sinyaller görebiliyorum. Bu yüzden indikatörümün ve parametrelerin ayarlarıyla oynayabilirim. Ya da stop ve tp noktaları belirleyerek zararla kapatılan işlemleri lehime çevirebilirim. Bu son halinin kodlarını da aşağıya bırakıyorum.
//@version=5
strategy(title="Fisher Transform", shorttitle="Fisher", format=format.price, precision=2, overlay=true)
len = input.int(9, minval=1, title="Length")
high_ = ta.highest(hl2, len)
low_ = ta.lowest(hl2, len)
round_(val) => val > .99 ? .999 : val < -.99 ? -.999 : val
value = 0.0
value := round_(.66 * ((hl2 - low_) / (high_ - low_) - .5) + .67 * nz(value[1]))
fish1 = 0.0
fish1 := .5 * math.log((1 + value) / (1 - value)) + .5 * nz(fish1[1])
fish2 = fish1[1]
longValue = input.float(-2.)
shortValue = input.float(2.)
longCondition = ta.crossover(fish1,fish2) and fish1<longValue and fish2<longValue
shortCondition = ta.crossunder(fish1,fish2) and fish1>shortValue and fish2>shortValue
if longCondition
strategy.entry("LONG",strategy.long)
if shortCondition
strategy.entry("SHORT",strategy.short)
Umarım faydalı olmuştur. Diğer yazılarımda görüşmek üzere.