Anıl Özekşi tarafından oluşturulan indikatörün açıklaması aşağıdaki gibidir.
FICH yani Fibonacci Channel Indicator öncelikle tamamen Fibonacci oranları doğrultusunda oluşturulmuş bir kanal sistemidir. Fiyatlar daima bu kanal içinde hareket ederler ve bu kanal çizgilerini kırışlarına göre al/sat sinyallerini üretirler. Sinyaller içinse bir hareketli ortalama kullanılır…
https://twitter.com/Anil_Ozeksi
https://www.youtube.com/watch?v=MQRrg9jLLb8&t=2s&ab_channel=An%C4%B1l%C3%96zek%C5%9Fi
/*
=============== FICH - Fibonacci Channels Indicator ===============
= Geliştirici: Anıl Özekşi
= Yazar: Kripex
===================================================================
X1:=2000;
REF(HHV(H,X1),-30);
REF(LLV(L,X1)+((HHV(H,X1)-LLV(L,X1))*0.854),-30);
REF(LLV(L,X1)+((HHV(H,X1)-LLV(L,X1))*0.764),-30);
REF(LLV(L,X1)+((HHV(H,X1)-LLV(L,X1))*0.618),-30);
REF(LLV(L,X1)+((HHV(H,X1)-LLV(L,X1))*0.5),-30);
REF(LLV(L,X1)+((HHV(H,X1)-LLV(L,X1))*0.382),-30);
REF(LLV(L,X1)+((HHV(H,X1)-LLV(L,X1))*0.236),-30);
REF(LLV(L,X1)+((HHV(H,X1)-LLV(L,X1))*0.146),-30);
REF(LLV(L,X1),-30)
*/
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;
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("FICHKripex", IndicatorDrawingArea.OnDataSeries)]
//Indikatörün çizgilerinin isimleri
[IndicatorLineInformationAttribute(new []
{
"Highest (0,1)", "Seviye (2)", "Seviye (3)", "Seviye (4)", "Seviye (5)", "Seviye (6)", "Seviye (7)", "Seviye (8)", "Lowest"
}, new []
{
"#00CCFF", "#00CCFF","#00CCFF", "#00CCFF", "#FFFF00","#e600de", "#e600de","#e600de", "#e600de"
}, new []
{
false, false, false, false, false, false, false, false, false
}, new []
{
0,2,2,2,0,2,2,2,0
}, new []
{
2, 1,1,1,2,1,1,1,2
}
)]
public class FICHKripex : MatriksIndicator
{
[DefaultValue(2000)]
public int Period
{
get; set;
}
[DefaultValue(30)]
public int PrevBar
{
get; set;
}
[DefaultValue(0.854)]
public decimal KatSayisi1
{
get; set;
}
[DefaultValue(0.764)]
public decimal KatSayisi2
{
get; set;
}
[DefaultValue(0.618)]
public decimal KatSayisi3
{
get; set;
}
[DefaultValue(0.5)]
public decimal KatSayisi4
{
get; set;
}
[DefaultValue(0.382)]
public decimal KatSayisi5
{
get; set;
}
[DefaultValue(0.236)]
public decimal KatSayisi6
{
get; set;
}
[DefaultValue(0.146)]
public decimal KatSayisi7
{
get; set;
}
LowestLow lowestLow;
HighestHigh highestHigh;
public sealed override void OnInit()
{
lowestLow = LowestLowIndicator(Symbol, SymbolPeriod, OHLCType.Low, Period);
highestHigh = HighestHighIndicator(Symbol, SymbolPeriod, OHLCType.High, Period);
}
public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
{
if (currentBar < Period)
{
SetLine(0, currentBar, 0);
SetLine(1, currentBar, 0);
SetLine(2, currentBar, 0);
SetLine(3, currentBar, 0);
SetLine(4, currentBar, 0);
SetLine(5, currentBar, 0);
SetLine(6, currentBar, 0);
SetLine(7, currentBar, 0);
SetLine(8, currentBar, 0);
return;
}
var mutlakPrevBar = Math.Abs(PrevBar);
// REF(HHV(H,X1),-30);
var _highest = highestHigh.Value[0][highestHigh.CurrentIndex - mutlakPrevBar];
// REF(LLV(L,X1),-30)
var _lowest = lowestLow.Value[0][lowestLow.CurrentIndex - mutlakPrevBar];
var cizgi1 = _highest;
// REF(LLV(L,X1)+((HHV(H,X1)-LLV(L,X1))*0.854),-30);
var cizgi2 = _lowest + (_highest - _lowest) * KatSayisi1;
// REF(LLV(L,X1)+((HHV(H,X1)-LLV(L,X1))*0.764),-30);
var cizgi3 = _lowest + (_highest - _lowest) * KatSayisi2;
// REF(LLV(L,X1)+((HHV(H,X1)-LLV(L,X1))*0.618),-30);
var cizgi4 = _lowest + (_highest - _lowest) * KatSayisi3;
// REF(LLV(L,X1)+((HHV(H,X1)-LLV(L,X1))*0.5),-30);
var cizgi5 = _lowest + (_highest - _lowest) * KatSayisi4;
// REF(LLV(L,X1)+((HHV(H,X1)-LLV(L,X1))*0.382),-30);
var cizgi6 = _lowest + (_highest - _lowest) * KatSayisi5;
// REF(LLV(L,X1)+((HHV(H,X1)-LLV(L,X1))*0.236),-30);
var cizgi7 = _lowest + (_highest - _lowest) * KatSayisi6;
// REF(LLV(L,X1)+((HHV(H,X1)-LLV(L,X1))*0.146),-30);
var cizgi8 = _lowest + (_highest - _lowest) * KatSayisi7;
// REF(LLV(L,X1),-30)
var cizgi9 = _lowest;
SetLine(0, currentBar, cizgi1);
SetLine(1, currentBar, cizgi2);
SetLine(2, currentBar, cizgi3);
SetLine(3, currentBar, cizgi4);
SetLine(4, currentBar, cizgi5);
SetLine(5, currentBar, cizgi6);
SetLine(6, currentBar, cizgi7);
SetLine(7, currentBar, cizgi8);
SetLine(8, currentBar, cizgi9);
}
}
}