18.04.2022
1
3
281
100

Kıvanç Özbilgiç tarafından çevrilen bu indikatör ATR değerlerini kullanarak yüksek düşük fiyat hareketlerine göre gösterge oluşturur.


Fiyatın bu gösterge altına inmesi stop üstünde olması alım olarak yorumlanır


using System;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel;
using Matriks.Data.Identifiers;
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;
/*
▂ ▃ ▅ ▆ █ KRİPEX █ ▆ ▅ ▃ ▂ 

K1:=input("Period",1,500,22);
K2:=input("ATR Period",1,500,22);
mult:=input("ATR Çarpani",1,20,3);
ShortStop:=llv(l, K1) + mult * atre(K2);
LongStop:=hhv(h, K1) - mult * atre(K2);
FINALUPPERBAND:=IF(ShortStop<Prev or Ref(c,-1)>Prev,ShortStop,Prev);
FINALLOWERBAND:=IF(LongStop>Prev or Ref(c,-1)<Prev,LongStop,Prev);
ChandelierEXIT:=IF(REF(FINALUPPERBAND,-1)=Prev and C>FINALUPPERBAND,FINALLOWERBAND,IF(Prev=Ref(FINALLOWERBAND,-1) and C>=FINALLOWERBAND,FINALLOWERBAND,IF(Prev=Ref(FINALLOWERBAND,-1) and C<FINALLOWERBAND,FINALUPPERBAND,FINALUPPERBAND)));
ChandelierEXIT

Chandelier Exit Matriks Indicator Builder Formülü: 
KIVANÇ @fr3762 on twitter
*/
namespace Matriks.Lean.Algotrader
{
	//Ilk parametre indikatörün adı, sınıfın adıyla aynı olmalıdır.
	//Ikinci parametre indikatörün Dataserisinin üzerine mi yeni pencereye mi ekleneceğini belirtir. Yeni pencere için ->IndicatorDrawingArea.NewWindow , Data Serisi için IndicatorDrawingArea.OnDataSeries
	[IndicatorInformationAttribute("ChandelierEXITKripex", IndicatorDrawingArea.OnDataSeries)]
	//Indikatörün çizgilerinin isimleri
	[IndicatorLineInformationAttribute(new []
		{
			"cEXIT(0)"
		})]

	public class ChandelierEXITKripex : MatriksIndicator
	{

		//Indicator opsiyon panelinde değerleri değiştirebildiğimiz parametreler. Int, Bool, Decimal ve Enum değerleri alabilir.Tüm değişken tiplerini DefaultValue ile tanımlarız. 
		[DefaultValue(22)]
			public int Period
		{
			get; set;
		}

		[DefaultValue(22)]
			public int AtrPeriod
		{
			get; set;
		}

		[DefaultValue(3)]
			public decimal AtrCarpani
		{
			get; set;
		}

		ATRE atre;

		public sealed override void OnInit()
		{
			atre = ATREIndicator(Symbol, SymbolPeriod, OHLCType.Close, AtrPeriod);
		}

		List<decimal> upperList = new List<decimal>();
		List<decimal> lowerList = new List<decimal>();

		public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
		{
			var close = Instrument.SymbolBarData.Close[currentBar];
			var prevClose = Instrument.SymbolBarData.Close.ContainsKey(CurrentIndex -1) ? Instrument.SymbolBarData.Close[currentBar -1] :0;

			if (currentBar < Period)
			{
				SetLine(0, currentBar, 0);
				upperList.Add(0);
				lowerList.Add(0);
				return ;
			}

			var llv = LowestLow(OHLCType.Low, Period);
			var hhv = HighestHigh(OHLCType.High, Period);

			var shortStop = llv + AtrCarpani * atre.CurrentValue;
			var longStop = hhv - AtrCarpani * atre.CurrentValue;

			var prevUpper = upperList[currentBar -1];
			var upper = shortStop<prevUpper || prevClose>prevUpper? shortStop:prevUpper;
			upperList.Add(upper);

			var prevLower = lowerList[currentBar -1];
			var lower = longStop>prevLower || prevClose<prevLower? longStop:prevLower;
			lowerList.Add(lower);

			var prevExit = Value[0][CurrentIndex -1];
			var ChandelierEXIT = prevUpper == prevExit && close>upper? lower:
				(prevExit == prevLower && close >= lower? lower:
					(prevExit == prevLower && close<lower? upper:upper));

			SetLine(0, currentBar, upper);
		}
	}
}

1 Yorum

Doğru parametrelerde stopları belirlemede çok etkili oluyor.

  • 26.04.2022 15:59
  • 0