커뮤니티

시스템

프로필 이미지
달마7
2025-10-22 11:14:25
69
글번호 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; 즐거운 하루되세요