BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Borsa > Pine Script Programlama > Pine Script indikatör örnekleri > pine_script_indicator_bgtrend_001

Pine Script indikatörleri

BG Trend

BG Trend, aşağıda gösterilen seçenekler ve koşullar gerçekleştiğinde alış veya satış yönünde sonuçlar elde eden, trend bazlı bir göstergedir.

Gösterge seçenekleri

  1. Trend değerlendirme uzunluğu: Trend yönü belirleme kullanılan değerlendirme uzunluğudur (Ön tanımlı değer: 20).
  2. EMA1 ve EMA2 kesişmesini kullan: BUY ve SELL koşullarının sağlanmasında EMA20 ve EMA50 kesişimlerinin kullanılıp kullanılmayacağını belirler (Ön tanımlı değer: Kullanılır).
  3. Trend yönünü kullan: BUY ve SELL koşullarının sağlanmasına trend yönü değerlendirmesinin dahil edilip edilmeyeceğini belirler (Ön tanımlı değer: Kullanılmaz).
  4. Trend çizgisi: Trend çizgisinin grafik üzerinde çizilip çizilmeyeceğini belirler (Ön tanımlı değer: Çizilmez).
  5. Bar geçerlilik sayısı: 1 ve 2. koşulların kaç bar boyunca değerlendirmeye alınacağını belirler (Ön tanımlı değer: 15).
  6. MA çizgileri: EMA çizgilerinin grafik üzerinde çizilip çizilmeyeceğini belirler (Ön tanımlı değer: Çizilir).
  7. Seviye işlem etiketleri: 1 ve 2. koşulların gerçekleştiği barlarda etiketleme işleminin yapılı yapılmayacağını belirler (Ön tanımlı değer: Çizilmez).
  8. İşlem etiketleri: BUY ve SELL koşullarının gerçekleştiği barlarda etiketleme işleminin yapılı yapılmayacağını belirler (Ön tanımlı değer: Çizilir).
  1. EMA length1: EMA1 uzunluğu (Ön tanımlı değer: 20).
  2. EMA length2: EMA2 uzunluğu (Ön tanımlı değer: 50).
  3. EMA length3: EMA3 uzunluğu (Ön tanımlı değer: 200).

Yükselen trend onayı

  1. Fiyat EMA200'den büyükse, EMA50'yi yukarı doğru kesmişse, EMA50'nin üzerinde kapatmışsa ve bar yeşil ise, ilk koşul gerçekleşir.
  2. İlk koşul gerçekleşmişse ve gerçekleştiğinden bu yana bar sayısı Bar geçerlilik sayısı değerinden küçükse, bar endeks değeri ilk koşulun gerçekleştiği endeks değerinden büyük ise ve low değeri EMA50 altında veya eşit ise veya low değeri ilk koşulun gerçekleştiği barın kapanış değerinden büyük ise, ikinci koşul gerçekleşir.
  3. 2. koşul gerçekleşmişse ve gerçekleştiğinden bu yana bar sayısı Bar geçerlilik sayısı değerinden küçükse, bar endeks değeri 2.koşulun gerçekleştiği endeks değerinden büyük ise ve close değeri 1.koşulun gerçekleştiği bardaki high değerinden büyük ise, 3.koşul ve BUY koşulu sağlanmış olur. Close değeri bir önceki barın close değerinden küçük ise 1 ve 2. koşullar sıfırlanır.

Düşen trend onayı

  1. Close EMA50'yi aşağı doğru kesmişse ve EMA50'nin altında kapatmışsa ve bar kırmızı ise, ilk koşul gerçekleşir.
  2. İlk koşul gerçekleşmişse ve gerçekleştiğinden bu yana bar sayısı Bar geçerlilik sayısı değerinden küçükse, bar endeks değeri ilk koşulun gerçekleştiği endeks değerinden büyük ise ve high değeri EMA50 üzerinde veya eşit ise veya high değeri ilk koşulun gerçekleştiği barın kapanış değerinden küçük ise, ikinci koşul gerçekleşir.
  3. 2. koşul gerçekleşmişse ve gerçekleştiğinden bu yana bar sayısı Bar geçerlilik sayısı değerinden küçükse, bar endeks değeri 2.koşulun gerçekleştiği endeks değerinden büyük ise ve close değeri 1.koşulun gerçekleştiği bardaki low değerinden küçük ise, 3.koşul ve SELL koşulu sağlanmış olur. Close değeri bir önceki barın close değerinden büyük ise 1 ve 2. koşullar sıfırlanır.

* 1 ve 2. koşullar gerçekleştikleri bardan itibaren, kullanıcı tarafından değiştirilebilen Bar geçerlilik sayısı değeri kadar değerlendirmeye alınırlar.

