跳转至

交易品种情绪

SymbolSentiment 接口和 SymbolSentimentUpdatedEventArgs 类允许您通过 API 访问实时市场情绪数据。 对于任何给定的交易品种:

  • Symbol.Sentiment.BuyPercentage 提供买入活动的总体百分比,而 Symbol.Sentiment.SellPercentage 返回卖出活动的总体百分比。
  • SymbolSentimentUpdatedEventArgs 是情绪更新事件的数据载体。 此类允许您访问相应交易品种的更新情绪数据。

警告

交易品种情绪 API 对象仅在 .NET 6 算法中受支持,不适用于 Cloud 或 cTrader CLI。

提示

将市场情绪数据整合到自动交易策略中,以增强决策能力,提高盈利交易的可能性,并加强风险管理。

交易品种情绪 API 对象可用于在算法中执行以下操作:

功能或操作 示例
情绪驱动交易 跟随情绪偏向交易
逆极端情绪交易
结合情绪与蜡烛图
情绪背离时退出
自适应风险配置 过滤噪音交易
根据情绪调整交易规模
根据市场活动调节策略
根据情绪设置止损
监控和分析 创建基于情绪的提醒
运行情绪热图策略
通过情绪发现突破
验证指标信号

注意

由于情绪数据仅在实时可用,因此无法用于回测或优化,因为没有历史或存储数据。

情绪驱动交易

跟随情绪偏向交易

您可以编程 cBot 在进入交易前确认趋势偏向,或仅在情绪与方向匹配时交易。 例如,当至少 70% 的情绪看涨时,cBot 执行买入;当 70% 看跌时,执行卖出。

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

逆极端情绪交易

考虑一个逆强烈情绪共识进行交易的 cBot。 算法中的反转方法假设群众在极端情况下通常是错误的,或者认为当很高比例的交易者站在一边时,市场可能准备转向。 例如,如果超过 80% 的交易者在买入,cBot 执行卖出,预期会出现反转。 当大多数人在卖出时,同样的逻辑也适用。

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

结合情绪与蜡烛图

您可以配置 cBot 仅在市场情绪和蜡烛图方向都一致时采取行动。 如果出现看涨蜡烛,且情绪超过 60% 看涨,cBot 买入。 如果蜡烛图看跌且情绪一致,cBot 卖出。 这种方法有助于您过滤掉弱信号并避免错误入场。

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

基于情绪分歧退出交易

cBot 可以帮助您在情绪不再支持您的头寸时退出交易。 例如,如果您持有买入头寸,而情绪转为超过 60% 看跌,cBot 就会平仓。 当情绪转为看涨时,它也会对卖出交易执行相同操作。

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

自适应风险配置

过滤掉噪音交易

您可以开发一个 cBot,在没有明确情绪偏向时避免交易。 例如,如果情绪几乎平分且差异小于 10%,cBot 就会跳过该交易。 这种设置可以过滤掉噪音,保护您免受犹豫不决的市场影响。

 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
}

根据情绪调整交易规模

您可以设置 cBot 根据情绪倾向的强度来调整头寸规模。 例如,如果看涨情绪大幅超过看跌情绪,cBot 就会增加交易量。 如果情绪接近中性,cBot 就会减小交易规模。

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

根据市场活动调节策略

您的策略可以设置为在情绪显示市场拥挤迹象时暂停交易。 例如,如果超过 90% 的交易者都在买入或卖出,cBot 就会停止交易,以避免在市场可能即将反转时建立头寸。

 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
}

根据情绪设置止损

您可以指示 cBot 测量情绪强度并做出适当的止损设置。 例如,当看涨情绪超过 80% 时,cBot 使用更紧的 20 点止损。 如果情绪不太确定,cBot 会设置更宽的 50 点止损,以留出更多余地。

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

监控和分析

创建基于情绪的警报

考虑使用一个实时监控情绪并在达到极端水平时发出警报的 cBot。 例如,如果买入情绪超过 90%,cBot 会记录或打印看涨警报。 如果卖出情绪超过相同阈值,它会通知您极端看跌情况。

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

运行情绪热图策略

考虑使用一个 cBot 对多个资产进行情绪扫描并识别最佳交易机会。 例如,cBot 遍历所有可用交易品种并打印买入和卖出百分比,然后您可以专注于那些具有最极端看涨或看跌情绪的交易品种。

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

通过情绪发现突破

cBot 可以被编程为检测情绪的快速变化,作为潜在突破或市场波动加剧的信号。 例如,如果买入情绪跳升或下降超过 15%,cBot 会记录这一飙升,作为波动行情的早期指示。

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

验证指标信号

您可以通过编程 cBot 只在指标和情绪条件都符合时采取行动,来增强您的策略,而不是仅仅依赖指标。 例如,当 RSI 显示超卖且情绪超过 70% 看涨时,cBot 买入。 如果 RSI 显示超买且情绪超过 70% 看跌,cBot 卖出。

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