Birçoğunuzun talebi üzerine, şimdi makine öğrenimi kodlarımızdan ve paketlerimizden bazı örnekler sunmak için yoğun bir şekilde çalışıyoruz.
TensorFlow, PyTorch, Keras, Numpy, Pandas ve cTrader içinde kullanmaya başlamak için daha birçok .NET paketi.
Misyonumuz, cTrader içinde Makine Öğrenimini herkes için daha kolay hale getirmektir.
İyi avlar!
*** Bu kod herhangi bir işlem yapmaz (sadece veri yazdırır vb.). Makine Öğrenimi paketlerimizi kullanarak kendi AI modellerinizi nasıl oluşturabileceğinize dair basit bir örnek koddur.
.......................................................
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using NumSharp;
using np = NumSharp.np;
using Shape = NumSharp.Shape;
using PandasNet;
using static PandasNet.PandasApi;
namespace cAlgo.Robots
{
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class E7BBKGNumSharpSample : Robot
{
[Parameter("Version 1.01", DefaultValue = "Version 1.01")]
public string Version { get; set; }
[Parameter("Source")]
public DataSeries Source { get; set; }
[Parameter("Bars Required", DefaultValue = 50, MinValue = 1, MaxValue = 10000, Step = 1)]
public int BarsRequired { get; set; }
[Parameter("Method Name", DefaultValue = MethodName.DataSplitPrints)]
public MethodName Mode { get; set; }
public enum MethodName
{
DataSplitPrints,
PandasPrints,
NDArrayPrints
}
protected override void OnStart()
{
// Herhangi bir göstergeleri başlat
}
protected override void OnBar()
{
try
{
if (Mode == MethodName.DataSplitPrints)
{
DataSplitPrints();
}
else if (Mode == MethodName.PandasPrints)
{
PandasPrints();
}
else if (Mode == MethodName.NDArrayPrints)
{
NDArrayPrints();
}
}
catch (Exception ex)
{
Print($"Hata: {ex.Message}");
if (ex.InnerException != null)
{
Print($"İç Hata: {ex.InnerException.Message}");
throw;
}
}
}
private float[,] GetDataSet()
{
int startBar = Bars.ClosePrices.Count - BarsRequired;
float[,] inputSignals = new float[BarsRequired, 5];
for (int i = 0; i < BarsRequired; i++)
{
int barIndex = startBar + i;
inputSignals[i, 0] = (float)Bars.OpenPrices[barIndex];
inputSignals[i, 1] = (float)Bars.HighPrices[barIndex];
inputSignals[i, 2] = (float)Bars.LowPrices[barIndex];
inputSignals[i, 3] = (float)Bars.ClosePrices[barIndex];
inputSignals[i, 4] = (float)Bars.TickVolumes[barIndex];
}
return inputSignals;
}
private float[,] GetTargetDataSet()
{
int startBar = Bars.ClosePrices.Count - BarsRequired;
float[,] inputSignals = new float[BarsRequired, 5];
for (int i = 0; i < BarsRequired; i++)
{
int barIndex = startBar + i;
inputSignals[i, 0] = (float)Bars.OpenPrices[barIndex];
inputSignals[i, 1] = (float)Bars.HighPrices[barIndex];
inputSignals[i, 2] = (float)Bars.LowPrices[barIndex];
inputSignals[i, 3] = (float)Bars.ClosePrices[barIndex];
inputSignals[i, 4] = (float)Bars.TickVolumes[barIndex];
}
return inputSignals;
}
/// NumSharp Veri Bölme Yazdırmaları
public void DataSplitPrints()
{
// Modelin beklediği giriş şekline uyacak şekilde giriş verisini yeniden şekillendir
//var inputShape = new Shape(-1, BarsRequired, 5);
NDArray inputData = np.array<float>(GetDataSet());
Print("Giriş NDarray: " + string.Join(", ", inputData));
// Modelin beklediği hedef şekline uyacak şekilde hedef verisini yeniden şekillendir
//var targetShape = new Shape(-1, 5);
NDArray targetData = np.array<float>(GetTargetDataSet());
Print("Hedef NDarray: " + string.Join(", ", targetData));
// Veriyi eğitim ve test setlerine ayır
int testSize = (int)(0.2 * inputData.shape[0]); // Test için %20
var (x_train, x_test) = (inputData[$":{inputData.shape[0] - testSize}"], inputData[$"{inputData.shape[0] - testSize}:"]);
var (y_train, y_test) = (targetData[$":{targetData.shape[0] - testSize}"], targetData[$"{targetData.shape[0] - testSize}:"]);
Print("X_train verisi: " + string.Join(", ", x_train));
Print("X_test verisi: " + string.Join(", ", x_test));
Print("Y_train verisi: " + string.Join(", ", y_train));
Print("Y_test verisi: " + string.Join(", ", y_test));
}
/// PandasNet Yazdırmaları
public void PandasPrints()
{
// float[,] tipini List<Series> tipine dönüştür
var inputData = GetDataSet();
var targetData = GetTargetDataSet();
var inputSeriesList = new List<Series>();
var targetSeriesList = new List<Series>();
for (int col = 0; col < inputData.GetLength(1); col++)
{
List<float> columnData = new List<float>();
for (int row = 0; row < inputData.GetLength(0); row++)
{
columnData.Add(inputData[row, col]);
}
inputSeriesList.Add(new Series(columnData.ToArray()));
}
for (int col = 0; col < targetData.GetLength(1); col++)
{
List<float> columnData = new List<float>();
for (int row = 0; row < targetData.GetLength(0); row++)
{
columnData.Add(targetData[row, col]);
}
targetSeriesList.Add(new Series(columnData.ToArray()));
}
// DataFrame'ler oluştur
DataFrame inputDataFrame = new DataFrame(inputSeriesList);
DataFrame targetDataFrame = new DataFrame(targetSeriesList);
Print("Giriş DataFrame: " + inputDataFrame);
Print("Hedef DataFrame: " + targetDataFrame);
//Print("Giriş DataFrame: " + string.Join(", ", inputDataFrame));
//Print("Hedef DataFrame: " + string.Join(", ", targetDataFrame));
}
/// Basit NumSharp NDArrays Yazdırmaları
public void NDArrayPrints()
{
if (Bars.ClosePrices.Count < BarsRequired)
return;
try
{
// Giriş Verinizi çağırma float[,]
float[,] inputData = GetDataSet();
// NDArray'a dönüştür ve (BarsRequired, 5) şekline getir
NDArray inputNDArray = np.array(inputData); // NumSharp
Print("Giriş NumSharp NDarray Verisi : " + string.Join(", ", inputNDArray));
Print("Giriş NumSharp NDarray Şekli: " + string.Join(", ", inputNDArray.shape));
int expectedLength = BarsRequired * 5;
Print($"Beklenen NumSharp NDarray Uzunluğu: {expectedLength}");
Print($"Giriş NumSharp NDarray Boyutu: {inputNDArray.size}");
if (inputNDArray.size != expectedLength)
{
Print($"Uzunluk Uyumsuzluğu: Beklenen Uzunluk {expectedLength}, ancak Boyut {inputNDArray.size} olarak alındı");
return;
}
}
catch (Exception ex)
{
Print("İstisna: " + ex.Message);
Print("Yığın İzleme: " + ex.StackTrace);
Exception innerException = ex.InnerException;
while (innerException != null)
{
Print("İç İstisna: " + innerException.Message);
Print("İç İstisna Yığın İzleme: " + innerException.StackTrace);
innerException = innerException.InnerException;
}
}
}
}
}