Przejdź do treści

Nastroje symbolu

Interfejs SymbolSentiment i klasa SymbolSentimentUpdatedEventArgs umożliwiają dostęp do danych o nastrojach rynkowych w czasie rzeczywistym za pośrednictwem API. Dla dowolnego symbolu:

  • Symbol.Sentiment.BuyPercentage dostarcza zagregowany procent aktywności kupna, podczas gdy Symbol.Sentiment.SellPercentage zwraca zagregowany procent aktywności sprzedaży.
  • SymbolSentimentUpdatedEventArgs jest nośnikiem danych dla zdarzeń aktualizacji nastrojów. Ta klasa umożliwia dostęp do zaktualizowanych danych o nastrojach dla odpowiedniego symbolu.

Ostrzeżenie

Obiekty API nastrojów symbolu są obsługiwane tylko w algorytmach .NET 6 i nie działają w chmurze ani w cTrader CLI.

Wskazówka

Zintegruj dane o nastrojach rynkowych z automatycznymi strategiami handlowymi, aby ulepszyć podejmowanie decyzji, zwiększyć prawdopodobieństwo zyskownych transakcji i wzmocnić zarządzanie ryzykiem.

Obiekty API nastrojów symbolu mogą być wykorzystywane do następujących celów w algorytmach:

Funkcja lub operacja Przykłady
Handel oparty na nastrojach Handel z nastawieniem nastrojów
Handel wbrew ekstremalnym nastrojom
Łączenie nastrojów ze świecami
Wyjście przy rozbieżności nastrojów
Adaptacyjna konfiguracja ryzyka Filtrowanie zakłóconych transakcji
Skalowanie transakcji z nastrojami
Ograniczanie strategii na podstawie aktywności rynkowej
Ustawianie stop loss na podstawie nastrojów
Monitorowanie i analiza Tworzenie alertów opartych na nastrojach
Uruchamianie strategii mapy cieplnej nastrojów
Wykrywanie wybić poprzez nastroje
Walidacja sygnałów wskaźników

Uwaga

Ponieważ dane o nastrojach są dostępne tylko w czasie rzeczywistym, nie można ich używać do backtestingu ani optymalizacji, gdyż nie ma danych historycznych ani przechowywanych.

Handel oparty na nastrojach

Handel z nastawieniem nastrojów

Możesz zaprogramować cBota, aby potwierdzał nastawienie trendu przed wejściem w transakcje lub handlował tylko wtedy, gdy nastroje odpowiadają kierunkowi. Na przykład cBot realizuje kupno, jeśli co najmniej 70% nastrojów jest zwyżkowych, i sprzedaż, jeśli 70% jest zniżkowych.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override void OnBar()
{
    if (Symbol.Sentiment.BuyPercentage > 70)
    {
        ExecuteMarketOrder(TradeType.Buy, "EURUSD", 10000);
    }
    else if (Symbol.Sentiment.SellPercentage > 70)
    {
        ExecuteMarketOrder(TradeType.Sell, "EURUSD", 10000);
    }
}

Handel wbrew ekstremalnym nastrojom

Rozważ cBota, który wchodzi w transakcje wbrew silnemu konsensusowi nastrojów. Podejście odwrócenia w algorytmie zakłada, że tłum często się myli w ekstremach lub wierzy, że gdy bardzo wysoka proporcja traderów jest po jednej stronie, rynek może być gotowy do odwrócenia. Na przykład, jeśli ponad 80% traderów kupuje, cBot realizuje sprzedaż, oczekując odwrócenia. Ta sama logika ma zastosowanie, gdy większość sprzedaje.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
protected override void OnBar()
{
    if (Symbol.Sentiment.BuyPercentage > 80)
    {
        // Everyone is buying. Consider selling
        ExecuteMarketOrder(TradeType.Sell, "EURUSD", 10000);
    }
    else if (Symbol.Sentiment.SellPercentage > 80)
    {
        // Everyone is selling. Consider buying
        ExecuteMarketOrder(TradeType.Buy, "EURUSD", 10000);
    }
}

Łączenie nastrojów ze świecami

