커뮤니티

신호 발생하지 않아 다시 문의 드립니다.

프로필 이미지
선물대장
2023-04-03 11:40:52
1247
글번호 167842
답변완료
며칠전에 알려주신 로직입니다. 신호가 발생하지 않는데 다시 확인부탁드립니다. 제가 원하는 것은 60분봉을 추세 기준으로 하여 20이평 120이평 정배열이고 60분봉에서 볼린져밴드 상단선 돌파 중이거나 또는 상단선 위에 있을 때 하위봉(예로 1분봉이나 2분봉 등) 차트에서 볼린져 상선 돌파 매수로 진입하고자 합니다. 60분봉에서 20이평 120이평 역배열이고 60분봉에서 볼린져밴드 하단선 아래로 돌파 또는 하단선 아래 있을 때 하위봉(예로 1분봉이나 2분봉 등) 차트에서 볼린져 하선 돌파 매도로 진입하고자 합니다. 감사합니다^.^ input : 타주기분(60),BBP(20),Dv(2),P1(20),P2(120); var : S1(0),D1(0),TM(0),TF(0); var : cnt(0),SumSqrt(0),Stdv(0); var : sum(0),BBmd(0),Bbup(0),BBdn(0); var : sum1(0),mav1(0),sum2(0),mav2(0); Array : CC[200](0); #기본차트 볼밴 var1 = BollBandUp(20,2); Var2 = BollBandDown(20,2); 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 = TM%타주기분; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or (Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or (Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then { for cnt = 199 downto 1 { CC[cnt] = CC[cnt-1]; } } CC[0] = C; #타분봉 볼밴계산 if CC[BBP-1] > 0 then { sum = 0; for cnt = 0 to BBP-1 { sum = sum + CC[cnt]; } BBmd = sum/BBP; SumSqrt = 0; For cnt = 0 To BBP - 1 { SumSqrt = SumSqrt + (CC[cnt] - BBmd)^2; } Stdv = SquareRoot(SumSqrt / BBP); BBup = BBmd + (Dv * Stdv); BBdn = BBmd - (Dv * Stdv); } #타분봉 P1이평 계산 if CC[P1-1] > 0 Then { sum1 = 0; For cnt = 0 to P1-1 { sum1 = sum1 + CC[cnt]; } mav1 = sum1/P1; } #타분봉 P2이평 계산 if CC[P2-1] > 0 Then { sum2 = 0; For cnt = 0 to P1-1 { sum2 = sum2 + CC[cnt]; } mav2 = sum2/P1; } //타분봉 지표값들 계산이 된 상태에서 if mav1 > 0 and mav2 > 0 and BBmd > 0 Then { if mav1 > mav2 and C > BBup Then { if CrossUp(c,var1) Then Buy(); } if CrossDown(c,var1) Then ExitLong(); if mav1 < mav2 and C < BBdn Then { if CrossDown(c,var2) Then Sell(); } if CrossUp(C,Var2) Then ExitShort(); } }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-04-03 15:56:17

