Merhabalar,
Merhaba yapay zeka için kullanıcı indikatörlerinden bir tanesini ekleyip opt yapmak istiyorum fakat önceden tanımlı indikatörler dışında farklı bir tercihte bulunamıyorum.
Doğrudur, yapay zekada şu an için sadece MatriksIQ içerindeki gömülü indikatörleri kullanarak model oluşturabilirsiniz.
Ayrıca modül oluşturduktan sonra opt yapıp ardından backtest ve eğit diyorum sonrasında algoritma oluşturduktan sonra al sat yapabilmesi için ne yapmam gerekiyor ?
Aşağıda paylaşmış olduğum örnek stratejiyi lütfen inceleyiniz.
***STRATEJİLERİ TEST/DENEME ORTAMINDA SINAMADAN VE SİZİN İSTEDİĞİNİZ ŞEKİLDE ÇALIŞTIĞINA EMİN OLMADAN GERÇEK ORTAMDA HİÇBİR ZAMAN ÇALIŞTIRMAYINIZ ***
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;
namespace Matriks.Lean.Algotrader
{
public class yapayzeka : MatriksAlgo
{
[SymbolParameter("XRP_USDT_BIN")]
public string Symbol;
[Parameter(SymbolPeriod.Min30)]
public SymbolPeriod SymbolPeriod;
[Parameter(1)]
public decimal BuyOrderQuantity;
[Parameter(1)]
public decimal SellOrderQuantity;
[Parameter(60)]
public decimal Olasilik;
MOST most;
public MOV indexer;
IClassifier AiModel;
AiDataSet DataSet;
TimeSpan sessionStart;
TimeSpan sessionEnd;
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
most = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, 3, 2m, MovMethod.E);
indexer = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close);
var sessionTime = GetSessionTimes(Symbol).FirstOrDefault();
sessionStart = sessionTime.Start;
sessionEnd = sessionTime.End;
WorkWithPermanentSignal(true);
SendOrderSequential(true, Side.Buy);
}
public override void OnInitCompleted()
{
var barData = GetBarData();
DataSet = GetAiDataSet(barData, OHLCType.Close, indexer);
DataSet.DefaultWindowSize = 5;
DataSet.AddInput(barData);
DataSet.AddInput(most);
DataSet.SetTrainingDateInterval(new DateTime(2019, 12, 30, 0, 0, 0), new DateTime(2021, 12, 1, 16, 56, 0));
var trainingData = DataSet.GetTrainingData();
var parameters = new ClassificationBoostingParameters(224, 0.00514942896638459, 3, 2, 0.632234101012458, 2);
AiModel = AiModelFactory.GetClassifier(parameters);
AiModel.Train(trainingData.input, trainingData.target);
var prediction = GetAiPrediction();
}
public override void OnDataUpdate(BarDataEventArgs barData)
{
var prediction = GetAiPrediction();
var direction = prediction.Prediction == 1 ? "Yukarı" : "Asağı";
var probability = prediction.Probability[prediction.Prediction];
if (prediction.Prediction == 1 && (decimal) prediction.Probability[prediction.Prediction] * 100>Olasilik && LastOrderSide.Obj != Side.Buy)
{
SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
Debug("alış emri gonderildi");
Debug($"Yön: {direction} Olasılık: {probability*100}");
}
if (prediction.Prediction == 0 && (decimal) prediction.Probability[prediction.Prediction] * 100>Olasilik && LastOrderSide.Obj != Side.Sell)
{
SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
Debug("Satış emri gonderildi");
Debug($"Yön: {direction} Olasılık: {probability*100}");
}
}
public ClassifierOutput GetAiPrediction()
{
var currentTime = DateTime.Now.TimeOfDay;
if (currentTime > sessionStart && currentTime < sessionEnd)
{
DataSet.IgnoreLastBar(true);
}
else
{
DataSet.IgnoreLastBar(false);
}
var predictionData = DataSet.GetPredictionData();
var prediction = AiModel.Predict(predictionData);
var direction = prediction.Prediction == 1 ? "Yukarı" : "Asağı";
var probability = prediction.Probability[prediction.Prediction];
return prediction;
}
}
}
İyi çalışmalar.