Możesz skonfigurować cBota, aby działał tylko wtedy, gdy zarówno nastroje rynkowe, jak i kierunek świecy są zgodne. Jeśli otrzyma zwyżkową świecę, a nastroje są powyżej 60% zwyżkowych, cBot kupuje. Jeśli świeca jest zniżkowa, a nastroje się zgadzają, cBot sprzedaje. To podejście pomaga filtrować słabe sygnały i unikać fałszywych wejść.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
protected override void OnBar()
{
    bool bullishCandle = Bars.LastBar.Close > Bars.LastBar.Open;
    if (bullishCandle && Symbol.Sentiment.BuyPercentage > 60)
    {
        ExecuteMarketOrder(TradeType.Buy, "EURUSD", 10000);
    }

    bool bearishCandle = Bars.LastBar.Close < Bars.LastBar.Open;
    if (bearishCandle && Symbol.Sentiment.SellPercentage > 60)
    {
        ExecuteMarketOrder(TradeType.Sell, "EURUSD", 10000);
    }
}

Wyjście przy rozbieżności nastrojów

cBot może pomóc Ci wyjść z transakcji, gdy nastroje nie wspierają już Twojej pozycji. Na przykład, jeśli trzymasz pozycję kupna, a nastroje przechodzą na ponad 60% zniżkowych, cBot ją zamyka. Robi to samo w przypadku zleceń sprzedaży, gdy sentyment staje się byczy.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
protected override void OnBar()
{
    foreach (var position in Positions)
    {
        if (position.TradeType == TradeType.Buy && Symbol.Sentiment.SellPercentage > 60)
            ClosePosition(position);
        if (position.TradeType == TradeType.Sell && Symbol.Sentiment.BuyPercentage > 60)
            ClosePosition(position);
    }
}

Adaptacyjna konfiguracja ryzyka

Odfiltruj zaszumione transakcje

Możesz opracować cBota, który unika handlu, gdy nie ma wyraźnego nastawienia sentymentu. Na przykład, jeśli sentyment jest niemal podzielony, a różnica wynosi poniżej 10%, cBot pomija transakcję. Ta konfiguracja odfiltruje szum i chroni Cię przed niezdecydowanymi rynkami.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
protected override void OnBar()
{
    var diff = Math.Abs(Symbol.Sentiment.BuyPercentage - Symbol.Sentiment.SellPercentage);

    if (diff < 10)
    {
        // Sentiment is too neutral. Avoid trading
        return;
    }

    // Continue strategy logic here
}

Skaluj transakcje zgodnie z sentymentem

Możesz skonfigurować cBota tak, aby dostosowywał wielkość pozycji w zależności od tego, jak silnie sentyment skłania się w jednym kierunku. Na przykład, jeśli sentyment byczy przewyższa niedźwiedzi o duży margines, cBot zwiększa wolumen transakcji. Jeśli sentyment jest bliski neutralnemu, cBot handluje mniejszymi pozycjami.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
protected override void OnBar()
{
    double sentimentStrength = Math.Abs(Symbol.Sentiment.BuyPercentage - Symbol.Sentiment.SellPercentage);
    long volume = (long)(10000 * (sentimentStrength / 100.0)); // Adjust volume dynamically

    if (Symbol.Sentiment.BuyPercentage > Symbol.Sentiment.SellPercentage)
    {
        ExecuteMarketOrder(TradeType.Buy, "EURUSD", 10000);
    }
    else
    {
        ExecuteMarketOrder(TradeType.Sell, "EURUSD", 10000);
    }
}

Dostosuj strategię w oparciu o aktywność rynku

Twoja strategia może być skonfigurowana tak, aby wstrzymywać handel, gdy sentyment wykazuje oznaki zatłoczonego rynku. Na przykład, jeśli ponad 90% traderów kupuje lub sprzedaje, cBot zatrzymuje handel, aby uniknąć wejścia w pozycję w momencie, gdy rynek prawdopodobnie się odwróci.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
protected override void OnBar()
{
    if (Symbol.Sentiment.BuyPercentage > 90 || Symbol.Sentiment.SellPercentage > 90)
    {
        Print("Extreme sentiment detected. Halting trading temporarily.");
        return;
    }

    // Continue normal trading logic
}

Ustaw stop loss zgodnie z sentymentem

Możesz poinstruować cBota, aby mierzył siłę sentymentu i reagował odpowiednim rozmiarem stop loss. Na przykład, gdy sentyment byczy przekracza 80%, cBot używa węższego stopu wynoszącego 20 pipsów. Jeśli sentyment jest mniej pewny, cBot ustawia szerszy stop wynoszący 50 pipsów, aby zapewnić więcej przestrzeni.

