23.11.2021
0
3
148
75

Coppock Curve Indicator


Coppock Eğrisi, öncelikle bir borsa endeksindeki büyük düşüşleri ve yükselişleri tanımak için kullanılan uzun vadeli bir fiyat momentum göstergesidir.

Endeks için 14 periyotluk değişim oranı ile 11 periyotluk değişim oranının toplamının 10 periyotluk ağırlıklı hareketli ortalaması olarak hesaplanmaktadır.



AL SİNYALİ:

Kırmızıdan yeşile dönmesi


SAT SİNYALİ:

Yeşilden Kırmızıya dönmesi


Drive: Kıvanç Özbilgiç

https://drive.google.com/drive/folders/1YDWJvdw15llayeravAzE6O0jtbEYfThs

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;
/*
period:=input("Smoothing Length",1,500,10);
longRocLength:=input("Long ROC Length",1,500,14);
shortRocLength:=input("Short ROC Length",1,500,11);
coppock:=mov(roc(C,longRocLength,%)+roc(C,shortRocLength,%),period,w);
Coppock
	
Drive: Kıvanç Özbilgiç
https://drive.google.com/drive/folders/1YDWJvdw15llayeravAzE6O0jtbEYfThs	
*/
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("CoppockCurveKripex", IndicatorDrawingArea.NewWindow)]
	//Indikatörün çizgilerinin isimleri
	[IndicatorLineInformationAttribute(new []
		{
			"CoppockCurveKripex(0,1,2)",
		})]

	public class CoppockCurveKripex : 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(10)]
		public int Period
		{
			get; set;
		}

		[DefaultValue(14)]
		public int LongRocLength
		{
			get; set;
		}

		[DefaultValue(11)]
		public int ShortRocLength
		{
			get; set;
		}


		MOV mov;

		public sealed override void OnInit()
		{
			mov = new MOV(Period, MovMethod.W);
		}
		
		decimal _longRoc, _shortRoc;
		decimal _longValue, _shortValue, _currentValue, _movValue;

		public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
		{
			var barData = GetBarData();

			if (currentBar<LongRocLength || currentBar<ShortRocLength)
			{
				_longValue = inputValue;
				_shortValue = inputValue;
			}else
			{
				_longValue = Ref(barData, OHLCType.Close, LongRocLength);
				_shortValue = Ref(barData, OHLCType.Close, ShortRocLength);
			}
			_currentValue = inputValue;


			_longRoc = (_currentValue / _longValue -1) * 100;
			_shortRoc = (_currentValue / _shortValue -1) * 100;

			mov.Update(_longRoc + _shortRoc, currentBar, barDateTime);

			if (currentBar < Period)
			{
				SetLine(0, currentBar, 0);
				return ;
			}

			SetLine(0, currentBar, mov.CurrentValue);
		}
	}
}

0 Yorum