커뮤니티

문의

프로필 이미지
hjkang철인
2014-07-03 11:52:19
163
글번호 76351
답변완료
어제 답변 감사했습니다. 한가지 더 요청 드리겠습니다. 현재 제가 300틱 차트를 이용해서 신호를 내고 있는데.. 이게 갑자기 거래량이 많아져 봉 길이가 길어지면 봉이 확정되고 신호가 나오기 때문에.. 진입가격이 너무 좋지 않네요... 그래서 생각을 한것이... 신호가 확정된 가격으로 신호를 내주면 되는데... 그게 300틱을 그대로 쓰면 되는게 아니니까... 제가.. 100틱이나 150틱을 쓰면서... 1.300틱을 프로그램 내에서 계산해서 참조하던지. 2.300틱을 data2로 참조해서 사용해야 할것 같습니다. 하지만 다른주기를 같은 차트에 띄워보니 차트의 데이타가 시간이 지나면 약간 보이는게 오류가 있는것 같아서 자주 프로그램을 종료시키고 다시 시작시킵니다. 300틱에 MACD와 DMI이용해서 매수 매도신호를 내주는 겁니다. 300틱에서 봉 확정가격이 아닌 가격이 조건에 맞으면 신호를 주게끔 처리 부탁드립니다. 100틱과 150틱 사용에서 프로그램 내에서 작성할경우.. Data2로 참조할경우 MACD 이용하는 것만 작성해주시면 감사하겠습니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-07-03 14:33:12

