Merhaba;
deneme amaçlı kod yazıyorum ancak aşağıdaki haatyı aldım ve düzeltemedim yardımcı olur musunuz?
CS1503:3 bağımsız değişkeni: 'int' öğesinden 'Matriks.Data.Symbol.OHLCTP' öğesine dönüştürülemiyor hatası alıyorum.
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using System.Windows.Media;
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;
using Matriks.Data.Tick;
using Matriks.Enumeration;
using Matriks.IntermediaryInstitutionAnalysis.Enums;
using Newtonsoft.Json;
namespace Matriks.Lean.Algotrader
{
public class ALGOBILDENEME_1 : MatriksAlgo
{
// 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.
[SymbolParameter("THYAO")]
public string Symbol1;
[Parameter(SymbolPeriod.Min)]
public SymbolPeriod SymbolPeriod1;
[Parameter(1)]
public decimal OrderQuantity;
// İndikatörler
MOV movE;
MOST most;
ATR atr;
// VALUEWHEN(1, X1, C)
decimal lastX2 = 0m;
public override void OnInit()
{
// Dokümana uygun parametre sırası
movE = MOVIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, 3, MovMethod.E);
most = MOSTIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, 3, 1, MovMethod.Exponential);
atr = ATRIndicator(Symbol1, SymbolPeriod1, 14);
SendOrderSequential(true, Side.All);
}
public override void OnDataUpdate(BarDataEventArgs barData)
{
var C = barData.BarData.Close;
var movVal = movE.CurrentValue;
var mostVal = most.CurrentValue;
var atrVal = atr.CurrentValue;
// X1 = CROS(MOV, MOST)
bool X1 = Cross(movE, most);
if (X1)
lastX2 = C; // VALUEWHEN -> son kesişimdeki kapanış
if (lastX2 == 0m || atrVal == 0m) return;
// ALIŞ: MOV > MOST ve C > X2 + 2*ATR
if (movVal > mostVal && C > lastX2 + (2m * atrVal))
{
if (LastOrderSide.Obj != Side.Buy)
SendMarketOrder(Symbol1, OrderQuantity, OrderSide.Buy, includeAfterSession: false);
}
// SATIŞ: MOV > MOST ve C < X2 - 2*ATR
if (movVal > mostVal && C < lastX2 - (2m * atrVal))
{
if (LastOrderSide.Obj != Side.Sell)
SendMarketOrder(Symbol1, OrderQuantity, OrderSide.Sell, includeAfterSession: false);
}
}
// MOV ile MOST kesişimi (yukarı veya aşağı)
private bool Cross(MOV m, MOST ms)
{
if (m.CurrentIndex < 1 || ms.CurrentIndex < 1) return false;
var prevDiff = m.Value[0][m.CurrentIndex - 1] - ms.Value[0][ms.CurrentIndex - 1];
var currDiff = m.Value[0][m.CurrentIndex] - ms.Value[0][ms.CurrentIndex];
return (prevDiff <= 0 && currDiff > 0) || (prevDiff >= 0 && currDiff < 0);
}
}
}