안녕하세요 예스스탁입니다. 장기이평의 기간값이 잘못되어 수정했습니다. 전략실행차트에서 최대한 봉 많이 조회해서 적용하시기 바랍니다. input : tenSMAlen(10),fiftySMAlen(50),PPlen(10),PPVolLen(5); var : upday(False),VolUpDay(False),tenSMA(0),fiftySMA(0),tx(0); var : PPvol1(0),PPvol2(0),cnt(0),MAcross(False),PocketPivot1(False),PocketPivot2(False); UpDay = close > open and close[0] > close[1]; VolUpDay = close[0] > close[1]; tenSMA = ma(close,tenSMAlen); fiftySMA = ma(close,fiftySMAlen); PPvol1 = 0; for cnt = 1 to PPlen { if volume[0] > volume[cnt] Then PPvol1 = PPvol1+ 1; else PPvol1 = 0; } PPvol2 = 0; for cnt = 1 to PPVolLen { if volume[0] > volume[cnt] Then PPvol2 = PPvol2+1; else PPvol2 = 0; } MAcross = open < tenSMA and close > tenSMA or open < fiftySMA and close > fiftySMA or close[1] < tenSMA and close[0] > tenSMA or close[1] < fiftySMA and close[0] > fiftySMA; PocketPivot1 = PPvol1 == PPlen and UpDay and MAcross; PocketPivot2 = PPvol2 == PPVolLen and VolUpDay; if PocketPivot1 == true Then { tx = text_new(sDate,sTime,L,"▲"); Text_SetStyle(tx,2,0); Text_SetColor(tx,rgb(51,153,255)); Text_SetSize(tx,20); } if PocketPivot1 == False and PocketPivot2 == true Then { tx = text_new(sDate,sTime,H,"▼"); Text_SetStyle(tx,2,1); Text_SetColor(tx,rgb(225,225,0)); Text_SetSize(tx,20); } 즐거운 하루되세요 > 선물대장 님이 쓴 글입니다. > 제목 : 신호 발생하지 않아 다시 문의 드립니다. > 며칠전에 알려주신 로직입니다. 신호가 발생하지 않는데 다시 확인부탁드립니다. 제가 원하는 것은 60분봉을 추세 기준으로 하여 20이평 120이평 정배열이고 60분봉에서 볼린져밴드 상단선 돌파 중이거나 또는 상단선 위에 있을 때 하위봉(예로 1분봉이나 2분봉 등) 차트에서 볼린져 상선 돌파 매수로 진입하고자 합니다. 60분봉에서 20이평 120이평 역배열이고 60분봉에서 볼린져밴드 하단선 아래로 돌파 또는 하단선 아래 있을 때 하위봉(예로 1분봉이나 2분봉 등) 차트에서 볼린져 하선 돌파 매도로 진입하고자 합니다. 감사합니다^.^ input : 타주기분(60),BBP(20),Dv(2),P1(20),P2(120); var : S1(0),D1(0),TM(0),TF(0); var : cnt(0),SumSqrt(0),Stdv(0); var : sum(0),BBmd(0),Bbup(0),BBdn(0); var : sum1(0),mav1(0),sum2(0),mav2(0); Array : CC[200](0); #기본차트 볼밴 var1 = BollBandUp(20,2); Var2 = BollBandDown(20,2); 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 = TM%타주기분; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or (Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or (Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then { for cnt = 199 downto 1 { CC[cnt] = CC[cnt-1]; } } CC[0] = C; #타분봉 볼밴계산 if CC[BBP-1] > 0 then { sum = 0; for cnt = 0 to BBP-1 { sum = sum + CC[cnt]; } BBmd = sum/BBP; SumSqrt = 0; For cnt = 0 To BBP - 1 { SumSqrt = SumSqrt + (CC[cnt] - BBmd)^2; } Stdv = SquareRoot(SumSqrt / BBP); BBup = BBmd + (Dv * Stdv); BBdn = BBmd - (Dv * Stdv); } #타분봉 P1이평 계산 if CC[P1-1] > 0 Then { sum1 = 0; For cnt = 0 to P1-1 { sum1 = sum1 + CC[cnt]; } mav1 = sum1/P1; } #타분봉 P2이평 계산 if CC[P2-1] > 0 Then { sum2 = 0; For cnt = 0 to P1-1 { sum2 = sum2 + CC[cnt]; } mav2 = sum2/P1; } //타분봉 지표값들 계산이 된 상태에서 if mav1 > 0 and mav2 > 0 and BBmd > 0 Then { if mav1 > mav2 and C > BBup Then { if CrossUp(c,var1) Then Buy(); } if CrossDown(c,var1) Then ExitLong(); if mav1 < mav2 and C < BBdn Then { if CrossDown(c,var2) Then Sell(); } if CrossUp(C,Var2) Then ExitShort(); } }