// --- UT BOT ALERTS [QuantNomad] - Kapanış Başyapıtı ---
// --- AYARLAR ---
float a = 2.5f; // Key Value (Duyarlılık Çarpanı - Pine'daki standart: 1)
int c = 10; // ATR Periyodu (Pine'daki standart: 10)
// Not: Orijinaldeki "Heikin Ashi" filtresini es geçtik çünkü robot sistemlerinde
// standart kapanış (Close) fiyatları her zaman daha kesin ve kaymasız işlem üretir.
var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");
// ATR (Ortalama Gerçek Aralık) Hesaplanması
var ATR = Sistem.AverageTrueRange(V, c);
// HESAPLAMA LİSTELERİ
var xATRTrailingStop = Sistem.Liste(0f);
var pos = Sistem.Liste(0f); // Trend Yönü: 1 (Boğa), -1 (Ayı)
int baslangic = c + 1;
// Başlangıç referanslarını atıyoruz (Sıfır hatası almamak için)
xATRTrailingStop[baslangic - 1] = C[baslangic - 1];
pos[baslangic - 1] = 1f;
string SonYon = "";
// ANA ALGORİTMA DÖNGÜSÜ
for (int i = baslangic; i < V.Count; i++)
{
float src = C[i];
float prevSrc = C[i - 1];
float nLoss = a * ATR[i];
float prevStop = xATRTrailingStop[i - 1];
// 1. İZLEYEN STOP (TRAILING STOP) HESAPLAMASI
if (src > prevStop && prevSrc > prevStop)
{
// Yükselişte stop çizgisi sadece yukarı taşınır (Max)
xATRTrailingStop[i] = Math.Max(prevStop, src - nLoss);
}
else if (src < prevStop && prevSrc < prevStop)
{
// Düşüşte stop çizgisi sadece aşağı taşınır (Min)
xATRTrailingStop[i] = Math.Min(prevStop, src + nLoss);
}
else if (src > prevStop)
{
// Fiyat stopu yukarı kırdığında yeni stopu aşağıya kur
xATRTrailingStop[i] = src - nLoss;
}
else
{
// Fiyat stopu aşağı kırdığında yeni stopu yukarıya kur
xATRTrailingStop[i] = src + nLoss;
}
// 2. TREND POZİSYONU (Boya/Yön Belirleme)
if (prevSrc < prevStop && src > prevStop)
pos[i] = 1f;
else if (prevSrc > prevStop && src < prevStop)
pos[i] = -1f;
else
pos[i] = pos[i - 1];
// 3. KESİŞİM VE SİNYAL ONAYLARI
bool above = src > xATRTrailingStop[i] && prevSrc <= xATRTrailingStop[i - 1];
bool below = src < xATRTrailingStop[i] && prevSrc >= xATRTrailingStop[i - 1];
bool buy = src > xATRTrailingStop[i] && above;
bool sell = src < xATRTrailingStop[i] && below;
// 4. OKLARI (SİNYALLERİ) GRAFİĞE BASMA
if (buy && SonYon != "A")
{
Sistem.Yon[i] = "A";
SonYon = "A";
}
else if (sell && SonYon != "S")
{
Sistem.Yon[i] = "S";
SonYon = "S";
}
else
{
Sistem.Yon[i] = "";
}
}
// --- GÖRSELLEŞTİRME AYARLARI ---
// İzleyen Stop çizgisini grafiğe basıyoruz (Fiyatın altına/üstüne kalkan görevi görür)
Sistem.Cizgiler[0].Deger = xATRTrailingStop;
Sistem.Cizgiler[0].Aciklama = "UT Bot Trailing Stop";
Sistem.Cizgiler[0].Kalinlik = 2; // Çizgi belirgin olsun
Sistem.Cizgiler[0].Panel = 1; // Kesinlikle Panel 1 olmalı (Fiyatla beraber çizilmesi için)