26.12.2023
0
0
289
0
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;
		}
	}
}


0 Yorum