커뮤니티

문의드립니다.

프로필 이미지
deepye
2013-10-11 09:25:35
161
글번호 68331
답변완료
예전에 문의드려서 만들어주셨던 수식을 간단하게 변형을 해서 오늘 아침에 데모트레이딩에 적용을 해봤는데요. 장이 열리기 전에 1분봉 전략실행차트를 열고 자동주문을 실행해 두었습니다. 그런데 의도했던 것과는 다른 곳에서 진입과 청산이 이루어져서 다시 질문드립니다. 1 일단 첫봉에서 이미 목표가에 도달했는데 바로 신호가 발생하지 않았고 두번째봉에서 목표가에 다시 도달했을때 신호가 발생했습니다. 첫봉부터 신호가 발생하려면 어떻게 수정해줘야 하는건가요? 2 청산은 매도익절로 바로 다음 봉의 시가에서 (265.40) 이루어졌습니다. MessagLog 명령어를 써서 청산가격이 되어야할 DayOpen-DayATR*4의 값도 확인해 봤는데 값은 의도했던 정상값인 264.80을 보여주고 있었습니다. 왜 다른 가격 (바로 다음봉의 시가)에서 이루어졌는지 궁금하고 어떻게 수정해야하는건지요? 감사합니다. ----------------------------- input : ATRP(14),N(1); var : TH(0),TL(0),Sum(0),TR(0),DayATR(0),cnt(0),count(0); //당일 진입횟수 count = 0; for cnt = 0 to 20{ if sdate == EntryDate(cnt) Then count = count+1; } DayATR = 0.3; If Marketposition == 0 and stime < 143000 and count < N then{ buy("b",AtStop,dayopen+DayATR); Sell("s",AtStop,dayopen-DayATR); } if MarketPosition == 1 Then{ ExitLong("매수익절",AtStop,DayOpen+DayATR*4); ExitLong("매수손절",AtStop,DayOpen-DayATR); } if MarketPosition == -1 Then{ ExitShort("매도익절",AtStop,DayOpen-DayATR*4); ExitShort("매도손절",AtStop,DayOpen+DayATR); } SetStopEndofday(143000);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-10-11 16:51:44

