커뮤니티
시스템
2025-10-22 11:14:25
164
글번호 227140
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
안녕하세요
예스스탁입니다.
올리신 수식은 차트에 참조데이터(data2)가 있어야 합니다.
차트왼쪽 상단의 종목선택버튼 중 왼쪽이 기본종목, 오른쪽이 참조데이터를 차트에 추가하는 버튼입니다.
Inputs: ATRlen(14), ADXlen(14), RSIlen(14), ADXthWeak(20);
var : DataNum(2);
Vars: ATRv(0), ADXv(0), RSIv(0), HTF_MA_Short(0),
HTF_MA_Long(0), HTF_ADX(0), HTF_RangeMode(False);
ATRv = data1(ma(TrueRange(), ATRlen));
ADXv = data1(ADX(ADXlen));
RSIv = data1(RSI(RSIlen));
If DataNum > 1 Then
Begin
HTF_MA_Short = data2(ma(Close, 20));
HTF_MA_Long = data2(ma(Close, 50));
HTF_ADX = data2(ADX(ADXlen));
HTF_RangeMode = (AbsValue(HTF_MA_Short - HTF_MA_Long) < data2(ma(TrueRange, 20)) and
(HTF_ADX < ADXthWeak));
End;
/*-----------------------------------------------------------------------
③ 진입 조건 (횡보장 전용)
-----------------------------------------------------------------------*/
If HTF_RangeMode Then
Begin
If RSIv < 30 Then
Buy("Range_Buy",AtMarket);
If RSIv > 70 Then
Sell("Range_Sell",AtMarket);
End;
/*-----------------------------------------------------------------------
④ 청산 (단기 목표 또는 손절)
-----------------------------------------------------------------------*/
If MarketPosition == 1 Then
Begin
ExitLong("TakeProfit_Long", AtLimit, EntryPrice + ATRv * 1.0);
ExitLong("Stop_Long", AtStop, EntryPrice - ATRv * 1.5);
End;
If MarketPosition == -1 Then
Begin
ExitShort("TakeProfit_Short", AtLimit, EntryPrice - ATRv * 1.0);
ExitShort("Stop_Short", AtStop, EntryPrice + ATRv * 1.5);
End;
즐거운 하루되세요
다음글
이전글