Birşeyler deniyorum da bakalım 😀 bi ATR trailing stoploss var. Ben bunu matriks IQ göre yazamadım. Tradingiew'da gördüm başarılı gibi duruyor eğer ki yardımcı olursanız kodu c# diline chatgpt çeviriyor da matriks IQ ya göre bi ayar çekersek. Bi deneyelim nasıl sonuç aldığını eğer ki güzel sonuçlar alırsak hep beraber kullanırız 😀 Akşamları discorda da görüşebiliriz.
Derinliğe göre kullanmak isteyen bakabilir. Ben deniyorum sizin denemenize gerek yok 😀
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.AlgoTrader;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Trader.Core.TraderModels;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
//=================================================ACIKLAMA=========================================================//
// Derinlik datasi kullanarak her bar kapanisinda calisir (varsayilan 1 dakikalik barlar).Sadece ilk seviyeye bakar //
// Alis ve satista bekleyen emirlerin lot sayilarini karsilastirir. Ornegin ÇARPANA 8 degeri atarsak //
// bu ilk seviyedeki alislari ve satislari toplar, alislarin toplami satislarin toplaminin 8 katindan buyuk //
// ise alim emri gonderir, satis emri de ayni mantikla yapilir. Bilgiler debug penceresine basilmaktadir. //
namespace Matriks.Lean.Algotrader
{
public class Depth3 : MatriksAlgo
{
// Strateji çalıştırılırken kullanacağımız parametreler. Eğer sembolle ilgili bir parametre ise,
// "SymbolParameter" ile, değilse "Parameter" ile tanımlama yaparız. Parantez içindeki değerler default değerleridir.
[SymbolParameter("GARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Min)]
public SymbolPeriod SymbolPeriod;
[Parameter(1)]
public decimal SellOrderQuantity;
[Parameter(1)]
public decimal BuyOrderQuantity;
[Parameter(8)]
public int çarpan;
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
AddSymbolMarketDepth(Symbol);
//Eger backtestte emri bir al bir sat seklinde gonderilmesi isteniyor bu true set edilir.
//Alttaki satırı silerek veya false geçerek emirlerin sirayla gönderilmesini engelleyebilirsiniz.
SendOrderSequential(true);
// Algoritmanın kalıcı veya geçici sinyal ile çalışıp çalışmayacağını belirleyen fonksiyondur.
// true geçerseniz algoritma sadece yeni bar açılışlarında çalışır, bu fonksiyonu çağırmazsanız veya false geçerseniz her işlem olduğunda algoritma tetiklenir.
WorkWithPermanentSignal(true);
//Alttaki fonksiyon açıldıktan sonra parametre olarak verilen saniyede bir OnTimer fonksiyonu tetiklenir.
//SetTimerInterval(1);
}
///
/// Eklenen sembollerin bardata'ları ve indikatorler güncellendikçe bu fonksiyon tetiklenir.
///
/// Bardata ve hesaplanan gerçekleşen işleme ait detaylar
public override void OnDataUpdate(BarDataEventArgs barData)
{
var depths = GetMarketDepth(Symbol);
var BO_size = depths.AskRows[0].Size;
var BO = depths.AskRows[0].Price;
var BO1 = depths.AskRows[1].Price;
var BB_size = depths.BidRows[0].Size;
var BB = depths.BidRows[0].Price;
var BB1 = depths.BidRows[1].Price;
Debug("best offer " + BO + " size = " + BO_size);
Debug("best bid " + BB + " size = " + BB_size);
Debug("Current Ratio(BB/BO size) = " + Math.Round(BB_size / BO_size, 2));
Debug("*******************************************************");
if (BO_size > çarpan * BB_size)
{
SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
Debug("Satış Emri Gönderildi");
}
if (BB_size > çarpan * BO_size)
{
SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
Debug("Alış Emri Gönderildi");
}
}
///
/// Strateji durdurulduğunda bu fonksiyon tetiklenir.
///
public override void OnStopped()
{
}
}
}

tek anladığım bişeler denediğin abi
Derinliğe göre alım satım yapıor 😀
matrixiq ekibine mail atarsanız formülü hazırlıyorlar deniyordu.
https://twitter.com/kivancozbilgic/status/970071027526111237
Bir de şurası var: https://www.algokutuphanesi.com/Sistem
Belki yardımcı olur.
study("ATR Trailing Stoploss",overlay=true)
Atr=input(defval=5,title="Atr Period",minval=1,maxval=500)
Hhv=input(defval=10,title="HHV Period",minval=1,maxval=500)
Mult=input(defval=2.5,title="Multiplier",minval=0.1)
Barcolor=input(true,title="Barcolor")
Prev = highest(high-Mult*atr(Atr),Hhv),barssince(close>highest(high-Mult*atr(Atr),Hhv) and close>close[1])
TS = iff(cum(1) highest(high-Mult*atr(Atr),Hhv) and close>close[1],highest(high-Mult*atr(Atr),Hhv),Prev))
Color=iff(close>TS,color.green,iff(close<TS,color.red,color.black))
barcolor(Barcolor? Color:na)
plot(TS,color=Color,linewidth=3,title="ATR Trailing Stoploss")
Buy=crossover(close,TS)
Sell=crossunder(close,TS)
plotshape(Buy,"BUY", shape.labelup, location.belowbar, color.green, text="BUY",textcolor=color.black)
plotshape(Sell,"SELL", shape.labeldown, location.abovebar, color.red, text="SELL",textcolor=color.black)
alertcondition(Buy, "Buy Signal", "Buy ATR Trailing Stoploss")
alertcondition(Sell, "Sell Signal", "Sell ATR Trailing Stoploss")
HHV: Highest high value
C# bu şekilde yazdı chatgpt
// C# dilinde Pine Script kodunun eşdeğeri yoktur, bu nedenle C#'ta teknik analiz göstergeleri kullanarak benzer bir strateji oluşturabiliriz.
using System;
class ATRTrailingStoploss
{
static void Main()
{
// Kullanıcı girişlerini almak için C# dilinde gerekli değişkenleri tanımlayın
int Atr = 5;
int Hhv = 10;
double Mult = 2.5;
// Hisse senedi verilerini (high, low, close) içeren bir dizi simüle edelim.
double[] high = { 100, 102, 105, 106, 110, 108, 112, 115, 120, 118, 125 };
double[] low = { 98, 99, 101, 102, 106, 105, 108, 110, 113, 112, 115 };
double[] close = { 99, 100, 104, 105, 108, 107, 111, 113, 118, 114, 122 };
// Yukarıdaki Pine Script kodundan algoritmayı yeniden oluşturmak için C# dilinde gereken hesaplamaları yapalım.
double[] atr = CalculateATR(Atr, high, low, close);
double[] prev = new double[close.Length];
double[] ts = new double[close.Length];
for (int i = 0; i < close.Length; i++)
{
double highestPrice = CalculateHighestPrice(i, high, atr, Hhv, Mult);
if (i == 0)
prev[i] = close[i];
else
prev[i] = Math.Max(close[i], prev[i - 1]);
if (i highestPrice && close[i] > close[i - 1]) ? highestPrice : prev[i];
}
// Alım ve satım sinyallerini belirlemek için C# dilinde Pine Script'ten alınan kısmı kullanalım.
bool[] buySignals = new bool[close.Length];
bool[] sellSignals = new bool[close.Length];
for (int i = 1; i ts[i] && close[i - 1] <= ts[i - 1]);
sellSignals[i] = (close[i] = ts[i - 1]);
}
// Alım ve satım sinyallerini yazdırabilir veya işleyebilirsiniz.
for (int i = 0; i < close.Length; i++)
{
if (buySignals[i])
Console.WriteLine("Buy Signal at index " + i);
if (sellSignals[i])
Console.WriteLine("Sell Signal at index " + i);
}
}
static double[] CalculateATR(int period, double[] high, double[] low, double[] close)
{
double[] atr = new double[close.Length];
atr[0] = high[0] - low[0];
for (int i = 1; i < close.Length; i++)
{
double tr = Math.Max(high[i] - low[i], Math.Max(Math.Abs(high[i] - close[i - 1]), Math.Abs(low[i] - close[i - 1])));
atr[i] = (atr[i - 1] * (period - 1) + tr) / period;
}
return atr;
}
static double CalculateHighestPrice(int currentIndex, double[] high, double[] atr, int period, double multiplier)
{
int startIndex = Math.Max(0, currentIndex - period + 1);
double highestPrice = double.MinValue;
for (int i = startIndex; i <= currentIndex; i++)
{
double price = high[i] - multiplier * atr[i];
highestPrice = Math.Max(highestPrice, price);
}
return highestPrice;
}
}