Merhabalar,
İstediğiniz tarama Hacim Ağırlıklı Ortalama koşulu hariç aşağıda verildiği gibidir.
(Hacim Ağırlıklı Hareketli Ortalama yapısı gereği şu an için Explorer taramalarında kullanılamıyor. Durumla alakalı ilgili birimlere gerekli geri dönüş yapıldı. Explorer taramalarında kullanılabilir hale geldiğinde tarama kodu için revizesi yapılacaktır.)
Lütfen 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 TWExp : 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(14)]
public int RsiPeriod1;
[Parameter(0.02)]
public decimal ParabolicsarAcc1;
[Parameter(0.2)]
public decimal ParabolicsarMaxAcc1;
[Parameter(21)]
public int CmfPeriod1;
[Parameter(20)]
public int SmaPeriod1;
[Parameter(14)]
public int RsiPeriod2;
[Parameter(3)]
public int StochasticfastPeriodK1;
[Parameter(3)]
public int StochasticfastPeriodD1;
[Parameter(MovMethod.E)]
public MovMethod StochasticfastMovMethod1;
[Parameter(3)]
public int StochasticslowPeriodK1;
[Parameter(3)]
public int StochasticslowPeriodD1;
[Parameter(14)]
public int StochasticslowPeriodSlowK1;
[Parameter(MovMethod.E)]
public MovMethod StochasticslowMovMethod1;
[Parameter(14)]
public int MfiPeriod1;
RSI rsi;
ParabolicSAR parabolicSar;
CMF cmf;
VOLUME volume;
SMA sma;
RSI rsi2;
StochasticFast stochasticFast;
StochasticSlow stochasticSlow;
MFI mfi;
public override void OnInit()
{
rsi = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, RsiPeriod1);
parabolicSar = ParabolicSARIndicator(Symbol, SymbolPeriod, ParabolicsarAcc1, ParabolicsarMaxAcc1);
cmf = CMFIndicator(Symbol, SymbolPeriod, OHLCType.Close, CmfPeriod1);
volume = VolumeIndicator(Symbol, SymbolPeriod);
sma = SMAIndicator(volume, SmaPeriod1);
rsi2 = RSIIndicator(volume, RsiPeriod2);
stochasticFast = StochasticFastIndicator(Symbol, SymbolPeriod, OHLCType.Close, StochasticfastPeriodK1, StochasticfastPeriodD1, StochasticfastMovMethod1);
stochasticSlow = StochasticSlowIndicator(Symbol, SymbolPeriod, OHLCType.Close, StochasticslowPeriodK1, StochasticslowPeriodD1, StochasticslowPeriodSlowK1, StochasticslowMovMethod1);
mfi = MFIIndicator(Symbol, SymbolPeriod, MfiPeriod1);
AddColumns(8);
SetColumnText(0, "RSI");
SetColumnText(1, "ParabolicSar");
SetColumnText(2, "CMF");
SetColumnText(3, "Göreceli Hacim");
SetColumnText(4, "RSI/VOL");
SetColumnText(5, "StochasticF");
SetColumnText(6, "StochasticS");
SetColumnText(7, "MFI");
}
/// <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)
{
var barData1 = GetBarData(Symbol, SymbolPeriod);
var ohlcData1 = GetSelectedValueFromBarData(barData1, OHLCType.Close);
var bardata = bardatas.FirstOrDefault() ? .BarData;
var gh = sma.Value[0][sma.CurrentIndex] / volume.Value[0][volume.CurrentIndex];
SetColumn(0, Math.Round(rsi.Value[0][rsi.CurrentIndex], 2));
SetColumn(1, Math.Round(parabolicSar.Value[0][parabolicSar.CurrentIndex], 2));
SetColumn(2, Math.Round(cmf.Value[0][cmf.CurrentIndex], 2));
SetColumn(3, Math.Round( sma.Value[0][sma.CurrentIndex] / volume.Value[0][volume.CurrentIndex], 2));
SetColumn(4, Math.Round(stochasticFast.Value[0][stochasticFast.CurrentIndex], 2));
SetColumn(5, Math.Round(stochasticSlow.Value[0][stochasticSlow.CurrentIndex], 2));
SetColumn(6, Math.Round(mfi.Value[0][mfi.CurrentIndex], 2));
if (rsi.Value[0][rsi.CurrentIndex] < 70m
&& parabolicSar.Value[0][parabolicSar.CurrentIndex] < ohlcData1
&& cmf.Value[0][cmf.CurrentIndex] > 0.03m
&& sma.Value[0][sma.CurrentIndex] / volume.Value[0][volume.CurrentIndex] >1.5m
&& mfi.Value[0][mfi.CurrentIndex] > 65m
&& stochasticFast.Value[0][stochasticFast.CurrentIndex] > stochasticSlow.Value[0][stochasticSlow.CurrentIndex])
{
return true;
}
return false;
}
}
}
İyi çalışmalar.