안녕하세요 예스스탁입니다. 1번과 2번의 방법 모두 생각해 볼 문제가 있습니다. 우선 data2를 사용하는 경우 수식은 완성된 봉의 값만 사용하고 미완성봉에서는 값을 가져와 사용하지 않습니다. 그러므로 주데이터를 100틱이나 150틱을 사용하고 참조데이터(data2)로 300틱을 이용하면 가장최근에 완성된 참조데이터에서 조건만족을 판단해 신호를 발생하므로 이전봉의 값으로 현재봉에서 신호가 발생하게 되므로 빠르게 주문을 내는 것이 아닙니다. 주데이터 자체에서 타주기를 계산하는 경우에는 실제 차트값과 계산된 값이 약간 차이가 있을수 있습니다. 계산방법이 지수이평류와 같이 이전값이 현재봉 값 계산에 영향을 주는 구조이면 봉의 갯수에 따라 값이 차이가 발생하게 됩니다 아래지표 참고하셔서 시스템 만드시기 바랍니다. 1.MACD(100틱에서 300틱) Input : Period1(12),Period2(26),Period3(9); Var : Ep1(0), JISU1(0), DINDEX1(0), PreJISU1(0); Var : Ep2(0), JISU2(0), PreJISU2(0); Var : Ep3(0), JISU3(0), PreMACDV(0),PreMACDS(0),TF(0); var : MACDV(0),MACDS(0),Start(false); Ep1 = 2/(Period1+1); Ep2 = 2/(Period2+1); Ep3 = 2/(Period3+1); TF = dayindex%3; if date != date[1] Then Start = true; if start == true then{ if dayindex == 0 or (TF < TF[1] and stime > stime[1]) Then{ DINDEX1 = DINDEX1 + 1; PreJISU1 = JISU1[1]; PreJISU2 = JISU2[1]; PreMACDV = MACDV[1]; PreMACDS = MACDS[1]; } if DINDEX1 <= 1 then { JISU1 = C; JISU2 = C; MACDV = JiSu1-Jisu2; MACDS = MACDV; } else{ JISU1 = C * EP1 + PreJISU1 * (1-EP1); JISU2 = C * EP2 + PreJISU2 * (1-EP2); MACDV = JiSu1-Jisu2; MACDS = MACDV * EP3 + PreMACDS * (1-EP3); } plot1(MACDV,"타주기 MACD"); plot2(MACDs,"타주기 MACD시그널"); plot3(MACDV,"타주기 직전봉 MACD"); plot4(MACDs,"타주기 직전봉 MACD시그널"); } 2. DMI(100틱에서 300틱) input : Length(14); var : TT(0),BarCnt(0),cnt(0),MyRange(0); var : DP(0),PlusDM(0),MinusDM(0),TH(0),TL(0); var : DM(0),DMIv(0),Start(false); var : PreDMI(0),PreDP(0),PreDM(0); Array : HH[61](0),LL[61](0),CC[61](0),TR[61](0),TRange[61](0); Array : PlusDM14[61](0),MinusDM14[61](0); TT = dayindex%3; if date != date[1] Then Start = true; if Start == true then{ if date != date[1] or (TT < TT[1]) Then{ BarCnt = BarCnt+1; HH[0] = H; LL[0] = L; PreDMI = DMIv[1]; PreDP = DP[1]; PreDM = DM[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]; TRange[cnt] = TRange[cnt-1][1]; PlusDM14[cnt] = PlusDM14[cnt-1][1]; MinusDM14[cnt] = MinusDM14[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 BarCnt == Length+2 Then { MyRange = Length; DP = 0; DM = 0; PlusDM14[0] = 0; MinusDM14[0] = 0; TRange[0] = 0; For cnt = 0 To MyRange - 1 { If HH[cnt] - HH[cnt+1] < 0 Then PlusDM = 0; Else PlusDM = HH[cnt] - HH[cnt+1]; If LL[cnt+1] - LL[cnt] < 0 Then MinusDM = 0; Else MinusDM = LL[cnt+1] - LL[cnt]; If MinusDM >= PlusDM Then PlusDM = 0; If PlusDM >= MinusDM Then MinusDM = 0; TRange[0] = TRange[0] + TR[cnt]; PlusDM14[0] = PlusDM14[0] + PlusDM; MinusDM14[0] = MinusDM14[0] + MinusDM; } If TRange[0] <> 0 Then { DP = 100 * PlusDM14[0] / TRange[0]; DM = 100 * MinusDM14[0] / TRange[0]; } Else { DP = 0 ; DM = 0; } } Else If BarCnt > Length+2 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[0] = TRange[1] - (TRange[1] / MyRange) + TR[0]; PlusDM14[0] = PlusDM14[1] - (PlusDM14[1] / MyRange) + PlusDM; MinusDM14[0] = MinusDM14[1] - (MinusDM14[1] / MyRange) + MinusDM; } If TRange[0] <> 0 Then{ DP = 100 * PlusDM14[0] / TRange[0]; DM = 100 * MinusDM14[0] / TRange[0]; } Else{ DP = 0; DM = 0; } } If DP + DM == 0 Then DMIv = 0; Else DMIv = 100 * AbsValue(DP - DM) / (DP + DM); plot1(DMIv,"타주기 DMI"); plot2(DP,"타주기 DP"); plot3(DM,"타주기 DM"); plot4(preDMi,"타주기전봉 DMI"); plot5(preDP,"타주기전봉 DP"); plot6(preDM,"타주기전봉 DM"); } 즐거운 하루되세요 > hjkang철인 님이 쓴 글입니다. > 제목 : 문의 > 어제 답변 감사했습니다. 한가지 더 요청 드리겠습니다. 현재 제가 300틱 차트를 이용해서 신호를 내고 있는데.. 이게 갑자기 거래량이 많아져 봉 길이가 길어지면 봉이 확정되고 신호가 나오기 때문에.. 진입가격이 너무 좋지 않네요... 그래서 생각을 한것이... 신호가 확정된 가격으로 신호를 내주면 되는데... 그게 300틱을 그대로 쓰면 되는게 아니니까... 제가.. 100틱이나 150틱을 쓰면서... 1.300틱을 프로그램 내에서 계산해서 참조하던지. 2.300틱을 data2로 참조해서 사용해야 할것 같습니다. 하지만 다른주기를 같은 차트에 띄워보니 차트의 데이타가 시간이 지나면 약간 보이는게 오류가 있는것 같아서 자주 프로그램을 종료시키고 다시 시작시킵니다. 300틱에 MACD와 DMI이용해서 매수 매도신호를 내주는 겁니다. 300틱에서 봉 확정가격이 아닌 가격이 조건에 맞으면 신호를 주게끔 처리 부탁드립니다. 100틱과 150틱 사용에서 프로그램 내에서 작성할경우.. Data2로 참조할경우 MACD 이용하는 것만 작성해주시면 감사하겠습니다.