Seperti yang diminta oleh ramai daripada anda, kami kini sedang bekerja keras untuk menyediakan contoh beberapa kod dan pakej pembelajaran mesin kami.
TensorFlow, PyTorch, Keras, Numpy, Pandas dan banyak lagi pakej .NET untuk memulakan di dalam cTrader.
Misi kami adalah untuk memudahkan Pembelajaran Mesin di dalam cTrader untuk semua orang.
Selamat memburu!
*** Kod ini tidak melakukan sebarang dagangan (ia hanya mencetak data dan sebagainya). Ia hanyalah kod contoh bagaimana anda boleh mula mencipta model AI anda sendiri menggunakan pakej Pembelajaran Mesin kami.
.......................................................
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("Versi 1.01", DefaultValue = "Versi 1.01")]
public string Version { get; set; }
[Parameter("Sumber")]
public DataSeries Source { get; set; }
[Parameter("Bar Diperlukan", DefaultValue = 50, MinValue = 1, MaxValue = 10000, Step = 1)]
public int BarsRequired { get; set; }
[Parameter("Nama Kaedah", DefaultValue = MethodName.DataSplitPrints)]
public MethodName Mode { get; set; }
public enum MethodName
{
DataSplitPrints,
PandasPrints,
NDArrayPrints
}
protected override void OnStart()
{
// Inisialisasi mana-mana indikator
}
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($"Ralat: {ex.Message}");
if (ex.InnerException != null)
{
Print($"Pengecualian Dalaman: {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;
}
/// Cetakan Pecahan Data NumSharp
public void DataSplitPrints()
{
// Bentuk semula data input untuk memadankan bentuk input yang dijangka oleh model
//var inputShape = new Shape(-1, BarsRequired, 5);
NDArray inputData = np.array<float>(GetDataSet());
Print("Input NDarray: " + string.Join(", ", inputData));
// Bentuk semula data sasaran untuk memadankan bentuk sasaran yang dijangka oleh model
//var targetShape = new Shape(-1, 5);
NDArray targetData = np.array<float>(GetTargetDataSet());
Print("Target NDarray: " + string.Join(", ", targetData));
// Bahagikan data kepada set latihan dan ujian
int testSize = (int)(0.2 * inputData.shape[0]); // 20% untuk ujian
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("Data X_train: " + string.Join(", ", x_train));
Print("Data X_test: " + string.Join(", ", x_test));
Print("Data Y_train: " + string.Join(", ", y_train));
Print("Data Y_test: " + string.Join(", ", y_test));
}
/// Cetakan PandasNet
public void PandasPrints()
{
// Tukar float[,] kepada Senarai<Series>
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()));
}
// Cipta DataFrame
DataFrame inputDataFrame = new DataFrame(inputSeriesList);
DataFrame targetDataFrame = new DataFrame(targetSeriesList);
Print("Input DataFrame: " + inputDataFrame);
Print("Target DataFrame: " + targetDataFrame);
//Print("Input DataFrame: " + string.Join(", ", inputDataFrame));
//Print("Target DataFrame: " + string.Join(", ", targetDataFrame));
}
/// Cetakan NumSharp NDArrays Mudah
public void NDArrayPrints()
{
if (Bars.ClosePrices.Count < BarsRequired)
return;
try
{
// Memanggil Data Input float[,] anda
float[,] inputData = GetDataSet();
// Tukar kepada NDArray dan bentuk semula kepada (BarsRequired, 5)
NDArray inputNDArray = np.array(inputData); // NumSharp
Print("Data NumSharp NDarray Input : " + string.Join(", ", inputNDArray));
Print("Bentuk NumSharp NDarray Input: " + string.Join(", ", inputNDArray.shape));
int expectedLength = BarsRequired * 5;
Print($"Panjang NumSharp NDarray Dijangka: {expectedLength}");
Print($"Saiz NumSharp NDarray Input: {inputNDArray.size}");
if (inputNDArray.size != expectedLength)
{
Print($"Panjang Tidak Padan: Panjang Dijangka {expectedLength}, tetapi mendapat Saiz {inputNDArray.size}");
return;
}
}
catch (Exception ex)
{
Print("Pengecualian: " + ex.Message);
Print("Jejak Tumpukan: " + ex.StackTrace);
Exception innerException = ex.InnerException;
while (innerException != null)
{
Print("Pengecualian Dalaman: " + innerException.Message);
Print("Jejak Tumpukan Pengecualian Dalaman: " + innerException.StackTrace);
innerException = innerException.InnerException;
}
}
}
}
}