Saltar a contenido

Sentimiento del símbolo

La interfaz SymbolSentiment y la clase SymbolSentimentUpdatedEventArgs le permiten acceder a los datos de sentimiento del mercado en tiempo real a través de la API. Para cualquier símbolo dado:

  • Symbol.Sentiment.BuyPercentage proporciona el porcentaje agregado de actividad de compra, mientras que Symbol.Sentiment.SellPercentage devuelve el porcentaje agregado de actividad de venta.
  • SymbolSentimentUpdatedEventArgs es un portador de datos para eventos de actualización de sentimiento. Esta clase le permite acceder a los datos de sentimiento actualizados para el símbolo correspondiente.

Advertencia

Los objetos de la API de sentimiento del símbolo solo son compatibles con algoritmos .NET 6 y no funcionan en la Nube o en cTrader CLI.

Consejo

Integre los datos de sentimiento del mercado en las estrategias de operación automatizadas para mejorar la toma de decisiones, aumentar la probabilidad de operaciones rentables y fortalecer la gestión de riesgos.

Los objetos de la API de sentimiento del símbolo se pueden utilizar para hacer lo siguiente en los algoritmos:

Característica u operación Ejemplos
Operaciones basadas en el sentimiento Operar con sesgo de sentimiento
Operar contra el sentimiento extremo
Combinar el sentimiento con las velas
Salir en divergencia de sentimiento
Configuración de riesgo adaptativa Filtrar operaciones ruidosas
Escalar operaciones con el sentimiento
Moderar la estrategia según la actividad del mercado
Establecer stop loss según el sentimiento
Monitorización y análisis Crear alertas basadas en el sentimiento
Ejecutar estrategia de mapa de calor de sentimiento
Detectar rupturas a través del sentimiento
Validar señales de indicadores

Nota

Como los datos de sentimiento solo están disponibles en tiempo real, no se pueden utilizar para backtesting u optimización, ya que no hay datos históricos ni almacenados.

Operaciones basadas en el sentimiento

Operar con sesgo de sentimiento

Puede programar un cBot para confirmar el sesgo de tendencia antes de entrar en operaciones o operar solo si el sentimiento coincide con la dirección. Por ejemplo, el cBot ejecuta una compra si al menos el 70% del sentimiento es alcista, y una venta si el 70% es bajista.

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

Operar contra el sentimiento extremo

Considere un cBot que entra en operaciones contra un fuerte consenso de sentimiento. El enfoque de reversión en el algoritmo asume que la multitud a menudo se equivoca en los extremos o cree que cuando una proporción muy alta de operadores está de un lado, el mercado puede estar listo para girar. Por ejemplo, si más del 80% de los operadores están comprando, el cBot ejecuta una venta, esperando una reversión. La misma lógica se aplica cuando la mayoría está vendiendo.

 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 el sentimiento con las velas

Puede configurar un cBot para que actúe solo cuando tanto el sentimiento del mercado como la dirección de la vela coincidan. Si obtiene una vela alcista y el sentimiento está por encima del 60% alcista, el cBot compra. Si la vela es bajista y el sentimiento coincide, el cBot vende. Este enfoque le ayuda a filtrar señales débiles y 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);
    }
}

Salir en divergencia de sentimiento

Un cBot puede ayudarle a salir de operaciones cuando el sentimiento ya no respalda su posición. Por ejemplo, si está manteniendo una compra y el sentimiento cambia a más del 60% bajista, el cBot la cierra. Hace lo mismo para las operaciones de venta cuando el sentimiento se vuelve alcista.

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

Configuración de riesgo adaptativa

Filtrar operaciones ruidosas

Puede desarrollar un cBot que evite operar cuando no hay un sesgo de sentimiento claro. Por ejemplo, si el sentimiento está casi dividido y la diferencia es inferior al 10%, el cBot omite la operación. Esta configuración filtra el ruido y le protege 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 operaciones con el sentimiento

Puede configurar un cBot para ajustar el tamaño de la posición según la fuerza con la que el sentimiento se inclina en una dirección. Por ejemplo, si el sentimiento alcista supera al bajista por un margen amplio, el cBot aumenta el volumen de operación. Si el sentimiento está cerca de neutral, el cBot opera con volúmenes más pequeños.

 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 la estrategia según la actividad del mercado

Su estrategia puede configurarse para pausar las operaciones cuando el sentimiento muestra signos de un mercado saturado. Por ejemplo, si más del 90% de los operadores están comprando o vendiendo, el cBot deja de operar para evitar entrar en una posición justo cuando es probable que el mercado se revierta.

 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
}

Establecer stop loss según el sentimiento

Puede instruir a un cBot para que mida la fuerza del sentimiento y responda con un tamaño de stop loss apropiado. Por ejemplo, cuando el sentimiento alcista supera el 80%, el cBot utiliza un stop más ajustado de 20 pips. Si el sentimiento es menos confiado, el cBot establece un stop más amplio de 50 pips para permitir más margen de maniobra.

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

Monitorización y análisis

Crear alertas basadas en el sentimiento

Considere un cBot que monitorea el sentimiento en tiempo real y le alerta cuando se alcanzan niveles extremos. Por ejemplo, si el sentimiento de compra supera el 90%, el cBot registra o imprime una alerta alcista. Si el sentimiento de venta cruza el mismo umbral, le notifica de un sentimiento extremadamente bajista.

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

Ejecutar estrategia de mapa de calor de sentimiento

Considere un cBot que ejecuta un escaneo de sentimiento en múltiples activos e identifica las mejores oportunidades de operación. Por ejemplo, el cBot recorre todos los símbolos disponibles e imprime los porcentajes de compra y venta, y luego usted puede enfocarse en aquellos con el sentimiento alcista o bajista más 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}");
    }
}

Detectar rupturas a través del sentimiento

Un cBot puede programarse para detectar cambios rápidos en el sentimiento como una señal potencial de ruptura o mayor volatilidad del mercado. Por ejemplo, si el sentimiento de compra salta o cae más de un 15%, el cBot registra el pico como una indicación temprana de un movimiento 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 señales de indicadores

En lugar de confiar únicamente en los indicadores, puede mejorar su estrategia programando su cBot para que actúe solo cuando se alineen tanto las condiciones del indicador como las del sentimiento. Por ejemplo, cuando el RSI muestra sobreventa y el sentimiento es más del 70% alcista, el cBot compra. Si el RSI señala sobrecompra y el sentimiento supera el 70% bajista, el 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);
    }
}