Przejdź do treści

Jak debugować cBota

cTrader umożliwia programistom tworzenie, modyfikowanie lub pracę z algorytmami za pomocą wbudowanego edytora. Jednak niektórzy programiści są już zaznajomieni z innym środowiskiem lub mogą preferować pracę w profesjonalnym zintegrowanym środowisku programistycznym (IDE).

W tym artykule i odpowiadającym mu filmie pokażemy, jak można debugować cBota w Visual Studio.

Otwórz cBota w Visual Studio

Przejdź do aplikacji Algo w cTrader i przejdź do zakładki cBoty. W celach demonstracyjnych zdebugujmy Sample RSI cBot.

Znajdź Sample RSI cBot i kliknij go. Edytor kodu powinien pojawić się po prawej stronie.

Kliknij Edytuj w Visual Studio. Jeśli masz zainstalowane Visual Studio na swoim komputerze, powinno otworzyć się z kodem cBota.

Włącz debugowanie w Visual Studio

Jeśli edytor kodu w Visual Studio nie wyświetla automatycznie kodu cBota, musisz zlokalizować i kliknąć plik C# (.cs) w rozwiązaniu Sample RSI cBot.

Wybierz tryb konfiguracji Debug.

Teraz musisz zmodyfikować kod cBota, aby umożliwić debugowanie.

Zacznij od ustawienia AccessRights cBota na FullAccess.

1
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess, AddIndicators = true)]

Dołącz debuger do uruchomionego procesu cBota, wywołując metodę System.Diagnostics.Debugger.Launch().

1
2
3
4
5
6
var result = System.Diagnostics.Debugger.Launch();

if (result is false)
{
    Print("Debugger launch failed");
}

W tym momencie kod w edytorze kodu Visual Studio powinien wyglądać następująco:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using cAlgo.API;
using cAlgo.API.Indicators;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess, AddIndicators = true)]
    public class SampleRSIcBot : Robot
    {
        [Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
        public double Quantity { get; set; }

        [Parameter("Source", Group = "RSI")]
        public DataSeries Source { get; set; }

        [Parameter("Periods", Group = "RSI", DefaultValue = 14)]
        public int Periods { get; set; }

        private RelativeStrengthIndex rsi;

        protected override void OnStart()
        {
            var result = System.Diagnostics.Debugger.Launch();

            if (result is false)
            {
                Print("Debugger launch failed");
            }

            rsi = Indicators.RelativeStrengthIndex(Source, Periods);
        }

        protected override void OnTick()
        {
            if (rsi.Result.LastValue < 30)
            {
                Close(TradeType.Sell);
                Open(TradeType.Buy);
            }
            else if (rsi.Result.LastValue > 70)
            {
                Close(TradeType.Buy);
                Open(TradeType.Sell);
            }
        }

        private void Close(TradeType tradeType)
        {
            foreach (var position in Positions.FindAll("SampleRSI", SymbolName, tradeType))
                ClosePosition(position);
        }

        private void Open(TradeType tradeType)
        {
            var position = Positions.Find("SampleRSI", SymbolName, tradeType);
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);

            if (position == null)
                ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "SampleRSI");
        }
    }
}

Przebudujmy naszego cBota. Kliknij prawym przyciskiem myszy rozwiązanie Sample RSI cBot i kliknij Rebuild.

Debuguj cBota

Aby zademonstrować proces debugowania, dodajmy punkt przerwania w naszej metodzie OnTick(). Kliknij prawym przyciskiem myszy linię kodu if (rsi.Result.LastValue < 30), kliknij Breakpoint, a następnie wybierz Insert breakpoint.

Teraz musisz wrócić do Sample RSI cBot w cTrader. Kliknij Dodaj wystąpienie.

Wybierz Lokalnie, a następnie kliknij przycisk Dodaj instancję.

Kliknij ikonę Uruchom cBota, aby uruchomić cBota, a następnie kliknij przycisk Zezwól, aby przyznać mu prawa dostępu.

Wybierz Sample RSI cBot - Microsoft Visual Studio jako debuger i kliknij przycisk OK.

Po osiągnięciu zdarzenia OnTick() wykonanie zostaje przerwane przez punkt przerwania, który ustawiliśmy wcześniej.

Na koniec możesz użyć wszystkich funkcji debugowania Visual Studio. Na przykład możesz sprawdzić metodę w oknie Watch.

Dodatkowo możesz wykonać następujące czynności:

Użyj funkcji step over, aby przenieść wykonanie do następnej linii.

Przeciągnij linię wykonania do innej instrukcji.

Użyj funkcji step into, aby wejść do metody i zbadać wykonanie kodu.

Podsumowanie

Mamy nadzieję, że informacje w naszym artykule i filmie pomogły Ci debugować cBoty w Visual Studio. Zasady i operacje debugowania omówione tutaj mają również zastosowanie do innych profesjonalnych IDE.