Add Linux-native cTrader cBot build/run scaffold

Build cBots in C# and compile them to .algo entirely on Linux via the
official cTrader.Automate NuGet package + 'dotnet build' — no Windows and
no cTrader desktop app. Run/backtest headless through Spotware's official
cTrader console Docker image.

Includes:
- src/SampleCBot: example SMA-crossover cBot (SDK-style net6.0 class library)
- scripts/install-dotnet.sh: root-free local .NET SDK install (~/.dotnet)
- scripts/build.sh: dotnet build -> dist/<ProjectName>.algo, with a workaround
  for cTrader.Automate naming the .algo after the project's parent folder
- scripts/run-console.sh: wrapper over ghcr.io/spotware/ctrader-console
- docs/research-findings.md: sourced research; .algo verified as a proprietary
  'algo'-magic container (not a ZIP); build verified end to end on Linux
This commit is contained in:
2026-06-18 20:54:56 +02:00
commit 9c39a743d0
10 changed files with 535 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{49D31EB1-4380-417B-A69E-0F21240EFC29}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleCBot", "src\SampleCBot\SampleCBot.csproj", "{CE1934B5-C4C0-474D-874F-575A8436A27C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{CE1934B5-C4C0-474D-874F-575A8436A27C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CE1934B5-C4C0-474D-874F-575A8436A27C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CE1934B5-C4C0-474D-874F-575A8436A27C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CE1934B5-C4C0-474D-874F-575A8436A27C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{CE1934B5-C4C0-474D-874F-575A8436A27C} = {49D31EB1-4380-417B-A69E-0F21240EFC29}
EndGlobalSection
EndGlobal