Kullanıcı EMA1 ve EMA2 kesişmesini kullan seçeneğini işaretlerse (Ön tanımlı olarak seçilidir.), yükselen ve düşen trend onaylarını almak için EMA20 ve EMA50 kesişimleri de kullanılır.


// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Niteya
//@version=5
// Bu indikatör sadece eğitim amaçlı olarak verilmiştir. Yatırım kararlarınızda kullanmayınız.
indicator(title="Niteya BG Trend", shorttitle="Niteya BG Trend", overlay=true, max_labels_count=500)

var string bg_trend = 'Gösterge değerleri'
ohcl4_length = input(20, 'Trend değerlendirme uzunluğu', group=bg_trend)
is_ema1_cross_ema2 = input.bool(true, title='EMA1 ve EMA2 kesişmesini kullan', group=bg_trend)
is_td =  input.bool(false, title='Trend yönünü kullan', inline='trend', group=bg_trend)
is_trend_line = input.bool(false, title='Trend çizgisi', inline='trend', group=bg_trend)
bar_no = input(15, title='Bar geçerlilik sayısı', group=bg_trend)
is_ma_lines = input.bool(true, title='MA çizgileri', group=bg_trend)
is_level_labels = input.bool(false, title='Seviye işlem etiketleri', group=bg_trend)
is_labels = input.bool(true, title='İşlem etiketleri', group=bg_trend)

var string ema_group = 'EMA değerleri'
ema_length1 = input(20, 'EMA length1', group=ema_group)
ema_length2 = input(50, 'EMA length2', group=ema_group)
ema_length3 = input(200, 'EMA length3', group=ema_group)

// Hesaplamalar
EMA1 = ta.ema(close, ema_length1)
EMA2 = ta.ema(close, ema_length2)
EMA3 = ta.ema(close, ema_length3)

plot(is_ma_lines ? EMA1 : na, title='MA src1', color=color.blue, linewidth=1)
plot(is_ma_lines ? EMA2 : na, title='MA src2', color=color.orange, linewidth=2)
plot(is_ma_lines ? EMA3 : na, title='MA src3', color=color.black, linewidth=2)

ohlc4_sma = ta.sma(ohlc4, ohcl4_length)
trend_direction = close>ohlc4_sma ? 1 : close<ohlc4_sma ? -1 : 0

plot(is_trend_line ? ohlc4_sma : na, color=trend_direction==1 ? color.green : trend_direction==-1 ? color.red : color.silver, title='BG Trend', linewidth=2)

var int long_level = 0
var int short_level = 0

var float high_long = 0.00
var float low_short = 0.00

var int index_long = 0
var int index_short = 0

// Close EMA200'den büyükse ve EMA50'yi yukarı doğru kesmişse ve EMA50'nin üzerinde kapatmışsa ve bar yeşil ise  
if long_level == 0 
    if (close>EMA3 and ta.crossover(close, EMA2) and close>EMA2 and close>open)
        long_level := 1
        high_long := high
        index_long := bar_index
        label.new(is_level_labels ? bar_index : na, low, text='1', yloc=yloc.belowbar, color=color.green, style=label.style_label_up, textcolor=color.white, textalign=text.align_left) 
   
// Close EMA50'yi aşağı doğru kesmişse ve EMA50'nin altında kapatmışsa ve bar kırmızı ise
if short_level == 0 
    if (ta.crossunder(close, EMA2) and close<EMA2 and close<open)
        short_level := 1
        low_short := low
        index_short := bar_index 
        label.new(is_level_labels ? bar_index : na, low, text='1', yloc=yloc.abovebar, color=color.red, style=label.style_label_down, textcolor=color.white, textalign=text.align_left) 

// İlk koşul gerçekleşmişse ve gerçekleştiğinden bu yana bar sayısı bar_no değişken değerinden küçükse, bar endeks değeri ilk koşulun gerçekleştiği endeks 
// değerinden büyük ise ve low değeri EMA50 altında veya eşit ise veya low değeri ilk koşulun gerçekleştiği barın kapanış değerinden büyük ise
if bar_index-index_long<bar_no
    if long_level == 1 and bar_index>index_long
        if low<=EMA2 or low>close[bar_index-index_long]
            long_level := 2
            index_long := bar_index
            label.new(is_level_labels ? bar_index : na, low, text='2', yloc=yloc.belowbar, color=color.green, style=label.style_label_up, textcolor=color.white, textalign=text.align_left) 
else 
    long_level := 0
    index_long := 0

