YAKUT indikatörünün IQ ya uyarlanmış halidir.
BN:= (O + H + L + MOV(C, 100, ZL)) / 4;
AX:= (Ref((O + H + L + MOV(BN, 100, ZL)) / 4, -1) + PREV) / 2;
YU:= Max(Max(H, O), MOV(H, 100, ZL));
DU:= Min(Min(L, O), MOV(L, 100, ZL));
YGT:= (AX + YU + DU + MOV(BN, 50, ZL)) / 4;
KYN:= (Ref((AX + YU + DU + MOV(BN, 50, ZL)) / 4, -1) + PREV) / 2;
YGT;KYN
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
{
/*
BN:= (O + H + L + MOV(C, 100, ZL)) / 4;
AX:= (Ref((O + H + L + MOV(BN, 100, ZL)) / 4, -1) + PREV) / 2;
YU:= Max(Max(H, O), MOV(H, 100, ZL));
DU:= Min(Min(L, O), MOV(L, 100, ZL));
YGT:= (AX + YU + DU + MOV(BN, 50, ZL)) / 4;
KYN:= (Ref((AX + YU + DU + MOV(BN, 50, ZL)) / 4, -1) + PREV) / 2;
YGT;KYN
*/
[IndicatorInformationAttribute("YAKUT", IndicatorDrawingArea.OnDataSeries)]
[IndicatorLineInformationAttribute(new []
{
"YGT", "KYN"
}, new []
{
"#0000FF", "#FFFFFF"
}, new []
{
false, false
}, new []
{
0, 0
}, new []
{
1, 1
}
)]
public class YAKUT : MatriksIndicator
{
MOV BN, BN2, AX, ZL, ZLH, ZLL, MovBN, MovBN2;
MOV C, O, H, L;
public sealed override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
C = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, 1, MovMethod.Simple);
O = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Open, 1, MovMethod.Simple);
H = MOVIndicator(Symbol, SymbolPeriod, OHLCType.High, 1, MovMethod.Simple);
L = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Low, 1, MovMethod.Simple);
BN = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, 1, MovMethod.Simple);
BN2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, 1, MovMethod.Simple);
AX = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, 1, MovMethod.Simple);
BN = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, 1, MovMethod.Simple);
ZL = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, 100, MovMethod.ZeroLag);
ZLH = MOVIndicator(Symbol, SymbolPeriod, OHLCType.High, 100, MovMethod.ZeroLag);
ZLL = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Low, 100, MovMethod.ZeroLag);
MovBN = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, 100, MovMethod.ZeroLag);
MovBN2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, 50, MovMethod.ZeroLag);
}
public decimal oldAX = 0, oldYGT = 0;
public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
{
var barData = GetBarData();
if (currentBar < 100)
{
SetLine(0, currentBar, 0);
SetLine(1, currentBar, 0);
return;
}
BN.Update((O.CurrentValue + H.CurrentValue + L.CurrentValue + ZL.CurrentValue) / 4, currentBar, barDateTime, null);
BN2.Update((O.CurrentValue + H.CurrentValue + L.CurrentValue + BN.CurrentValue) / 4, currentBar, barDateTime, null);
var prev = Value[0][currentBar -1];
AX.Update((Ref(BN2, 1) + prev) / 2, currentBar, barDateTime, null);
var YU = Maximum(Maximum(H.CurrentValue, O.CurrentValue), ZLH.CurrentValue);
var DU = Minimum(Minimum(L.CurrentValue, O.CurrentValue), ZLL.CurrentValue);
var YGT = (AX.CurrentValue + YU + DU + MovBN2.CurrentValue) / 4;
var prev2 = Value[1][currentBar -1];
var KYN = (oldYGT + prev2) / 2;
SetLine(0, currentBar, YGT);
SetLine(1, currentBar, KYN);
prev = YGT;
oldAX = AX.CurrentValue;
oldYGT = YGT;
prev2 = KYN;
}
}
}