커뮤니티

수식 수정을 부탁드립니다

프로필 이미지
장보고153
2025-07-14 19:59:50
184
글번호 192496
답변완료
수식 검증에 이상이 없고 시스템에 저장되어 있는데 챠트에 적용하면 수식이 보이지 않고 구현되지도 않습니다. 도움을 부탁드립니다. 늘 건강하세요. Inputs: rsiPeriod(21), bandLength(34), lengthrsipl(7), lengthtradesl(2); // -------------------------------------------------------------------------------- // 변수 선언 (cnt 변수 추가) Var: A_VWAP_1min(0); Var: B_VWAP_1min(0); Var: C_VWAP_1min(0); Var: rsiVal_1min(0); Var: S_RSI_Val_1min(0); Var: F_RSI_Val_1min(0); Var: HH_5min(0), LL_5min(0), CC_5min(0); Var: TF_5min(0); Var: A_VWAP_5min(0); Var: B_VWAP_5min(0); Var: C_VWAP_5min(0); Var: rsiVal_5min(0); Var: S_RSI_Val_5min(0); Var: F_RSI_Val_5min(0); Var: HH_10min(0), LL_10min(0), CC_10min(0); Var: TF_10min(0); Var: A_VWAP_10min(0); Var: B_VWAP_10min(0); Var: C_VWAP_10min(0); Var: rsiVal_10min(0); Var: S_RSI_Val_10min(0); Var: F_RSI_Val_10min(0); Var: cnt(0); // <-- 여기에 cnt 변수 선언 추가 Array : HH_5min_Arr[61](0),LL_5min_Arr[61](0),CC_5min_Arr[61](0); Array : HH_10min_Arr[61](0),LL_10min_Arr[61](0),CC_10min_Arr[61](0); // -------------------------------------------------------------------------------- // 1. 1분봉 데이터 (현재 차트) - 기존 코드의 변수명 그대로 사용 // 1분봉 VWAP 및 RSI 계산 A_VWAP_1min = Average((H+L+C)/3, 5); B_VWAP_1min = Average((H+L+C)/3, 20); C_VWAP_1min = Average((H+L+C)/3, 60); rsiVal_1min = RSI(rsiPeriod); S_RSI_Val_1min = Average(rsiVal_1min, lengthrsipl); F_RSI_Val_1min = Average(rsiVal_1min, lengthtradesl); // -------------------------------------------------------------------------------- // 2. 5분봉 데이터 구성 및 VWAP, RSI 계산 TF_5min = TimeToMinutes(stime)%5; // 5분봉의 시작을 감지 if dayindex == 0 or (TF_5min < TF_5min[1] and stime > stime[1]) Then{ // 5분봉 시작 시 초기화 HH_5min_Arr[0] = H; LL_5min_Arr[0] = L; CC_5min_Arr[0] = C; for cnt = 1 to 60{ // <-- cnt 사용 HH_5min_Arr[cnt] = HH_5min_Arr[cnt-1][1]; LL_5min_Arr[cnt] = LL_5min_Arr[cnt-1][1]; CC_5min_Arr[cnt] = CC_5min_Arr[cnt-1][1]; } } // 5분봉 내에서 고가, 저가 업데이트 (현재 5분봉이 진행 중일 때) if H > HH_5min_Arr[0] Then HH_5min_Arr[0] = H; if L < LL_5min_Arr[0] Then LL_5min_Arr[0] = L; CC_5min_Arr[0] = C; // 현재 5분봉의 종가는 항상 현재 1분봉의 종가 // 이 부분은 예스트레이더의 Average 함수가 다른 시간대의 데이터를 인자로 받아 처리하는지, // 아니면 직접 5분봉 데이터를 기반으로 Average를 구현해야 하는지에 따라 달라집니다. // -------------------------------------------------------------------------------- // 3. 10분봉 데이터 구성 및 VWAP, RSI 계산 TF_10min = TimeToMinutes(stime)%10; // 10분봉의 시작을 감지 if dayindex == 0 or (TF_10min < TF_10min[1] and stime > stime[1]) Then{ // 10분봉 시작 시 초기화 HH_10min_Arr[0] = H; LL_10min_Arr[0] = L; CC_10min_Arr[0] = C; for cnt = 1 to 60{ // <-- cnt 사용 HH_10min_Arr[cnt] = HH_10min_Arr[cnt-1][1]; LL_10min_Arr[cnt] = LL_10min_Arr[cnt-1][1]; CC_10min_Arr[cnt] = CC_10min_Arr[cnt-1][1]; } } // 10분봉 내에서 고가, 저가 업데이트 if H > HH_10min_Arr[0] Then HH_10min_Arr[0] = H; if L < LL_10min_Arr[0] Then LL_10min_Arr[0] = L; CC_10min_Arr[0] = C; // -------------------------------------------------------------------------------- // 4. 최종 매수/매도 조건 (모든 시간대 만족 시) // 이 부분은 위에서 구성된 5분봉, 10분봉의 VWAP 및 RSI 변수들을 사용하여 조건을 만듭니다. // 아직 5분봉, 10분봉의 VWAP 및 RSI 계산 로직이 없으므로 이 부분은 주석 처리 또는 임시 값 사용 필요 // If (A_VWAP_1min > B_VWAP_1min and B_VWAP_1min > C_VWAP_1min and F_RSI_Val_1min > S_RSI_Val_1min) And // (A_VWAP_5min > B_VWAP_5min and B_VWAP_5min > C_VWAP_5min and F_RSI_Val_5min > S_RSI_Val_5min) And // (A_VWAP_10min > B_VWAP_10min and B_VWAP_10min > C_VWAP_10min and F_RSI_Val_10min > S_RSI_Val_10min) Then // Buy("매수"); // If (A_VWAP_1min < B_VWAP_1min and B_VWAP_1min < C_VWAP_1min and F_RSI_Val_1min < S_RSI_Val_1min) And // (A_VWAP_5min < B_VWAP_5min and B_VWAP_5min < C_VWAP_5min and F_RSI_Val_5min < S_RSI_Val_5min) And // (A_VWAP_10min < B_VWAP_10min and B_VWAP_10min < C_VWAP_10min and F_RSI_Val_10min < S_RSI_Val_10min) Then // Sell("매도");
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-07-15 15:00:24

