커뮤니티
시스템
Inputs: ATRlen(14), ADXlen(14), RSIlen(14), ADXthWeak(20);
Vars: ATRv(0), ADXv(0), RSIv(0), HTF_MA_Short(0),
HTF_MA_Long(0), HTF_ADX(0), HTF_RangeMode(False);
/*-----------------------------------------------------------------------
① 보조지표 계산
-----------------------------------------------------------------------*/
ATRv = Average(TrueRange(), ATRlen);
ADXv = ADX(ADXlen);
RSIv = RSI(Close, RSIlen);
/*-----------------------------------------------------------------------
② 상위 타임프레임 필터 (비추세 감지)
-----------------------------------------------------------------------*/
If DataNum > 1 Then
Begin
HTF_MA_Short = AverageFC(Close of Data2, 20);
HTF_MA_Long = AverageFC(Close of Data2, 50);
HTF_ADX = ADX(ADXlen) of Data2;
{ 비추세 조건: MA20과 MA50 차이 작고 ADX < 20 }
HTF_RangeMode = (AbsValue(HTF_MA_Short - HTF_MA_Long) < Average(TrueRange of Data2, 20)) and
(HTF_ADX < ADXthWeak);
End;
/*-----------------------------------------------------------------------
③ 진입 조건 (횡보장 전용)
-----------------------------------------------------------------------*/
If HTF_RangeMode Then
Begin
{ RSI 과매도 -> 매수 }
If RSIv < 30 Then
Buy("Range_Buy") Next Bar at Market;
{ RSI 과매수 -> 매도 }
If RSIv > 70 Then
SellShort("Range_Sell") Next Bar at Market;
End;
/*-----------------------------------------------------------------------
④ 청산 (단기 목표 또는 손절)
-----------------------------------------------------------------------*/
If MarketPosition = 1 Then
Begin
ExitLong("TakeProfit_Long") At Limit EntryPrice + ATRv * 1.0;
ExitLong("Stop_Long") AtStop EntryPrice - ATRv * 1.5;
End;
If MarketPosition = -1 Then
Begin
ExitShort("TakeProfit_Short") At Limit EntryPrice - ATRv * 1.0;
ExitShort("Stop_Short") AtStop EntryPrice + ATRv * 1.5;
End;
답변 1
예스스탁 예스스탁 답변
2025-10-22 15:36:52