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);
}
}
}