안녕하세요 예스스탁입니다. 1 올리신 수식에 진입식들이 주석처리 되어 있습니다. Buy와 sell이 없는 시스템 수식은 차트에 적용해도 신호가 없으므로 편집기에서는 보여도 차트의 시스탬 목록에 나타나지 않아 적용이 불가합니다. 2 또한 올려주신 수식이 주석을 해제해도 신호가 없습니다. 변수 선언만 되어 있고 계산식이 없어 타주기 값이 모두 0입니다. 아래 타주기 내용을 추가해 드립니다. 모든 주기가 동시 충족이라 신호 자체가 많이 없습니다. 3 Inputs: rsiPeriod(21), bandLength(34), lengthrsipl(7), lengthtradesl(2); input : 타주기분1(5),타주기분2(10); // -------------------------------------------------------------------------------- // 변수 선언 (cnt 변수 추가) Var: A_VWAP_1min(0); Var: B_VWAP_1min(0); Var: C_VWAP_1min(0); Var: rsiVal_1min(0); Var: S_RSI_Val_1min(0); Var: F_RSI_Val_1min(0); Var: HH_5min(0), LL_5min(0), CC_5min(0); Var: TF_5min(0); Var: A_VWAP_5min(0); Var: B_VWAP_5min(0); Var: C_VWAP_5min(0); Var: rsiVal_5min(0); Var: S_RSI_Val_5min(0); Var: F_RSI_Val_5min(0); Var: HH_10min(0), LL_10min(0), CC_10min(0); Var: TF_10min(0); Var: A_VWAP_10min(0); Var: B_VWAP_10min(0); Var: C_VWAP_10min(0); Var: rsiVal_10min(0); Var: S_RSI_Val_10min(0); Var: F_RSI_Val_10min(0); Var: cnt(0); // <-- 여기에 cnt 변수 선언 추가 Array : HH_5min_Arr[100](0),LL_5min_Arr[100](0),CC_5min_Arr[100](0); Array : HH_10min_Arr[100](0),LL_10min_Arr[100](0),CC_10min_Arr[100](0); // -------------------------------------------------------------------------------- // 1. 1분봉 데이터 (현재 차트) - 기존 코드의 변수명 그대로 사용 // 1분봉 VWAP 및 RSI 계산 A_VWAP_1min = ma((H+L+C)/3, 5); B_VWAP_1min = ma((H+L+C)/3, 20); C_VWAP_1min = ma((H+L+C)/3, 60); rsiVal_1min = RSI(rsiPeriod); S_RSI_Val_1min = ma(rsiVal_1min, lengthrsipl); F_RSI_Val_1min = ma(rsiVal_1min, lengthtradesl); // -------------------------------------------------------------------------------- var : S1(0),D1(0),TM(0); var : sum11(0),sum12(0),sum13(0),sum14(0),sum15(0); var : PreUpAvg1(0),UpAvg1(0),downAvg1(0),predownAvg1(0); var : idx1(0),UpSum1(0),downSum1(0),UpAmt1(0),downAmt1(0); Array : RSIv1[100](0); var : sum21(0),sum22(0),sum23(0),sum24(0),sum25(0); var : PreUpAvg2(0),UpAvg2(0),downAvg2(0),predownAvg2(0); var : idx2(0),UpSum2(0),downSum2(0),UpAmt2(0),downAmt2(0); Array : RSIv2[100](0); if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; TF_5min = TM%타주기분1; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 타주기분1 > 0 and TF_5min < TF_5min[1]) or (Bdate == Bdate[1] and 타주기분1 > 0 and TF_5min >= TF_5min[1]+타주기분1) or (Bdate == Bdate[1] and 타주기분1 == 1 and TM > TM[1]) Then { for cnt = 99 downto 1 { HH_5min_Arr[cnt] = HH_5min_Arr[cnt-1]; LL_5min_Arr[cnt] = LL_5min_Arr[cnt-1]; CC_5min_Arr[cnt] = CC_5min_Arr[cnt-1]; RSIv1[cnt] = RSIv1[cnt-1]; } HH_5min_Arr[0] = H; LL_5min_Arr[0] = L; PreUpAvg1 = UpAvg1[1]; preDownAvg1 = DownAvg1[1]; idx1 = idx1 + 1; } if H > HH_5min_Arr[0] Then HH_5min_Arr[0] = H; if L < LL_5min_Arr[0] Then LL_5min_Arr[0] = L; CC_5min_Arr[0] = C; // 현재 5분봉의 종가는 항상 현재 1분봉의 종가 if CC_5min_Arr[60] > 0 Then { sum11 = 0; sum12 = 0; sum13 = 0; For cnt = 0 to 60 { if cnt < 5 Then sum11 = sum11 +(HH_5min_Arr[cnt]+LL_5min_Arr[cnt]+CC_5min_Arr[cnt])/3; if cnt < 20 Then sum12 = sum12 +(HH_5min_Arr[cnt]+LL_5min_Arr[cnt]+CC_5min_Arr[cnt])/3; if cnt < 60 Then sum13 = sum13 +(HH_5min_Arr[cnt]+LL_5min_Arr[cnt]+CC_5min_Arr[cnt])/3; } A_VWAP_5min = sum11/5; B_VWAP_5min = sum12/20; C_VWAP_5min = sum13/60; } If idx1 == rsiPeriod+2 Then { UpSum1 = 0; DownSum1 = 0; For cnt = 0 To rsiPeriod - 1 { UpAmt1 = CC_5min_Arr[cnt] - CC_5min_Arr[cnt+1]; If UpAmt1 >= 0 Then DownAmt1 = 0; Else { DownAmt1 = -UpAmt1; UpAmt1 = 0; } UpSum1 = UpSum1 + UpAmt1; DownSum1 = DownSum1 + DownAmt1; } UpAvg1 = UpSum1 / rsiPeriod; DownAvg1 = DownSum1 / rsiPeriod; } If idx1 > rsiPeriod+2 Then { UpAmt1 = CC_5min_Arr[0] - CC_5min_Arr[1]; If UpAmt1 >= 0 Then DownAmt1 = 0; Else { DownAmt1 = -UpAmt1; UpAmt1 = 0; } UpAvg1 = (PreUpAvg1 * (rsiPeriod - 1) + UpAmt1) / rsiPeriod; DownAvg1 = (preDownAvg1 * (rsiPeriod - 1) + DownAmt1) / rsiPeriod; } If UpAvg1 + DownAvg1 <> 0 Then RSIv1[0] = 100 * UpAvg1 / (UpAvg1 + DownAvg1); Else RSIv1[0] = 0; rsiVal_5min = RSIv1[0]; IF RSIv1[lengthrsipl] > 0 Then { sum14 = 0; for cnt = 0 to lengthrsipl-1 { sum14 = sum14+RSIv1[cnt]; } S_RSI_Val_5min = sum14/lengthrsipl; } IF RSIv1[lengthtradesl] > 0 Then { sum15 = 0; for cnt = 0 to lengthtradesl-1 { sum15 = sum15+RSIv1[cnt]; } F_RSI_Val_5min = sum15/lengthtradesl; } // 3. 10분봉 데이터 구성 및 VWAP, RSI 계산 TF_10min = TM%타주기분2; // 10분봉의 시작을 감지 if Bdate != Bdate[1] or (Bdate == Bdate[1] and 타주기분2 > 0 and TF_10min < TF_10min[1]) or (Bdate == Bdate[1] and 타주기분2 > 0 and TF_10min >= TF_10min[1]+타주기분2) or (Bdate == Bdate[1] and 타주기분2 == 1 and TM > TM[1]) Then { for cnt = 99 downto 1 { HH_10min_Arr[cnt] = HH_10min_Arr[cnt-1]; LL_10min_Arr[cnt] = LL_10min_Arr[cnt-1]; CC_10min_Arr[cnt] = CC_10min_Arr[cnt-1]; RSIv2[cnt] = RSIv2[cnt-1]; } HH_10min_Arr[0] = H; LL_10min_Arr[0] = L; PreUpAvg2 = UpAvg2[1]; preDownAvg2 = DownAvg2[1]; idx2 = idx2 + 1; } // 10분봉 내에서 고가, 저가 업데이트 if H > HH_10min_Arr[0] Then HH_10min_Arr[0] = H; if L < LL_10min_Arr[0] Then LL_10min_Arr[0] = L; CC_10min_Arr[0] = C; if CC_10min_Arr[60] > 0 Then { sum21 = 0; sum22 = 0; sum23 = 0; For cnt = 0 to 60 { if cnt < 5 Then sum21 = sum21 +(HH_10min_Arr[cnt]+LL_10min_Arr[cnt]+CC_10min_Arr[cnt])/3; if cnt < 20 Then sum22 = sum22 +(HH_10min_Arr[cnt]+LL_10min_Arr[cnt]+CC_10min_Arr[cnt])/3; if cnt < 60 Then sum23 = sum23 +(HH_10min_Arr[cnt]+LL_10min_Arr[cnt]+CC_10min_Arr[cnt])/3; } A_VWAP_10min = sum21/5; B_VWAP_10min = sum22/20; C_VWAP_10min = sum23/60; } If idx2 == rsiPeriod+2 Then { UpSum2 = 0; DownSum2 = 0; For cnt = 0 To rsiPeriod - 1 { UpAmt2 = CC_10min_Arr[cnt] - CC_10min_Arr[cnt+1]; If UpAmt2 >= 0 Then DownAmt2 = 0; Else { DownAmt2 = -UpAmt2; UpAmt2 = 0; } UpSum2 = UpSum2 + UpAmt2; DownSum2 = DownSum2 + DownAmt2; } UpAvg2 = UpSum2 / rsiPeriod; DownAvg2 = DownSum2 / rsiPeriod; } If idx2 > rsiPeriod+2 Then { UpAmt2 = CC_10min_Arr[0] - CC_10min_Arr[1]; If UpAmt2 >= 0 Then DownAmt2 = 0; Else { DownAmt2 = -UpAmt2; UpAmt2 = 0; } UpAvg2 = (PreUpAvg2 * (rsiPeriod - 1) + UpAmt2) / rsiPeriod; DownAvg2 = (preDownAvg2 * (rsiPeriod - 1) + DownAmt2) / rsiPeriod; } If UpAvg2 + DownAvg2 <> 0 Then RSIv2[0] = 100 * UpAvg2 / (UpAvg2 + DownAvg2); Else RSIv2[0] = 0; rsiVal_10min = RSIv2[0]; IF RSIv2[lengthrsipl] > 0 Then { sum24 = 0; for cnt = 0 to lengthrsipl-1 { sum24 = sum24+RSIv2[cnt]; } S_RSI_Val_10min = sum24/lengthrsipl; } IF RSIv2[lengthtradesl] > 0 Then { sum25 = 0; for cnt = 0 to lengthtradesl-1 { sum25 = sum25+RSIv2[cnt]; } F_RSI_Val_10min = sum25/lengthtradesl; } // -------------------------------------------------------------------------------- // 4. 최종 매수/매도 조건 (모든 시간대 만족 시) // 이 부분은 위에서 구성된 5분봉, 10분봉의 VWAP 및 RSI 변수들을 사용하여 조건을 만듭니다. // 아직 5분봉, 10분봉의 VWAP 및 RSI 계산 로직이 없으므로 이 부분은 주석 처리 또는 임시 값 사용 필요 If (A_VWAP_1min > B_VWAP_1min and B_VWAP_1min > C_VWAP_1min and F_RSI_Val_1min > S_RSI_Val_1min) And (A_VWAP_5min > B_VWAP_5min and B_VWAP_5min > C_VWAP_5min and F_RSI_Val_5min > S_RSI_Val_5min) And (A_VWAP_10min > B_VWAP_10min and B_VWAP_10min > C_VWAP_10min and F_RSI_Val_10min > S_RSI_Val_10min) Then Buy("매수"); If (A_VWAP_1min < B_VWAP_1min and B_VWAP_1min < C_VWAP_1min and F_RSI_Val_1min < S_RSI_Val_1min) And (A_VWAP_5min < B_VWAP_5min and B_VWAP_5min < C_VWAP_5min and F_RSI_Val_5min < S_RSI_Val_5min) And (A_VWAP_10min < B_VWAP_10min and B_VWAP_10min < C_VWAP_10min and F_RSI_Val_10min < S_RSI_Val_10min) Then Sell("매도"); } 즐거운 하루되세요 > 장보고153 님이 쓴 글입니다. > 제목 : 수식 수정을 부탁드립니다 > 수식 검증에 이상이 없고 시스템에 저장되어 있는데 챠트에 적용하면 수식이 보이지 않고 구현되지도 않습니다. 도움을 부탁드립니다. 늘 건강하세요. Inputs: rsiPeriod(21), bandLength(34), lengthrsipl(7), lengthtradesl(2); // -------------------------------------------------------------------------------- // 변수 선언 (cnt 변수 추가) Var: A_VWAP_1min(0); Var: B_VWAP_1min(0); Var: C_VWAP_1min(0); Var: rsiVal_1min(0); Var: S_RSI_Val_1min(0); Var: F_RSI_Val_1min(0); Var: HH_5min(0), LL_5min(0), CC_5min(0); Var: TF_5min(0); Var: A_VWAP_5min(0); Var: B_VWAP_5min(0); Var: C_VWAP_5min(0); Var: rsiVal_5min(0); Var: S_RSI_Val_5min(0); Var: F_RSI_Val_5min(0); Var: HH_10min(0), LL_10min(0), CC_10min(0); Var: TF_10min(0); Var: A_VWAP_10min(0); Var: B_VWAP_10min(0); Var: C_VWAP_10min(0); Var: rsiVal_10min(0); Var: S_RSI_Val_10min(0); Var: F_RSI_Val_10min(0); Var: cnt(0); // <-- 여기에 cnt 변수 선언 추가 Array : HH_5min_Arr[61](0),LL_5min_Arr[61](0),CC_5min_Arr[61](0); Array : HH_10min_Arr[61](0),LL_10min_Arr[61](0),CC_10min_Arr[61](0); // -------------------------------------------------------------------------------- // 1. 1분봉 데이터 (현재 차트) - 기존 코드의 변수명 그대로 사용 // 1분봉 VWAP 및 RSI 계산 A_VWAP_1min = Average((H+L+C)/3, 5); B_VWAP_1min = Average((H+L+C)/3, 20); C_VWAP_1min = Average((H+L+C)/3, 60); rsiVal_1min = RSI(rsiPeriod); S_RSI_Val_1min = Average(rsiVal_1min, lengthrsipl); F_RSI_Val_1min = Average(rsiVal_1min, lengthtradesl); // -------------------------------------------------------------------------------- // 2. 5분봉 데이터 구성 및 VWAP, RSI 계산 TF_5min = TimeToMinutes(stime)%5; // 5분봉의 시작을 감지 if dayindex == 0 or (TF_5min < TF_5min[1] and stime > stime[1]) Then{ // 5분봉 시작 시 초기화 HH_5min_Arr[0] = H; LL_5min_Arr[0] = L; CC_5min_Arr[0] = C; for cnt = 1 to 60{ // <-- cnt 사용 HH_5min_Arr[cnt] = HH_5min_Arr[cnt-1][1]; LL_5min_Arr[cnt] = LL_5min_Arr[cnt-1][1]; CC_5min_Arr[cnt] = CC_5min_Arr[cnt-1][1]; } } // 5분봉 내에서 고가, 저가 업데이트 (현재 5분봉이 진행 중일 때) if H > HH_5min_Arr[0] Then HH_5min_Arr[0] = H; if L < LL_5min_Arr[0] Then LL_5min_Arr[0] = L; CC_5min_Arr[0] = C; // 현재 5분봉의 종가는 항상 현재 1분봉의 종가 // 이 부분은 예스트레이더의 Average 함수가 다른 시간대의 데이터를 인자로 받아 처리하는지, // 아니면 직접 5분봉 데이터를 기반으로 Average를 구현해야 하는지에 따라 달라집니다. // -------------------------------------------------------------------------------- // 3. 10분봉 데이터 구성 및 VWAP, RSI 계산 TF_10min = TimeToMinutes(stime)%10; // 10분봉의 시작을 감지 if dayindex == 0 or (TF_10min < TF_10min[1] and stime > stime[1]) Then{ // 10분봉 시작 시 초기화 HH_10min_Arr[0] = H; LL_10min_Arr[0] = L; CC_10min_Arr[0] = C; for cnt = 1 to 60{ // <-- cnt 사용 HH_10min_Arr[cnt] = HH_10min_Arr[cnt-1][1]; LL_10min_Arr[cnt] = LL_10min_Arr[cnt-1][1]; CC_10min_Arr[cnt] = CC_10min_Arr[cnt-1][1]; } } // 10분봉 내에서 고가, 저가 업데이트 if H > HH_10min_Arr[0] Then HH_10min_Arr[0] = H; if L < LL_10min_Arr[0] Then LL_10min_Arr[0] = L; CC_10min_Arr[0] = C; // -------------------------------------------------------------------------------- // 4. 최종 매수/매도 조건 (모든 시간대 만족 시) // 이 부분은 위에서 구성된 5분봉, 10분봉의 VWAP 및 RSI 변수들을 사용하여 조건을 만듭니다. // 아직 5분봉, 10분봉의 VWAP 및 RSI 계산 로직이 없으므로 이 부분은 주석 처리 또는 임시 값 사용 필요 // If (A_VWAP_1min > B_VWAP_1min and B_VWAP_1min > C_VWAP_1min and F_RSI_Val_1min > S_RSI_Val_1min) And // (A_VWAP_5min > B_VWAP_5min and B_VWAP_5min > C_VWAP_5min and F_RSI_Val_5min > S_RSI_Val_5min) And // (A_VWAP_10min > B_VWAP_10min and B_VWAP_10min > C_VWAP_10min and F_RSI_Val_10min > S_RSI_Val_10min) Then // Buy("매수"); // If (A_VWAP_1min < B_VWAP_1min and B_VWAP_1min < C_VWAP_1min and F_RSI_Val_1min < S_RSI_Val_1min) And // (A_VWAP_5min < B_VWAP_5min and B_VWAP_5min < C_VWAP_5min and F_RSI_Val_5min < S_RSI_Val_5min) And // (A_VWAP_10min < B_VWAP_10min and B_VWAP_10min < C_VWAP_10min and F_RSI_Val_10min < S_RSI_Val_10min) Then // Sell("매도");