0 beğenilme 0 beğenilmeme
18 kez görüntülendi
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);

        }

    }

}
önce Algoritmik Trading kategorisinde (14 puan) tarafından | 18 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme
Merhabalar,
Eksik parametre girildiğinden dolayı sorun yaşamaktasınız.

Şu şekilde deneyiniz.
atr = ATRIndicator(Symbol1, SymbolPeriod1, 14);  //eski
atr = ATRIndicator(Symbol1, SymbolPeriod1,OHLCType.Close, 14);  //yeni

İyi çalışmalar dileriz.
önce (5,585 puan) tarafından
9,771 soru
9,735 cevap
5,244 yorum
52,895 kullanıcı