シンボルセンチメント
SymbolSentimentインターフェースとSymbolSentimentUpdatedEventArgsクラスを使用すると、API経由でリアルタイムの市場センチメントデータにアクセスできます。 任意のシンボルに対して:
Symbol.Sentiment.BuyPercentageは買い活動の総合パーセンテージを提供し、Symbol.Sentiment.SellPercentageは売り活動の総合パーセンテージを返します。 SymbolSentimentUpdatedEventArgsはセンチメント更新イベントのデータキャリアです。 このクラスを使用すると、対応するシンボルの更新されたセンチメントデータにアクセスできます。
警告
シンボルセンチメントAPIオブジェクトは.NET 6アルゴリズムでのみサポートされ、CloudやcTrader CLIでは機能しません。
ヒント
市場センチメントデータを自動取引戦略に統合して、意思決定を強化し、利益のある取引の可能性を高め、リスク管理を強化します。
シンボルセンチメントAPIオブジェクトは、アルゴリズムで以下のことを行うために使用できます:
| 機能または操作 | 例 |
| センチメント駆動取引 | センチメントバイアスで取引する 極端なセンチメントに対して取引する センチメントとキャンドルを組み合わせる センチメントの乖離で退出する |
| 適応型リスク設定 | ノイジートレードをフィルタリングする センチメントに基づいて取引をスケーリングする 市場活動に基づいて戦略を調整する センチメントに基づいて損切りを設定する |
| モニタリングと分析 | センチメントベースのアラートを作成する センチメントヒートマップ戦略を実行する センチメントを通じてブレイクアウトを特定する インジケーターシグナルを検証する |
注意
センチメントデータはリアルタイムでのみ利用可能であるため、バックテストや最適化には使用できません。履歴データや保存データはありません。
センチメント駆動取引
センチメントバイアスで取引する
cBotをプログラムして、トレンドバイアスを確認してから取引を開始するか、センチメントが方向と一致する場合にのみ取引することができます。 例えば、cBotはセンチメントの70%以上が強気の場合に買いを実行し、70%が弱気の場合に売りを実行します。
| 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はそれをクローズします。 売りポジションの場合も、センチメントが強気に反転した場合に同じことを行います。
| 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は取引を停止し、市場が反転する可能性が高いタイミングでポジションに入るのを避けます。
| 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ピップの広い損切りを設定し、より多くの余裕を持たせます。
| 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は強気のアラートを記録または表示します。 売りセンチメントが同じ閾値を超えた場合、極端な弱気の通知を行います。
| // 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は利用可能なすべての通貨ペアをループし、買いと売りの割合を表示し、最も極端な強気または弱気のセンチメントを持つものに焦点を当てることができます。
| 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);
}
}
|