Ir para o conteúdo

Sentimento do símbolo

A interface SymbolSentiment e a classe SymbolSentimentUpdatedEventArgs permitem-lhe aceder a dados de sentimento de mercado em tempo real através da API. Para qualquer símbolo dado:

  • Symbol.Sentiment.BuyPercentage fornece a percentagem agregada de atividade de compra, enquanto Symbol.Sentiment.SellPercentage retorna a percentagem agregada de atividade de venda.
  • SymbolSentimentUpdatedEventArgs é um portador de dados para eventos de atualização de sentimento. Esta classe permite-lhe aceder aos dados de sentimento atualizados para o símbolo correspondente.

Aviso

Os objetos da API de sentimento do símbolo são suportados apenas em algoritmos .NET 6 e não funcionam na Cloud ou no cTrader CLI.

Dica

Integre dados de sentimento de mercado em estratégias de negociação automatizadas para melhorar a tomada de decisões, aumentar a probabilidade de negociações lucrativas e fortalecer a gestão de riscos.

Os objetos da API de sentimento do símbolo podem ser usados para fazer o seguinte em algoritmos:

Funcionalidade ou operação Exemplos
Negociação baseada em sentimento Negociar com viés de sentimento
Negociar contra sentimento extremo
Combinar sentimento com velas
Sair em divergência de sentimento
Configuração adaptativa de risco Filtrar negociações ruidosas
Escalar negociações com sentimento
Moderar estratégia com base na atividade do mercado
Definir stop loss com base no sentimento
Monitorização e análise Criar alertas baseados em sentimento
Executar estratégia de mapa de calor de sentimento
Detetar breakouts através do sentimento
Validar sinais de indicadores

Nota

Como os dados de sentimento estão disponíveis apenas em tempo real, não podem ser usados para backtesting ou otimização, já que não há dados históricos ou armazenados.

Negociação baseada em sentimento

Negociar com viés de sentimento

Pode programar um cBot para confirmar o viés de tendência antes de entrar em negociações ou negociar apenas se o sentimento corresponder à direção. Por exemplo, o cBot executa uma compra se pelo menos 70% do sentimento for de alta, e uma venda se 70% for de baixa.

 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);
    }
}

Negociar contra sentimento extremo

Considere um cBot que entra em negociações contra um forte consenso de sentimento. A abordagem de reversão no algoritmo assume que a multidão frequentemente está errada em extremos ou acredita que quando uma proporção muito alta de traders está de um lado, o mercado pode estar pronto para virar. Por exemplo, se mais de 80% dos traders estiverem comprando, o cBot executa uma venda, esperando uma reversão. A mesma lógica se aplica quando a maioria está vendendo.

 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);
    }
}

Combinar sentimento com velas

Pode configurar um cBot para agir apenas quando tanto o sentimento do mercado quanto a direção da vela concordarem. Se obtiver uma vela de alta e o sentimento estiver acima de 60% de alta, o cBot compra. Se a vela for de baixa e o sentimento concordar, o cBot vende. Esta abordagem ajuda-o a filtrar sinais fracos e evitar entradas falsas.

 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);
    }
}

Sair em divergência de sentimento

Um cBot pode ajudá-lo a sair de negociações quando o sentimento já não suporta a sua posição. Por exemplo, se estiver a manter uma compra e o sentimento mudar para mais de 60% de baixa, o cBot fecha-a. Faz o mesmo para negociações de venda quando o sentimento se torna de alta.

 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);
    }
}

Configuração de risco adaptável

Filtrar negociações ruidosas

Pode desenvolver um cBot que evite negociar quando não há um viés de sentimento claro. Por exemplo, se o sentimento estiver quase dividido e a diferença for inferior a 10%, o cBot ignora a negociação. Esta configuração filtra o ruído e protege-o de mercados indecisos.

 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
}

Escalar negociações com o sentimento

Pode configurar um cBot para ajustar o tamanho da posição com base na força com que o sentimento se inclina numa direção. Por exemplo, se o sentimento de alta superar o de baixa por uma grande margem, o cBot aumenta o volume de negociação. Se o sentimento estiver próximo do neutro, o cBot negoceia volumes menores.

 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);
    }
}

Moderar a estratégia com base na atividade do mercado

A sua estratégia pode ser configurada para pausar a negociação quando o sentimento mostrar sinais de um mercado lotado. Por exemplo, se mais de 90% dos traders estiverem a comprar ou a vender, o cBot para de negociar para evitar entrar numa posição quando o mercado está prestes a inverter.

 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
}

Definir stop loss de acordo com o sentimento

Pode instruir um cBot para medir a força do sentimento e responder com um dimensionamento apropriado do stop loss. Por exemplo, quando o sentimento de alta excede 80%, o cBot usa um stop mais apertado de 20 pips. Se o sentimento for menos confiante, o cBot define um stop mais amplo de 50 pips para permitir mais margem de manobra.

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);
    }
}

Monitorização e análise

Criar alertas baseados no sentimento

Considere um cBot que monitoriza o sentimento em tempo real e o alerta quando são atingidos níveis extremos. Por exemplo, se o sentimento de compra exceder 90%, o cBot regista ou imprime um alerta de alta. Se o sentimento de venda ultrapassar o mesmo limiar, notifica-o de um sentimento de baixa extremo.

 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!");
}

Executar estratégia de mapa de calor do sentimento

Considere um cBot que executa uma análise de sentimento em vários ativos e identifica as melhores oportunidades de negociação. Por exemplo, o cBot percorre todos os símbolos disponíveis e imprime as percentagens de compra e venda, e depois pode concentrar-se naqueles com o sentimento de alta ou baixa mais extremo.

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}");
    }
}

Detetar breakouts através do sentimento

Um cBot pode ser programado para detetar mudanças rápidas no sentimento como um potencial sinal de breakout ou de volatilidade elevada do mercado. Por exemplo, se o sentimento de compra subir ou descer mais de 15%, o cBot regista o pico como uma indicação precoce de um movimento volátil.

 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;
}

Validar sinais de indicadores

Em vez de confiar apenas nos indicadores, pode melhorar a sua estratégia programando o seu cBot para agir apenas quando as condições do indicador e do sentimento estiverem alinhadas. Por exemplo, quando o RSI mostra sobrevendido e o sentimento é mais de 70% de alta, o cBot compra. Se o RSI sinalizar sobrecomprado e o sentimento exceder 70% de baixa, o cBot vende.

 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);
    }
}