커뮤니티

수정 부탁드립니다.

프로필 이미지
산수유
2025-12-11 10:51:36
59
글번호 228874
답변완료

참조차트는 일봉이고 기본차트는 60분봉입니다.

1..일봉상 최근 3일 동안

RSI(3) 값 중 최저값이 10 이하였던 적이 있다.

그리고 당일봉상 RSI(3) 값이 20 이상으로 회복하였다. 이조건을 충족하면 1.0을 부여한다.

2..일봉상 macd 오실레이터 값이 os[2] < os[1] < os[0] (3일연속상승)하면 0.5점을 부여한다.


1과2조건을 만족하여 1.5점 부여하면 국면을 R=2+전환하고 , 60분차트상 macd 오실레이터가 양봉전환하면 1계약 매수진입한다. 식 좀 부탁드립니다. 항상 감사드립니다.

시스템
답변 2
프로필 이미지

예스스탁

2025-12-12 12:49:06

관리자님에 의해 삭제된 답변입니다.
프로필 이미지

예스스탁 예스스탁 답변

2025-12-12 13:12:49

안녕하세요 예스스탁입니다. 1 랭귀지는 완성된 봉의 값만 사용이 가능합니다. 참조데이터가 일봉이면 당일봉값을 사용이 불가합니다. 당일 값을 사용하기 위해서는 수식으로 기본종목데이터를 이용해서 일봉 RSI와 MACD 오실레이터를 계산해서 해야 합니다. 참조데이터 사용해서는 해결이 되지 않습니다. 2 올리신 내용에서 점수나 R값이 언제 다른 값으로 초기화 되는지 알수 없습니다. 해당 부분은 직접 처리하시기 바랍니다.
사용하는 지표들이 과거봉수에 따라 현재값이 다릅니다.
차트에 최대한 많은 봉을 조회하고 적용하셔여 합니다.
3 Input : Length(3); Input : short(12),long(26),signal(9); var : cnt(0),SigSum(0),count2(0),RSIsig(0); Var : Counter(0), DownAmt(0), UpAmt(0), UpSum(0), DownSum(0), UpAvg(0), DownAvg(0); var : idx(0), PreUpAvg(0), preDownAvg(0),sum(0),sig(0); Array : C1[100](0),RSIV[100](Nan); var : Didx(0),dEP1(0),dEP2(0),dEP3(0); Var : dJISU1(0),dJISU2(0),PredJISU1(0),PredJISU2(0); var : dMACDv(0),dMACDs(0),PredMACDv(0),PredMACDs(0); var : MACDo(0),R(0); Array : dMACDo[100](Nan); dEp1 = 2/(short+1); dEp2 = 2/(long+1); dEp3 = 2/(signal+1); if Bdate != Bdate[1] Then { for cnt = 99 DownTo 1 { C1[cnt] = C1[cnt-1]; RSIV[cnt] = RSIV[cnt-1]; dMACDo[cnt] = dMACDo[cnt-1]; } PreUpAvg = UpAvg[1]; preDownAvg = DownAvg[1]; PredJISU1 = dJISU1[1]; PredJISU2 = dJISU2[1]; PredMACDv = dMACDv[1]; PredMACDs = dMACDs[1]; idx = idx + 1; } C1[0] = C; If idx == Length+2 Then { UpSum = 0; DownSum = 0; For Counter = 0 To Length - 1 { UpAmt = C1[Counter] - C1[Counter+1]; If UpAmt >= 0 Then DownAmt = 0; Else { DownAmt = -UpAmt; UpAmt = 0; } UpSum = UpSum + UpAmt; DownSum = DownSum + DownAmt; } UpAvg = UpSum / Length; DownAvg = DownSum / Length; } If idx > Length+2 Then { UpAmt = C1[0] - C1[1]; If UpAmt >= 0 Then DownAmt = 0; Else { DownAmt = -UpAmt; UpAmt = 0; } UpAvg = (PreUpAvg * (Length - 1) + UpAmt) / Length; DownAvg = (preDownAvg * (Length - 1) + DownAmt) / Length; } If UpAvg + DownAvg <> 0 Then RSIv[0] = 100 * UpAvg / (UpAvg + DownAvg); Else RSIv[0] = 0; if idx <= 1 then { dJISU1 = C; dJISU2 = C; dMACDV = dJISU1-dJISU2; dMACDS = dMACDV; dMACDO[0] = dMACDV-dMACDS; } else { dJISU1 = C * dEP1 + PredJISU1 * (1-dEP1); dJISU2 = C * dEP2 + PredJISU2 * (1-dEP2); dMACDV = dJISU1-dJISU2; dMACDS = dMACDV * dEP3 + dMACDS[1] * (1-dEP3); dMACDO[0] = dMACDV-dMACDS; } var1 = 0; if RSIv[0] >= 20 and min(RSIv[1],RSIv[2],RSIv[3]) <= 10 Then var1 = 1; if dMACDO[2] < dMACDO[1] and dMACDO[1] < dMACDO[0] Then var1 = 0.5; if var1 == 1.5 Then R = 2; Else R = 0; MACDO = MACD_OSC(short,long,signal); if R == 2 and CrossUp(MACDo,0) Then Buy(); 즐거운 하루되세요