Gradnja in backtest cBotov
Gradnja, zagon in backtest cTrader cBotov (C# in Python, oba .NET) iz brskalnika Monaco
IDE, zagon na uradni sliki ghcr.io/spotware/ctrader-console.
Gradnja
- Stran Builder gosti urejevalnik Monaco;
CBotBuilderprevede projekt zdotnet buildv enkratni posodi (AppOptions.BuildImage, delovni imenik bind-mount na/work), tako da nezaupljivi uporabniški MSBuild ne doseže gostitelja. NuGet restore je predpomnjen med gradnjami preko deljene prostornine. Spletni gostitelj potrebuje dostop do vtičnika Docker. - Startne predloge C# in Python živijo v
src/Nodes/Builder/Templates/.
Zagon in backtest
- Instances = hierarhija stanja TPH (
Run/Backtest×Pending/Scheduled/Starting/Running/Stopping/Stopped/Failed). Prehod zamenja entiteto (sprememba id), id posode se prenese. NodeSchedulerizbere najmanj obremenjeno upravičeno vozlišče;ContainerDispatcherFactorypreusmeri na agenta oddaljene vozlišča HTTP ali lokalni razporejevalnik Docker.- Zapolnilni pollerji usklajujejo izstopljene posode (backtest posode se samopreklapljajo prek
--exit-on-stop); poročilo prisotno → zaključeno (shraniReportJson), manjkajoče → neuspešno. - Toki živih posod se pretakajo v brskalnik preko SignalR; krivulje lastniškega kapitala backtest se razčistijo iz poročila in narišejo.
Podatki o backtest trgu so predpomneni na račun
cTrader Console prenese zgodovinske podatke o tiku/stolpcu v --data-dir. Ta imenik je
stabilen, trajen predpomnilnik, ključan na trgovalnem računu (njegova številka računa) — bind-mounted iz
diska vozlišča na njegovo lastno pot posode (/mnt/data), ločen, ne-ugniježdan mount iz
delovnega imenika per-instance. Torej vsak backtest na istem računu ponovno uporabi že prenesene
podatke namesto, da bi jih znova prenesli pri vsakem zagonu. (Prej je bil
imenik podatkov pod delovnim imenikom per-instance, katerega id se spremeni pri vsakem zagonu, kar je prisililo svežo
prenos pri vsakem backtestu.) Efemerni delovni imenik per-instance še vedno drži algo, parametre, geslo
in poročilo; skupni predpomnilnik podatkov se šteje v porabo backtest-data vozlišča in se počisti z
akcijo čiščenja vozlišča.
Nastavitve backtest
Dialog Backtest izpostavlja nastavitve backtest cTrader Console, ki jih uporabnik lahko spreminja, tako da se nikoli ne morate dotakniti ukazne vrstice:
- Symbol / Timeframe — okvir časa je spustni seznam vsakega cTrader obdobja (
t1…t1000,m1…m45,h1…h12,D1/D2/D3,W1,Month1in Renko/Range/Heikin obdobja), v kanoničnem slogu konzole, tako da vedno izberete veljaven--period. - From / To — okno backtest (
--start/--end). - Data mode — eno od treh cTrader načinov (
--data-mode): Tick data (tick, natančno), m1 bars (m1, hitro) ali Open prices only (open, najhitreje). - Starting balance — privzeto
10000(--balance). Saldo 0 ne izvršuje trgovin in povzroči, da cTrader izda prazno poročilo in se nato zrušimo ("Message expected"), zato se vedno pošlje saldo, ki ni nič. - Commission —
--commission. - Spread —
--spread, numerično polje v pipih, ki ne more biti manjše od 0. Je skrito v Tick data mode, kjer cTrader izpelje razpred iz samih podatkov tika (ni poslano--spread).
Imenik podatkov (--data-file / --data-dir) upravlja sama aplikacija (predpomnilnik per-račun, glej
zgoraj), ni izpostavljen v dialogu.
:::note cTrader se zruši na praznem backtestu
Če backtest ne prinaša rezultatov — brez trgovin ali brez tržnih podatkov za izbrane datume/simbol —
pisatelj poročil lastne konzole cTrader vrže Message expected in se zaključi brez poročila. Aplikacija ne more
rešiti to nadaljnjo napako, vendar jo zazna in označi instanco Failed z razumljivo razlogo
("no backtest results for the selected range…") namesto surove sledi sklada. Izberite širše časovno obdobje
s katerim so razpoložljivi tržni podatki in poskusite znova.
:::
Stran s podrobnostmi instance
Odpiranje instance (/instance/{id}) prikaže njeno stanje v realnem času, dnevnike in — za backtest — krivuljo lastniškega kapitala.
Naslov zavihka brskalnika odraža posebno instanco (ime cBota · vrsta · simbol, npr.
TrendBot · Backtest · EURUSD), zato je zavihek živega zagona in zavihek backtest razločljiv na prvi pogled.
Zagon in backtest istoimenske cBota se sledita kot ločeni rodovi (stabilen id rodu, prešel
med prehodi stanja), zato stran sledi natanko eni instanci in nikoli ne meša podatke zagona s podatki
backtest.
Kontrole životnega cikla instance
Vsaka vrstica instance (in njena stran s podrobnostmi) ima kontrole, prilagojene stanju. Aktivna instanca prikaže Stop; končna (Stopped / Completed / Failed) prikaže Start (▶), da jo ponovno zaženete z istim cBotom, računom, simbolom, okvirom časa, naborom parametrov in sliko (zagon se ponovno zagane kot zagon, backtest kot backtest). Klik na Stop prikaže obvestilo "Stopping…" in onemogoči ikono, dokler se ne razreši, nova instance pa se pojavi v seznamu takoj — brez osvežitve strani.
Dnevniki konzole so shranjeni, ko se instanca konča — za zagon (pri Stop) in za backtest (pri zaključku) enako — tako da dnevniki zadnjega zagona ostanejo vidni na strani s podrobnostmi in, prek orodne vrstice dnevnika, kopirani v odložišče (ikona Kopiraj dnevnike) ali preneseni (ikona Prenesi dnevnike) tudi potem, ko posoda izgine. Oba delujeta na polnem dnevniku konzole instance, ne samo na vidnem repu.
Naložena .algo ni bila nikoli zgrajena tukaj, zato njena stolpec Last Build na strani cBots ostane
prazen (prikaže čas gradnje samo za cBote, ki jih zgradiš v brskalniku).
Urejanje in ponovno zagon ustavljene instance
Ustavljena instanca (zagon ali backtest) ima kontrolo Edit — ikono na njeni vrstici v seznamu in poleg Start/Stop na njeni strani s podrobnostmi — ki odpre dialog vnaprej izpolnjen s trenutno konfiguracijo. Lahko spremenite trgovalni račun, simbol, okvir časa, nabor parametrov in oznako slike (in za backtest tudi okno in vse zgornje nastavitve backtest), nato Save & start ga ponovno zagane z novimi nastavitvami (zamenja ustavljeno instanco). Kontrola je onemogoča, medtem ko je instanca aktivna — samo ustavljena instanca se lahko ureja.
Zagon iz urejevalnika kode
Klik na Run v urejevalniku kode odpre dialog namesto da bi sprožil slepi, trdo kodiran zagon:
- Trading account (obvezno) — račun cTrader, s katerim se cBot poveže.
- Parameter set (neobvezno) — izberite obstoječi nabor ali ga pustite praznega, da se zaženete s privzetimi vrednostmi parametrov cBota. Gumb + poleg izbirnika ustvari novo vrednost parametra vstavki (glej spodaj) in jo izbere.
- Symbol / Timeframe privzeto
EURUSD/h1in se lahko spremenita; Cancel ali Run.
Na Run urejevalnik shrani + gradi trenutni vir, začne instanco na izbranem računu
s izbranimi parametri, nato pa sledi tokam dnevnika živih posod. (Tok dnevnika preusmeri piskotko avtentifikacije
podpisanega uporabnika na hub SignalR /hubs/logs, zato se poveže namesto da bi bil neuspešen s
Invalid negotiation response received.)
Nabori parametrov
Parameter set je imenovan, ponovno utiliskan nabor preglasitev parametrov cBota, shranjen kot raven objekt JSON,
ki preslika vsako ime parametra na skalarno vrednost, npr. {"Period": 14, "Label": "trend"}. Pri
zagonu/backtestu se pretvori v datoteko cTrader params.cbotset
({ "Parameters": { … } }). Nabor lahko ustvarite/uredite kot surovec JSON iz dialoga Parameter
sets cBota ali vstavki iz dialoga Run.
Vsak nabor parametrov pripada cBotu: dialog New Parameter Set navaja vse vaše cBote in morate
izbrati enega — ustvarjanje je blokirano, dokler ni izbran cBot. Ime nabora je edinstveno na cBot:
ustvarjanje ali preimenovanje nabora na ime, ki ga že uporablja drugi nabor istoimenske cBota, je zavrnjeno (jasna
napaka v dialogu, 409 Conflict pri API). Isto ime se lahko ponovno uporablja na drugem cBot.
JSON je preverjen pri shranjevanju: biti mora raven objekt, katerega vrednosti so vse skalarne
(niz / število / bool). Nenumerski koren, niz, ugniježdan objekt, vrednost null ali slabo oblikovan
JSON je zavrnjen (jasna napaka v dialogu, 400 Bad Request pri API). Prazen objekt {}
je dovoljen in pomeni "brez preglasitve".
Opombe CLI cTrader Console
Backtest potrebuje --data-mode (privzeto m1), datume kot dd/MM/yyyy HH:mm in
params.cbotset JSON pozicijski argument; run zavrne --data-dir (samo backtest). Glejte
ContainerCommandHelpers.
Vozlišča in lestvica
Zmogljivost izvršitve se skalira z dodajanjem vozlišč agentov (samoprivolitev + srčni utrip). Glejte node discovery in scaling.
Potreben je trgovalni račun
Zagon ali backtest cBota potrebuje trgovalni račun cTrader za povezavo. Dokler ne dodate enega v razdelku
Trading accounts, so gumbi Run New cBot / Backtest New cBot onemogoči (s
napoeko) in stran prikaže poziv, ki se poveže na nastavko računa — ne boste več dobili surove
napake stream connect failed od bota brez računa.