RSI Pozitif uyumsuzluk, paritenin değerinin düşmesine rağmen RSI değerinin artmasıdır. Bu durumda paritede kuvvetli alımlar olur. Yükseliş göstergesidir. Parametre ekranında seçeceğiniz bar sayısı, uyumsuzluğun aranacağı bar sayısını ifade etmektedir. RSI periyot ile uyumsuzluğun hangi RSI periyodunda yapılacağı belirlenir. Oluşturulan algoritmada default parametreler RSI periyodu için 14, uyumsuzluk için incelenecek bar sayısı 21 olarak belirlenmiştir. Parametre ekranından veya kod içerisinden ilgili alanlar düzenlenerek parametreler değiştirilebilir.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Indicators;
namespace Matriks.Lean.Algotrader
{
public class RsiPU : Explorer
{
[Parameter(14)]
public int RsiPeriod;
[Parameter(21)]
public int BarSayısı;
RSI rsi;
public override void OnInit()
{
rsi = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, RsiPeriod);
AddColumns(5);
SetColumnText(0, "Bar Count");
SetColumnText(1, "Ref Low");
SetColumnText(2, "Close");
SetColumnText(3, "LLV(Rsi)");
SetColumnText(4, "Rsi");
}
public override bool OnExplorer(List<BarDataEventArgs> bardatas)
{
var bardata = GetBarData();
var BarDataIndex = bardatas.FirstOrDefault().BarDataIndex;
var LLV = LowestLow(rsi, BarSayısı);
if (LLV < rsi.CurrentValue)
{
for (int i = 1; i <= BarSayısı; i++)
{
int index = Ref(rsi, i) == LLV? i:0;
if (index>1)
{
var refLow = bardata.Low[BarDataIndex - index];
var close = bardata.Close[BarDataIndex];
if (refLow >close)
{
SetColumn(0, index);
SetColumn(1, refLow);
SetColumn(2, close);
SetColumn(3, Math.Round(LLV, 2));
SetColumn(4, Math.Round(rsi.CurrentValue, 2));
return true;
}
}
}
}
return false;
}
}
}