// İlk koşul gerçekleşmişse ve gerçekleştiğinden bu yana bar sayısı bar_no değişken değerinden küçükse, bar endeks değeri ilk koşulun gerçekleştiği endeks 
// değerinden büyük ise ve high değeri EMA50 üzerinde veya eşit ise veya high değeri ilk koşulun gerçekleştiği barın kapanış değerinden küçük ise
if bar_index-index_short<bar_no
    if short_level == 1 and bar_index>index_short
        if high>=EMA2 or high<close[bar_index-index_short]
            short_level := 2
            index_short := bar_index
            label.new(is_level_labels ? bar_index : na, low, text='2', yloc=yloc.abovebar, color=color.red, style=label.style_label_down, textcolor=color.white, textalign=text.align_left) 
else 
    short_level := 0
    index_short := 0

// 2. koşul gerçekleşmişse ve gerçekleştiğinden bu yana bar sayısı bar_no değişken değerinden küçükse, bar endeks değeri 2.koşulun gerçekleştiği endeks 
// değerinden büyük ise ve close değeri 1.koşulun gerçekleştiği bardaki high değerinden büyük ise, 3.koşul ve BUY koşulu sağlanmış olur.
// Close değeri bir önceki barın close değerinden küçük ise 1 ve 2. koşullar sıfırlanır.
if bar_index-index_long<bar_no
    if long_level == 2 and bar_index>index_long
        if close>high_long
            long_level := 3
        else if close<close[1] // 2.koşul gerçekleştikten sonra fiyat aşağı doğru giderse, mevcut koşulları sıfırla (Gelecek koşullar devreye girebilsin diye)
            long_level := 0
            index_long := 0
else 
    long_level := 0
    index_long := 0    

// 2. koşul gerçekleşmişse ve gerçekleştiğinden bu yana bar sayısı bar_no değişken değerinden küçükse, bar endeks değeri 2.koşulun gerçekleştiği endeks 
// değerinden büyük ise ve close değeri 1.koşulun gerçekleştiği bardaki low değerinden küçük ise, 3.koşul ve SELL koşulu sağlanmış olur.
// Close değeri bir önceki barın close değerinden büyük ise 1 ve 2. koşullar sıfırlanır.
if bar_index-index_short<bar_no
    if short_level == 2 and bar_index>index_short
        if close<low_short
            short_level := 3
        else if close>close[1] // 2.koşul gerçekleştikten sonra fiyat yukarı doğru giderse, mevcut koşulları sıfırla (Gelecek koşullar devreye girebilsin diye)
            short_level := 0
            index_short := 0            
else 
    short_level := 0
    index_short := 0    

up_trend_1 = long_level == 3
up_trend_2 = ta.crossover(EMA1, EMA2) and close>EMA3
up_trend_cond = (is_ema1_cross_ema2 ? (up_trend_1 or up_trend_2) : up_trend_1) and (is_td ? trend_direction==1 : true)

down_trend_1 = short_level == 3
down_trend_2 = ta.crossunder(EMA1, EMA2)
down_trend_cond = (is_ema1_cross_ema2 ? (down_trend_1 or down_trend_2) : down_trend_1) and (is_td ? trend_direction==-1 : true)

bg_value = up_trend_cond ? 1 : down_trend_cond ? -1 : 0 

var bool long_ok = false
var bool short_ok = false

if bg_value==1
    if not long_ok
        label.new(is_labels ? bar_index : na, low, text=str.tostring('BUY'), yloc=yloc.belowbar, color=up_trend_1 ? color.green : color.rgb(70, 226, 23), style=label.style_label_up, textcolor=color.white, textalign=text.align_center) 
        long_ok := true
        short_ok := false
    long_level := 0
    index_long := 0
if bg_value==-1
    if not short_ok
        label.new(is_labels ? bar_index : na, low, text=str.tostring('SELL'), yloc=yloc.abovebar, color=down_trend_1 ? color.red : color.rgb(248, 84, 213), style=label.style_label_down, textcolor=color.white, textalign=text.align_center) 
        short_ok := true
        long_ok := false
    short_level := 0
    index_short := 0    

var label label_ma1 = na
var label label_ma2 = na
var label label_ma3 = na

if barstate.islast and is_ma_lines

    label.delete(label_ma1) 
    label.delete(label_ma2) 
    label.delete(label_ma3) 

    label_ma1 := label.new(x=bar_index+2, y=EMA1, text=str.tostring(ema_length1), color=color.blue, style=label.style_label_center, textcolor=color.white, size=size.small)         
    label_ma2 := label.new(x=bar_index+2, y=EMA2, text=str.tostring(ema_length2), color=color.orange, style=label.style_label_center, textcolor=color.white, size=size.small)         
    label_ma3 := label.new(x=bar_index+2, y=EMA3, text=str.tostring(ema_length3), color=color.black, style=label.style_label_center, textcolor=color.white, size=size.small) 

Yukarıdaki indikatörün bir uygulaması aşağıda grafikte gösterilmektedir: