커뮤니티
수정좀 부탁드립니다
구글 제미니에 제일아래의 rsi 다이버전스를 이용하여 mscd오실레이터 다이버전스와 파라볼릭과 종가의 차이가 얼마이상 차이나면 익절한다를 구현해 달라고 했더니 아래와 같이 만들어 준겁니다. 수고스러우시겠지만 파라볼릭과 종가의 차이가 얼마이상이면서 오실레이터 다이버전스 발생시 종가에 청산한다 식 좀 부탁드립니다.
Input : af(0.02), maxAF(0.2); # PSAR 설정
Input : MAX_PSAR_GAP_ATR(3.0); # PSAR과 종가 사이 허용 최대 이격 폭 (ATR 기준)
var : PSAR(0), ATR(0), MACD_OSC(0);
# 1. 지표 값 계산 및 정의
PSAR = CSar(af, maxAF);
ATR = ATR(14);
MACD_OSC = MACD_Osc(12, 26, 9);
C = Close;
# 2. 리스크/불안정 조건 (PSAR과 종가차 활용)
# : PSAR이 종가보다 위에 있지만, 그 차이가 MAX_PSAR_GAP_ATR 배의 ATR을 초과할 때
# (혹은 C가 PSAR을 넘어섰을 때)
PSAR_GAP_RISK = (PSAR > C) AND ((PSAR - C) > (ATR * MAX_PSAR_GAP_ATR));
# OR PSAR이 이미 반전되었을 때 (가장 확실한 손절 신호)
PSAR_REVERSAL = (C < PSAR);
# 3. 다이버전스/모멘텀 조건
# : 강세 다이버전스 확인 및 오실레이터 막대 감속
BULLISH_DIVERGENCE_CONFIRMED = 1; # 외부 다이버전스 판별식 결과 가정
MOMENTUM_DECELERATION_EXIT = (MACD_OSC < 0) AND (MACD_OSC > Ref(MACD_OSC, 1));
# 4. 최종 결합 청산 명령 (청산은 총 2가지 시나리오로 발생)
IF (Positions_Short > 0) THEN
# ----------------------------------------------------
# 시나리오 A: PSAR/종가차 리스크 + 다이버전스 익절 (하나의 결합된 조건)
# ----------------------------------------------------
IF ((PSAR_GAP_RISK) AND BULLISH_DIVERGENCE_CONFIRMED AND MOMENTUM_DECELERATION_EXIT) THEN
# 위험한 이격 + 다이버전스/감속 신호 발생 시 청산
ExitShort("COMPOSITE_EXIT");
# ----------------------------------------------------
# 시나리오 B: PSAR이 반전되어 버린 경우 (최종 손실/익절 확정)
# ----------------------------------------------------
ELSE IF (PSAR_REVERSAL) THEN
# PSAR이 추세 반전을 확정하면 청산 (다이버전스 조건과 무관하게 발동)
ExitShort("PSAR_STOP");
END IF
END IF
아래는 이전에 rsi 다이버전스 신호를 만들어 주신겁니다.
input : P(9);
var : RSIV(0),T(0),TL1(0),TL2(0);
var : HIV(0),HIV1(0),HPV(0),HPV1(0);
var : LIV(0),LIV1(0),LPV(0),LPV1(0);
RSIv = RSI(P);
Plot1(RSIV, "RSI");
PlotBaseLine1(30, "기준선 30");
PlotBaseLine2(70, "기준선 70");
if RSIV > RSIV[1] Then
T = 1;
if rSIV < RSIV[1] Then
T = -1;
if T == 1 and T != T[1] Then
{
HIV = RSIv;
HIV1 = HIV[1];
HPV = H;
HPV1 = HPV[1];
if LIV > LIV1 and LPV < LPV1 and LPV1 > 0 Then
{
TL1 = TL_New(sDate,sTime,0,sDate,sTime,99999999);
TL2 = TL_New_Self(sDate,sTime,0,sDate,sTime,99999999);
TL_SetColor(TL1,RED);
TL_SetColor(TL2,RED);
}
}
if T == -1 and T != T[1] Then
{
LIV = RSIv;
LIV1 = LIV[1];
LPV = L;
LPV1 = LPV[1];
if HIV < HIV1 and HPV > HPV1 and HPV1 > 0 Then
{
TL1 = TL_New(sDate,sTime,0,sDate,sTime,99999999);
TL2 = TL_New_Self(sDate,sTime,0,sDate,sTime,99999999);
TL_SetColor(TL1,BLUE);
TL_SetColor(TL2,BLUE);
}
}
#RSI 상승구간 RSI최고와 가격최고 계산
if T == 1 Then
{
if RSIv > HIV Then
{
HIV = RSIv;
}
if H > HPV Then
{
RSIv = H;
}
}
#RSI 하락구간 RSI최저와 가격최저 계산
if T == -1 Then
{
if RSIv < LIV Then
{
LIV = RSIv;
}
if L < LPV Then
{
LPV = L;
}
}
답변 1
예스스탁 예스스탁 답변
2025-11-17 14:26:38