커뮤니티

시뮬레이션 차트에서

프로필 이미지
스테디어드밴서
2015-08-18 13:38:18
166
글번호 89598
답변완료
주식 개별 종목의 시뮬레이션 "30분봉 차트"가 "기준 차트"입니다. 30분봉 차트의 macd(10,20) 현재봉은 양이고 1봉전보다 크다. 30분봉 차트의 볼린져 밴드 (20,2) 상단 현재봉은 1봉전보다 작다 이때 일봉 차트의 ADX(20)현재봉은 5봉 내에 "3봉이 연속해서 30 이상인 봉"이 존재하며, 그리고 일봉차트의 10일선 현재봉은 3봉 연속으로 증가중이다. 이것을 어떻게 표현하면 좋을까요? 감사합니다.~
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-08-18 16:15:29

안녕하세요 예스스탁입니다. 문의하신 내용 참조데이터를 사용방법과 30분차트에서 일봉 ADX와 이평값을 직접 계산하는 방법이 있습니다. 참조데이터로 일봉을 사용하면 수식은 완성봉의 값만 사용하므로 당일일봉의 값은 사용이 불가능합니다. 전일봉까지만으로 조건만족여부를 판단합니다. 30분 차트에서 작성하게 되면 당일값도 이용이 가능하지만 타주기의 지표를 계산하는 부분은 실제차트와 값이 다를수가 있습니다. 특히 ADX와 같은 계산식은 완전히 같게는 작성이 가능하지 않습니다. 참고하시기 바랍니다. 1. data2 일봉 사용 Input : short(25), long(26), sig(9),BBP(20),dv(2),ADXP(14),P(10); var : MACDv(0,data1),BBup(0,data1),ADXV(0,data2),mav(0,data2); MACDV = data1(MACD(short, long)); BBup = data1(BollBandUp(BBP,dv)); ADXV = data2(ADX(ADXP)); MAV = data2(ma(C,P)); if MACDV > 0 and MACDV > MACDV[1] and BBup < BBup[1] and data2(countif(ADXV >= 30,5) >= 3) and data2(countif(mav>mav[1],3) == 3) then buy(); 2. 자체 계산 Input : short(25), long(26), sig(9),BBP(20),dv(2),ADXP(14),P(10); var : MACDv(0),BBup(0); var : sum(0),sum1(0),sum2(0),sum3(0); var : mav(0),mav1(0),mav2(0),mav3(0); var : TL(0),TH(0),cnt(0),Dcnt(0),preTRange(0),prePlusDM14(0),DMinus(0),MinusDM14(0),TRange1(0),preMinusDM14(0); Var : Counter(0), TRange(0), MyRange(0), PlusDM14(0), PlusDM(0), MinusDM(0),Dplus(0),preADX(0); Var : CummDMI(0), Return(0),count(0); Array : HH[61](0),LL[61](0),CC[61](0),TR[61](0),DMIv[61](0),ADXv[61](0); MACDV = MACD(short, long); BBup = BollBandUp(BBP,dv); #일봉 ADX계산 if date != date[1] Then{ Dcnt = Dcnt+1; HH[0] = H; LL[0] = L; CC[0] = C; preTRange = TRange[1]; prePlusDM14 = PlusDM14[1]; preMinusDM14 = MinusDM14[1]; for cnt = 1 to 60{ HH[cnt] = HH[cnt-1][1]; LL[cnt] = LL[cnt-1][1]; CC[cnt] = CC[cnt-1][1]; TR[cnt] = TR[cnt-1][1]; DMIv[cnt] = DMIv[cnt-1][1]; ADXv[cnt] = ADXv[cnt-1][1]; } } if H > HH[0] Then HH[0] = H; if L < LL[0] Then LL[0] = L; CC[0] = C; if CC[1] > 0 Then{ If CC[1] > HH[0] then TH = CC[1]; else TH = HH[0]; If CC[1] < LL[0] then TL = CC[1]; else TL = LL[0]; TR[0] = TH-TL; } If Dcnt == ADXP+1 Then { MyRange = ADXP; DPlus = 0; PlusDM14 = 0; TRange = 0; DMinus = 0; MinusDM14 = 0; TRange1 = 0; For Counter = 0 To MyRange - 1 { If HH[Counter] - HH[Counter+1] < 0 Then PlusDM = 0 ; Else PlusDM = HH[Counter] - HH[Counter+1]; If LL[Counter+1] - LL[Counter] < 0 Then MinusDM = 0; Else MinusDM = LL[Counter+1] - LL[Counter]; If MinusDM >= PlusDM Then PlusDM = 0; If PlusDM >= MinusDM Then MinusDM = 0; TRange = TRange + TR[Counter]; PlusDM14 = PlusDM14 + PlusDM; MinusDM14 = MinusDM14 + MinusDM; } If TRange <> 0 Then DPlus = 100 * PlusDM14 / TRange; Else DPlus = 0 ; If TRange <> 0 Then DMinus = 100 * MinusDM14 / TRange; Else DMinus = 0; If Dplus + Dminus == 0 Then DMIv[0] = 0; Else DMIv[0] = 100 * AbsValue(Dplus - Dminus) / (Dplus + Dminus); } Else If Dcnt > ADXP+1 Then { If HH[0] - HH[1] < 0 Then PlusDM = 0; Else PlusDM = HH[0] - HH[1]; If LL[1] - LL[0] < 0 Then MinusDM = 0; Else MinusDM = LL[1] - LL[0]; If MinusDM >= PlusDM Then PlusDM = 0; If PlusDM >= MinusDM Then MinusDM = 0 ; If MyRange > 0 Then { TRange = preTRange - (preTRange / MyRange) + TR[0]; PlusDM14 = prePlusDM14 - (prePlusDM14 / MyRange) + PlusDM; MinusDM14 = preMinusDM14 - (preMinusDM14 / MyRange) + MinusDM; } If TRange <> 0 Then DPlus = 100 * PlusDM14 / TRange; Else DPlus = 0 ; If TRange <> 0 Then DMinus = 100 * MinusDM14 / TRange; Else DMinus = 0; If Dplus + Dminus == 0 Then DMIv[0] = 0; Else DMIv[0] = 100 * AbsValue(Dplus - Dminus) / (Dplus + Dminus); } If DMIV[ADXP] == 0 Then{ CummDMI = 0; for Counter = 0 To ADXP-1 Begin if DMiV[counter] > 0 Then CummDMI = CummDMI + DMIV[Counter]; End; ADXv[0] = CummDMI / CurrentBar; } Else ADXv[0] = (ADXv[1] * (ADXP - 1) + DMIv[0]) / ADXP; #5일 ADX중 30이상의 갯수 count = 0; for cnt = 0 to 4{ if ADXV[cnt] >= 30 Then count = count+1; } #일봉이평 계산 sum = 0; sum1 = 0; sum2 = 0; sum3 = 0; for cnt = 0 to P-1{ sum = sum + DayClose(cnt); sum1 = sum1 + DayClose(cnt+1); sum2 = sum2 + DayClose(cnt+2); sum3 = sum3 + DayClose(cnt+3); } mav = sum/P; mav1 = sum1/P; mav2 = sum2/P; mav3 = sum3/P; if MACDV > 0 and MACDV > MACDV[1] and BBup < BBup[1] and count >= 30 and mav > mav1 and mav1 > mav2 and mav2 > mav3 then buy(); 즐거운 하루되세요 > 스테디어드밴서 님이 쓴 글입니다. > 제목 : 시뮬레이션 차트에서 > 주식 개별 종목의 시뮬레이션 "30분봉 차트"가 "기준 차트"입니다. 30분봉 차트의 macd(10,20) 현재봉은 양이고 1봉전보다 크다. 30분봉 차트의 볼린져 밴드 (20,2) 상단 현재봉은 1봉전보다 작다 이때 일봉 차트의 ADX(20)현재봉은 5봉 내에 "3봉이 연속해서 30 이상인 봉"이 존재하며, 그리고 일봉차트의 10일선 현재봉은 3봉 연속으로 증가중이다. 이것을 어떻게 표현하면 좋을까요? 감사합니다.~