안녕하세요 예스스탁입니다. atstop이나 atlimit은 최근완성봉에서 값을 셋팅하고 현재봉에서 해당 값 이상이나 이하의 시세가 발생하는지 체크하여 신호를 발생하게 됩니다. 당일 첫봉에서 if조건이 만족하면 다음봉인 두번째 봉부터 가격을 감시하게 됩니다. 첫봉에 신호를 발생하게 하려면 첫봉의 이전봉인 전일 마지막봉에 if문을 만족시켜 다음봉인 당일첫봉의 시세를 감시해 신호가 발생하게 해야 합니다. 차트가 1분봉이시면 선물이나 옵션은 15시 15분봉이 마지막봉입니다. 차트의 주기에 따라 마지막봉 시간이 다르므로 주의하시기 바랍니다. input : ATRP(14),N(1); var : TH(0),TL(0),Sum(0),TR(0),DayATR(0),cnt(0),count(0); //당일 진입횟수 count = 0; for cnt = 0 to 20{ if sdate == EntryDate(cnt) Then count = count+1; } DayATR = 0.3; If Marketposition == 0 and stime == 143000 then{ buy("b",AtStop,NextBarOpen+DayATR); Sell("s",AtStop,NextBarOpen-DayATR); } If Marketposition == 0 and stime < 143000 and count < N then{ buy("buy",AtStop,dayopen+DayATR); Sell("sell",AtStop,dayopen-DayATR); } if MarketPosition == 1 Then{ ExitLong("매수익절",AtStop,DayOpen+DayATR*4); ExitLong("매수손절",AtStop,DayOpen-DayATR); } if MarketPosition == -1 Then{ ExitShort("매도익절",AtStop,DayOpen-DayATR*4); ExitShort("매도손절",AtStop,DayOpen+DayATR); } SetStopEndofday(143000); 위식은 dayATR이 0.3으로 고정이 되어 있습니다. 만약 일간의 ATR값을 계산해 이용하시면 아래와 같이 2개로 계산해서 사용하셔야 합니다. 첫봉의 신호가 셋팅이 되는 것인 전일 마지막봉이므로 첫봉에서 신호가 발생할때 사용하는 일간 ATR은 당일을 포함한 일간 ATR을 사용하셔야 합니다. input : ATRP(14),N(1); var : TH(0),TL(0),Sum(0),TR(0),DayATR(0),cnt(0),count(0); var : TH1(0),TL1(0),Sum1(0),TR1(0),DayATR1(0); //당일 진입횟수 count = 0; for cnt = 0 to 20{ if sdate == EntryDate(cnt) Then count = count+1; } #전일 기준 ATR sum = 0; for cnt = 1 to ATRP{ If DayClose(cnt+1) > dayhigh(cnt) then TH = DayClose(cnt+1); else TH = dayhigh(cnt); If DayClose(cnt+1) < DayLow(cnt) then TL = DayClose(cnt+1); else TL = daylow(cnt); TR = TH-TL; Sum = Sum+TR; } DayATR = Sum/ATRP; #당일 포함 ATR sum1 = 0; for cnt = 0 to ATRP-1{ If DayClose(cnt+1) > dayhigh(cnt) then TH1 = DayClose(cnt+1); else TH1 = dayhigh(cnt); If DayClose(cnt+1) < DayLow(cnt) then TL1 = DayClose(cnt+1); else TL1 = daylow(cnt); TR1 = TH1-TL1; Sum1 = Sum1+TR1; } DayATR1 = Sum1/ATRP; If Marketposition == 0 and stime == 143000 then{ buy("b",AtStop,NextBarOpen+DayATR1); Sell("s",AtStop,NextBarOpen-DayATR1); } If Marketposition == 0 and stime < 143000 and count < N then{ buy("buy",AtStop,dayopen+DayATR); Sell("sell",AtStop,dayopen-DayATR); } if MarketPosition == 1 Then{ ExitLong("매수익절",AtStop,DayOpen+DayATR*4); ExitLong("매수손절",AtStop,DayOpen-DayATR); } if MarketPosition == -1 Then{ ExitShort("매도익절",AtStop,DayOpen-DayATR*4); ExitShort("매도손절",AtStop,DayOpen+DayATR); } SetStopEndofday(143000); 즐거운 하루되세요 > deepye 님이 쓴 글입니다. > 제목 : 문의드립니다. > 예전에 문의드려서 만들어주셨던 수식을 간단하게 변형을 해서 오늘 아침에 데모트레이딩에 적용을 해봤는데요. 장이 열리기 전에 1분봉 전략실행차트를 열고 자동주문을 실행해 두었습니다. 그런데 의도했던 것과는 다른 곳에서 진입과 청산이 이루어져서 다시 질문드립니다. 1 일단 첫봉에서 이미 목표가에 도달했는데 바로 신호가 발생하지 않았고 두번째봉에서 목표가에 다시 도달했을때 신호가 발생했습니다. 첫봉부터 신호가 발생하려면 어떻게 수정해줘야 하는건가요? 2 청산은 매도익절로 바로 다음 봉의 시가에서 (265.40) 이루어졌습니다. MessagLog 명령어를 써서 청산가격이 되어야할 DayOpen-DayATR*4의 값도 확인해 봤는데 값은 의도했던 정상값인 264.80을 보여주고 있었습니다. 왜 다른 가격 (바로 다음봉의 시가)에서 이루어졌는지 궁금하고 어떻게 수정해야하는건지요? 감사합니다. ----------------------------- input : ATRP(14),N(1); var : TH(0),TL(0),Sum(0),TR(0),DayATR(0),cnt(0),count(0); //당일 진입횟수 count = 0; for cnt = 0 to 20{ if sdate == EntryDate(cnt) Then count = count+1; } DayATR = 0.3; If Marketposition == 0 and stime < 143000 and count < N then{ buy("b",AtStop,dayopen+DayATR); Sell("s",AtStop,dayopen-DayATR); } if MarketPosition == 1 Then{ ExitLong("매수익절",AtStop,DayOpen+DayATR*4); ExitLong("매수손절",AtStop,DayOpen-DayATR); } if MarketPosition == -1 Then{ ExitShort("매도익절",AtStop,DayOpen-DayATR*4); ExitShort("매도손절",AtStop,DayOpen+DayATR); } SetStopEndofday(143000);