커뮤니티

수식 부탁드립니다.

프로필 이미지
필명이요
2021-12-13 13:00:28
840
글번호 154423
답변완료
수고하십니다. 수식수정을 하고싶어서 다시 문의드립니다. 매수조건은 볼린저밴드 하단에 있을때, rsi지표가 30이하, 주가이동평균선이 5일선이 120일 이하일때, macd선이 macd시그널선 아래에 있을때 분할매수하고 매도조건은 볼린저밴드 상단에 있을때, rsi지표가 70이상, 주가이동평균선이 5일선이 120일 이상일때, macd선이 macd시그널선 위에 있을때 분할매도하는 74858번에서 이렇게 작성해주셨는데 1시간봉으로 볼때 볼린저밴드만 일봉기준으로 하고 주가이동평균, rsi, macd는 1시간봉기준으로요. 그리고 주가이동편균선 maPeriod2변수가 120일 일때 20이 맞는건가요? 죄송하지만 수식에 주석을 조금만 달아주시면 안될까요 제가 수정을 하고싶어도 어떤게 어떤건지 잘 몰라서 매번 부탁을 드리게되네요ㅠ 감사합니다. input : BBPeriod(20),dv(5),RSIPeriod(10),maPeriod1(5),maPeriod2(20),short(12),long(26),sig(9); input : 매수금액(100000),매도금액(100000),진입횟수(4); var : RSIV(0),macdv(0),macds(0); var : cnt(0),sum(0),mav(0),SumSqrt(0),Stdv(0),BBup(0),BBdn(0); var : sum1(0),sum2(0),mav1(0),mav2(0),entry(0); If DayClose(BBPeriod-1) > 0 Then { #일봉 이동평균 계산 sum = 0; for cnt = 0 to BBPeriod-1 { sum = sum + DayClose(cnt); } mav = sum/BBPeriod; SumSqrt = 0; For cnt = 0 To BBPeriod - 1 { SumSqrt = SumSqrt + (DayClose(cnt) - mav)^2; } Stdv = SquareRoot(SumSqrt / BBPeriod); BBup = mav + (Dv * Stdv); BBdn = mav - (Dv * Stdv); } If DayClose(BBPeriod-1) > 0 Then { sum1 = 0; sum2 = 0; for cnt = 0 to max(maPeriod1,maPeriod2) { if cnt < maPeriod2 Then sum1 = sum1 + DayClose(cnt); if cnt < maPeriod2 Then sum2 = sum2 + DayClose(cnt); } mav1 = sum1/maPeriod1; mav2 = sum2/maPeriod2; } RSIV = RSI(RSIPeriod); macdv = macd(short,long); macds = Ema(macdv,sig); if Bdate != Bdate[1] Then entry = 0; if CurrentContracts > CurrentContracts[1] Then entry = entry+1; if BBdn > 0 and C < bbdn and RSIV <= 30 and mav1 > 0 and mav2 > 0 and mav1 < mav2 and macdv < macds and entry < 진입횟수 Then Buy("b",OnClose,DEF,Floor(매수금액/C)); if MarketPosition == 1 and C > AvgEntryPrice and BBup > 0 and C > bbup and RSIV >= 70 and mav1 > 0 and mav2 > 0 and mav1 > mav2 and macdv > macds Then ExitLong("bx",OnClose,DEF,"",Floor(매도금액/C),2);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-12-13 15:40:13

안녕하세요 예스스탁입니다. 이전 문의에서 볼밴과 주가이평은 일봉, 나머지는 1시간봉이었습니다. 이평을 2기본차트기준으로 계산하게 변경해 드립니다. 1번식은 기존에 답변드린 수식에 주석을 처리한 식입니다. 일본이평 계산시 If DayClose(BBPeriod-1) > 0 Then로 된 부분은 If DayClose(maPeriod2-1) > 0 Then로 변경해 드립니다. 2번식은 이평을 기본차트 주기로 계산하게 변경한 식입니다. 1 input : BBPeriod(20),dv(5),RSIPeriod(10),maPeriod1(5),maPeriod2(20),short(12),long(26),sig(9); input : 매수금액(100000),매도금액(100000),진입횟수(4); var : RSIV(0),macdv(0),macds(0); var : cnt(0),sum(0),mav(0),SumSqrt(0),Stdv(0),BBup(0),BBdn(0); var : sum1(0),sum2(0),mav1(0),mav2(0),entry(0); #19(BBPeriod)일전종가가 0보다 큼(당일포함 일봉 20일치의 데이타가 있을 때) If DayClose(BBPeriod-1) > 0 Then { #일봉이평계산 #sum변수는 매봉 0으로 초기화 sum = 0; #0일전(당일)~19일전종가를 가져와 sum변수에 누적 for cnt = 0 to BBPeriod-1 { sum = sum + DayClose(cnt); } #sum을 20으로 나누어 20일 이평 계산 mav = sum/BBPeriod; #일간표준편차 계산 #SumSqrt변수는 매봉 0으로 초기화 #0~19일전 종가와 20일 이평의 차이를 구하고 제곱해서 누적 SumSqrt = 0; For cnt = 0 To BBPeriod - 1 { SumSqrt = SumSqrt + (DayClose(cnt) - mav)^2; } #누적값을 20으로 나누고 제곱근을 구함 Stdv = SquareRoot(SumSqrt / BBPeriod); #일간볼밴상단 = 20일이평+일간표준편가*2 #일간볼밴하단 = 20일이평-일간표준편가*2 BBup = mav + (Dv * Stdv); BBdn = mav - (Dv * Stdv); } #19(maPeriod2)일전 종가가 0보다 큼(당일포함 일봉 20일치의 데이타가 있을 때) If DayClose(maPeriod2-1) > 0 Then { #일봉이평계산 #sum1,sum2변수는 매봉 0으로 초기화 sum1 = 0; sum2 = 0; for cnt = 0 to max(maPeriod1,maPeriod2) { #0일전(당일)~4일전종가를 가져와 sum1변수에 누적 if cnt < maPeriod2 Then sum1 = sum1 + DayClose(cnt); #0일전(당일)~4일전종가를 가져와 sum1변수에 누적 if cnt < maPeriod2 Then sum2 = sum2 + DayClose(cnt); } #sum1을 maPeriod1로 나누어 5일 이평계산 mav1 = sum1/maPeriod1; #sum2를 maPeriod2로 나누어 20일 이평계산 mav2 = sum2/maPeriod2; } #기본차트 주기 RSI값 RSIV = RSI(RSIPeriod); #기본차트 주기 MACD값 macdv = macd(short,long); #기본차트 주기 MACD 시그널값 macds = Ema(macdv,sig); #영업일 변경시 #entry변수는 0으로 초기화 if Bdate != Bdate[1] Then entry = 0; #진입이 발생하면(전봉대비 수량증가) #entry변수는 1씩 증가 if CurrentContracts > CurrentContracts[1] Then entry = entry+1; if BBdn > 0 and C < bbdn and #BBdn값이 0보다 크고(위 로직에 의해 일간볼밴하단값이 계산이 되었고) 종가가 일간 볼밴하단보다 작고 RSIV <= 30 and #기본차트 RSI는 30 이하이고 mav1 > 0 and mav2 > 0 and mav1 < mav2 and #mav1과 mav2는 0보다 크고 (위 로직에 의해 일간아평값이 계산이 되었고) 일간5이평이 일간 20이평보다 작고 macdv < macds and #기본차트 MACD는 MACD시그널보다 작고 entry < 진입횟수 Then #진입횟수는 지정한 값 이하일때 Buy("b",OnClose,DEF,Floor(매수금액/C)); #지정한 금액만큼 매수 if MarketPosition == 1 and #매수후 C > AvgEntryPrice and #종가가 평균가보다 크고 BBup > 0 and C > bbup and #종가가 일간볼밴상단보다 크고 RSIV >= 70 and # 기본차트 RSI는 70이상이고 mav1 > 0 and mav2 > 0 and mav1 > mav2 and #일간5이평이 일간20이평보다 크고 macdv > macds Then #기본차트 MACD는 MACD시그널보다 크면 지정금액만큼 청산 ExitLong("bx",OnClose,DEF,"",Floor(매도금액/C),2); 2 input : BBPeriod(20),dv(5),RSIPeriod(10),maPeriod1(5),maPeriod2(20),short(12),long(26),sig(9); input : 매수금액(100000),매도금액(100000),진입횟수(4); var : RSIV(0),macdv(0),macds(0); var : cnt(0),sum(0),mav(0),SumSqrt(0),Stdv(0),BBup(0),BBdn(0); var : mav1(0),mav2(0),entry(0); #19(BBPeriod)일전종가가 0보다 큼(당일포함 일봉 20일치의 데이타가 있을 때) If DayClose(BBPeriod-1) > 0 Then { #일봉이평계산 #sum변수는 매봉 0으로 초기화 sum = 0; #0일전(당일)~19일전종가를 가져와 sum변수에 누적 for cnt = 0 to BBPeriod-1 { sum = sum + DayClose(cnt); } #sum을 20으로 나누어 20일 이평 계산 mav = sum/BBPeriod; #일간표준편차 계산 #SumSqrt변수는 매봉 0으로 초기화 #0~19일전 종가와 20일 이평의 차이를 구하고 제곱해서 누적 SumSqrt = 0; For cnt = 0 To BBPeriod - 1 { SumSqrt = SumSqrt + (DayClose(cnt) - mav)^2; } #누적값을 20으로 나누고 제곱근을 구함 Stdv = SquareRoot(SumSqrt / BBPeriod); #일간볼밴상단 = 20일이평+일간표준편가*2 #일간볼밴하단 = 20일이평-일간표준편가*2 BBup = mav + (Dv * Stdv); BBdn = mav - (Dv * Stdv); } #기본차트 주기 이평 mav1 = ma(C,maPeriod1); mav2 = ma(C,maPeriod2); #기본차트 주기 RSI값 RSIV = RSI(RSIPeriod); #기본차트 주기 MACD값 macdv = macd(short,long); #기본차트 주기 MACD 시그널값 macds = Ema(macdv,sig); #영업일 변경시 #entry변수는 0으로 초기화 if Bdate != Bdate[1] Then entry = 0; #진입이 발생하면(전봉대비 수량증가) #entry변수는 1씩 증가 if CurrentContracts > CurrentContracts[1] Then entry = entry+1; if BBdn > 0 and C < bbdn and #BBdn값이 0보다 크고(위 로직에 의해 일간볼밴하단값이 계산이 되었고) 종가가 일간 볼밴하단보다 작고 RSIV <= 30 and #기본차트 RSI는 30 이하이고 mav1 > 0 and mav2 > 0 and mav1 < mav2 and #mav1과 mav2는 0보다 크고 (위 로직에 의해 일간아평값이 계산이 되었고) 일간5이평이 일간 20이평보다 작고 macdv < macds and #기본차트 MACD는 MACD시그널보다 작고 entry < 진입횟수 Then #진입횟수는 지정한 값 이하일때 Buy("b",OnClose,DEF,Floor(매수금액/C)); #지정한 금액만큼 매수 if MarketPosition == 1 and #매수후 C > AvgEntryPrice and #종가가 평균가보다 크고 BBup > 0 and C > bbup and #종가가 일간볼밴상단보다 크고 RSIV >= 70 and # 기본차트 RSI는 70이상이고 mav1 > 0 and mav2 > 0 and mav1 > mav2 and #일간5이평이 일간20이평보다 크고 macdv > macds Then #기본차트 MACD는 MACD시그널보다 크면 지정금액만큼 청산 ExitLong("bx",OnClose,DEF,"",Floor(매도금액/C),2); 즐거운 하루되세요 > 필명이요 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다. > 수고하십니다. 수식수정을 하고싶어서 다시 문의드립니다. 매수조건은 볼린저밴드 하단에 있을때, rsi지표가 30이하, 주가이동평균선이 5일선이 120일 이하일때, macd선이 macd시그널선 아래에 있을때 분할매수하고 매도조건은 볼린저밴드 상단에 있을때, rsi지표가 70이상, 주가이동평균선이 5일선이 120일 이상일때, macd선이 macd시그널선 위에 있을때 분할매도하는 74858번에서 이렇게 작성해주셨는데 1시간봉으로 볼때 볼린저밴드만 일봉기준으로 하고 주가이동평균, rsi, macd는 1시간봉기준으로요. 그리고 주가이동편균선 maPeriod2변수가 120일 일때 20이 맞는건가요? 죄송하지만 수식에 주석을 조금만 달아주시면 안될까요 제가 수정을 하고싶어도 어떤게 어떤건지 잘 몰라서 매번 부탁을 드리게되네요ㅠ 감사합니다. input : BBPeriod(20),dv(5),RSIPeriod(10),maPeriod1(5),maPeriod2(20),short(12),long(26),sig(9); input : 매수금액(100000),매도금액(100000),진입횟수(4); var : RSIV(0),macdv(0),macds(0); var : cnt(0),sum(0),mav(0),SumSqrt(0),Stdv(0),BBup(0),BBdn(0); var : sum1(0),sum2(0),mav1(0),mav2(0),entry(0); If DayClose(BBPeriod-1) > 0 Then { #일봉 이동평균 계산 sum = 0; for cnt = 0 to BBPeriod-1 { sum = sum + DayClose(cnt); } mav = sum/BBPeriod; SumSqrt = 0; For cnt = 0 To BBPeriod - 1 { SumSqrt = SumSqrt + (DayClose(cnt) - mav)^2; } Stdv = SquareRoot(SumSqrt / BBPeriod); BBup = mav + (Dv * Stdv); BBdn = mav - (Dv * Stdv); } If DayClose(BBPeriod-1) > 0 Then { sum1 = 0; sum2 = 0; for cnt = 0 to max(maPeriod1,maPeriod2) { if cnt < maPeriod2 Then sum1 = sum1 + DayClose(cnt); if cnt < maPeriod2 Then sum2 = sum2 + DayClose(cnt); } mav1 = sum1/maPeriod1; mav2 = sum2/maPeriod2; } RSIV = RSI(RSIPeriod); macdv = macd(short,long); macds = Ema(macdv,sig); if Bdate != Bdate[1] Then entry = 0; if CurrentContracts > CurrentContracts[1] Then entry = entry+1; if BBdn > 0 and C < bbdn and RSIV <= 30 and mav1 > 0 and mav2 > 0 and mav1 < mav2 and macdv < macds and entry < 진입횟수 Then Buy("b",OnClose,DEF,Floor(매수금액/C)); if MarketPosition == 1 and C > AvgEntryPrice and BBup > 0 and C > bbup and RSIV >= 70 and mav1 > 0 and mav2 > 0 and mav1 > mav2 and macdv > macds Then ExitLong("bx",OnClose,DEF,"",Floor(매도금액/C),2);