심볼 심리
SymbolSentiment 인터페이스와 SymbolSentimentUpdatedEventArgs 클래스를 통해 API로 실시간 시장 심리 데이터에 접근할 수 있습니다. 주어진 심볼에 대해:
Symbol.Sentiment.BuyPercentage는 매수 활동의 총합 비율을 제공하며, Symbol.Sentiment.SellPercentage는 매도 활동의 총합 비율을 반환합니다. SymbolSentimentUpdatedEventArgs는 심리 업데이트 이벤트를 위한 데이터 캐리어입니다. 이 클래스를 통해 해당 심볼에 대한 업데이트된 심리 데이터에 접근할 수 있습니다.
경고
심볼 심리 API 객체는 .NET 6 알고리즘에서만 지원되며 클라우드 또는 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);
}
}
|