커뮤니티

수정좀 부탁드립니다

프로필 이미지
산수유
2025-11-16 16:55:56
78
글번호 228064
답변완료

구글 제미니에 제일아래의 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

안녕하세요 예스스탁입니다. Input : af(0.02), maxAF(0.2),차이(3.0); var : para(0); para = CSar(af, maxAF); 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); 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 and c < para-차이 Then { ExitShort(); } } 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 and c > para+차이 Then { ExitLong(); } } if T == 1 Then { if RSIv > HIV Then { HIV = RSIv; } if H > HPV Then { RSIv = H; } } if T == -1 Then { if RSIv < LIV Then { LIV = RSIv; } if L < LPV Then { LPV = L; } } 즐거운 하루되세요