1
2
3
4
5
6
7
8
protected override void OnBar()
{
    double stopLossPips = Symbol.Sentiment.BuyPercentage > 80 ? 20 : 50;
    if (Symbol.Sentiment.BuyPercentage > Symbol.Sentiment.SellPercentage)
    {
        ExecuteMarketOrder(TradeType.Buy, "EURUSD", 10000, "buy", stopLossPips, null);
    }
}

Monitorowanie i analiza

Twórz alerty oparte na sentymencie

Rozważ cBota, który monitoruje sentyment w czasie rzeczywistym i ostrzega Cię, gdy osiągnięte zostaną ekstremalne poziomy. Na przykład, jeśli sentyment kupna przekracza 90%, cBot rejestruje lub drukuje alert byczy. Jeśli sentyment sprzedaży przekracza ten sam próg, powiadamia Cię o ekstremalnym niedźwiedzim nastawieniu.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// This method handles the SymbolSentiment_Updated event
// It is triggered whenever the symbol sentiment data is updated
private void SymbolSentiment_Updated(SymbolSentimentUpdatedEventArgs obj)
{
    if (obj.Sentiment.BuyPercentage > 90)
        Print("Extreme bullish sentiment detected!");

    if (obj.Sentiment.SellPercentage > 90)
        Print("Extreme bearish sentiment detected!");
}

Uruchom strategię mapy cieplnej sentymentu

Rozważ cBota, który przeprowadza skanowanie sentymentu na wielu aktywach i identyfikuje najlepsze możliwości handlowe. Na przykład, cBot przechodzi przez wszystkie dostępne symbole i drukuje procenty kupna i sprzedaży, a następnie możesz skupić się na tych z najbardziej ekstremalnym sentymentem byczym lub niedźwiedzim.

1
2
3
4
5
6
7
8
protected override void OnStart()
{
    var symbols = Symbols.GetSymbols();
    foreach (var sym in symbols)
    {
        Print($"{sym.Name} - Buy %: {sym.Sentiment.BuyPercentage}, Sell %: {sym.Sentiment.SellPercentage}");
    }
}

Wykrywaj wybicia poprzez sentyment

cBot może być zaprogramowany do wykrywania szybkich zmian w sentymencie jako potencjalnego znaku wybicia lub zwiększonej zmienności rynku. Na przykład, jeśli sentyment kupna skacze lub spada o ponad 15%, cBot rejestruje skok jako wczesną oznakę zmiennego ruchu.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
// Field to store the previous buy percentage value
private double previousBuy;

protected override void OnStart()
{
    previousBuy = Symbol.Sentiment.BuyPercentage;

    // Subscribe to the sentiment updated event
    // This will trigger the SymbolSentiment_Updated method whenever sentiment data is updated    
    Symbol.Sentiment.Updated += SymbolSentiment_Updated;
}

// obj is an instance of SymbolSentimentUpdatedEventArgs, which carries the updated sentiment data
private void SymbolSentiment_Updated(SymbolSentimentUpdatedEventArgs obj)
{
    double change = Math.Abs(obj.Sentiment.BuyPercentage - previousBuy);
    if (change > 15)
        Print("Spike in sentiment detected. Breakout or heightened volatility coming soon");

    previousBuy = obj.Sentiment.BuyPercentage;
}

Waliduj sygnały wskaźników

Zamiast polegać wyłącznie na wskaźnikach, możesz ulepszyć swoją strategię, programując cBota tak, aby działał tylko wtedy, gdy warunki wskaźnika i sentymentu są zgodne. Na przykład, gdy RSI pokazuje wyprzedanie, a sentyment przekracza 70% byczego nastawienia, cBot kupuje. Jeśli RSI sygnalizuje wykupienie, a sentyment przekracza 70% niedźwiedziego nastawienia, cBot sprzedaje.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
private RelativeStrengthIndex rsi;

protected override void OnStart()
{
    rsi = Indicators.RelativeStrengthIndex(Bars.ClosePrices, 14);
}

protected override void OnBar()
{
    if (rsi.Result.LastValue < 30 && Symbol.Sentiment.BuyPercentage > 70)
    {
        ExecuteMarketOrder(TradeType.Buy, "EURUSD", 10000);
    }

    if (rsi.Result.LastValue > 70 && Symbol.Sentiment.SellPercentage > 70)
    {
        ExecuteMarketOrder(TradeType.Sell, "EURUSD", 10000);
    }
}