Merhabalar,
İstediğiniz tarama aşağıdaki gibidir.
Dilerseniz inceleyiniz.
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
using Matriks.AI;
using Matriks.AI.AiParameters;
using Matriks.AI.Data;
using Matriks.Trader.Core.TraderModels;
namespace Matriks.Lean.Algotrader
{
public class MaxMinExp : Explorer
{
// Strateji çalıştırılırken kullanacağımız parametreler. Eğer sembolle ilgili bir parametre ise,
// "SymbolParameter" ile, değilse "Parameter" ile tanımlama yaparız. Parantez içindeki değerler default değerleridir.
[Parameter(20)]
public int MovPeriod1;
[Parameter(MovMethod.S)]
public MovMethod MovMovMethod1;
[Parameter(50)]
public int MovPeriod2;
[Parameter(MovMethod.S)]
public MovMethod MovMovMethod2;
[Parameter(100)]
public int MovPeriod3;
[Parameter(MovMethod.S)]
public MovMethod MovMovMethod3;
[Parameter(200)]
public int MovPeriod4;
[Parameter(MovMethod.S)]
public MovMethod MovMovMethod4;
[Parameter(5)]
public decimal yuzde;
MOV mov;
MOV mov2;
MOV mov3;
MOV mov4;
public override void OnInit()
{
mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod1, MovMovMethod1);
mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMovMethod2);
mov3 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod3, MovMovMethod3);
mov4 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod4, MovMovMethod4);
AddColumns(0);
SetColumnText(0, "max");
SetColumnText(1, "min");
}
decimal max, min;
/// <summary>
/// Eklenen sembollerin bardata'ları ve indikatorler güncellendikçe bu fonksiyon tetiklenir.
/// </summary>
/// <param name="barData">Bardata ve hesaplanan gerçekleşen işleme ait detaylar</param>
public override bool OnExplorer(List<BarDataEventArgs> bardatas)
{
/*
yuzde:=5;
K1:=mov(c,20,s);
K2:=mov(c,50,s);
K3:=mov(c,100,s);
K4:=mov(c,200,s);
Max:=max(k1,max(k2,max(k3,k4)));
Min:=min(k1,min(k2,min(k3,k4)));
Yuzde>(max-min)*100/min
*/
max = Math.Max(mov.CurrentValue, Math.Max(mov2.CurrentValue, Math.Max(mov3.CurrentValue, mov4.CurrentValue)));
min = Math.Min(mov.CurrentValue, Math.Min(mov2.CurrentValue, Math.Min(mov3.CurrentValue, mov4.CurrentValue)));
SetColumn(0, max);
SetColumn(1, min);
if (yuzde>(max - min) * 100 / min)
{
return true;
}
return false;
}
}
}
İyi çalışmalar.