커뮤니티

수식 부탁드립니다.

프로필 이미지
spek
2015-05-22 08:43:31
129
글번호 86325
답변완료
안녕하세요? 매번 성의있는 답변 감사드립니다. 1. 아래 식에서 16시 봉 바로 이전 봉이 15시 50분인 경우도 있지만, 다른 종목에서 16시 바로 이전 봉이 14시 라던가 10분전이 아닌 경우도 있습니다. 이럴 때 식이 꼬이게 되는데, if MarketPosition == 0 and stime == 155000 Then buy("b",AtStop,round(NextBarOpen*1.01,3)); if MarketPosition == 0 and stime == 155000 Then sell("s",AtStop,round(NextBarOpen*0.99,3)); 위 부분에서 155000 으로 지정하는 부분을 종목마다 일일히 바꿔야 되더군요. 이 부분을 일일히 지정하지 않고 그냥 '16시봉 바로 전의 봉' 으로 바꿀 수 없나요? input : N(1); var : loss(0); if stime == 160000 or (stime > 160000 and stime[1] < 160000) Then{ var1 = O; Loss = 0; } if MarketPosition == 0 and CurrentContracts < CurrentContracts[1] and (IsExitName("bx",1) == true or IsExitName("sx",1) == true) Then loss = loss+1; if MarketPosition == 0 and stime == 155000 Then buy("b",AtStop,round(NextBarOpen*1.01,3)); if MarketPosition == 0 and stime == 155000 Then sell("s",AtStop,round(NextBarOpen*0.99,3)); if loss < N then{ if MarketPosition == 0 and NextBarOpen <= round(var1*1.01,3) Then buy("b1",AtStop,round(var1*1.01,3)); if MarketPosition == 0 and NextBarOpen > round(var1*1.01,3) Then buy("b2",Atlimit,round(var1*1.01,3)); if MarketPosition == 0 and NextBarOpen >= round(var1*0.99,3) Then sell("s1",AtStop,round(var1*0.99,3)); if MarketPosition == 0 and NextBarOpen < round(var1*0.99,3) Then sell("s2",AtLimit,round(var1*0.99,3)); } if MarketPosition == 1 Then ExitLong("bx",AtStop,round(EntryPrice*0.99,3)); if MarketPosition == -1 Then ExitShort("sx",AtStop,round(EntryPrice*1.01,3)); 2. 그리고 위의 1번 질문에서 짜준식은 "if loss < N then{" 이 부분에서 "loss < N 이라는 조건이 15시 50분에 셋팅되는 식까지 포함을 시켜서 신호가 나오지 않았습니다" 라고 말슴해 주셔서 수정된 식인데, 저렇게 수정하니 원하던 대로 16시 봉이 장대봉이 나와서 16시 봉 안에서 바로 진입신호가 나오면 신호가 잘 잡힙니다. 그런데 이상하게도 제일 첫봉은 그게 안되네요. 무슨 말씀이냐면, 시뮬레이션 화면에서 예를들어 5월 1일 16시 봉부터 나오도록 봉의 건수를 예를들어 1500 봉으로 잡았는데, 그렇게 했을 때, 제일 첫봉이 아까 말씀드린 그런 장대봉이 나오면, 역시 그 장대봉 안에서는 신호가 안잡히네요. 하지만 뒤에서는 정상 작동합니다. 건수로 안잡고 날짜로 잡으면 첫 신호가 엉뚱한 기준에 의해서 잡히기 때문에, 저렇게 딱 건수로 맞춰서 해야만 됩니다. 3. 위 식은 시장가로 주문이 나가나요? 아니면 지정가로 주문이 나가나요? 지정가나 시장가 등을 설정하는 수식이 궁금합니다. 또는 시장가와 유사하게 빠른 체결을 위해서 매수시는 현재가 보다 3~5틱 초과, 매도시는 3~5틱 미만으로 주문을 내거나 또는 반대로 매수시는 낮게 매도시는 높게 주문을 내는 수식이 궁금합니다. 또는 진입신호는 지정가, 청산은 시장가 따위도 가능한지 궁금합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-05-22 11:14:08

안녕하세요 예스스탁입니다. 1. 시간을 0시 이후에 경과된 분수로 변경후 16시에서 차트주기를 빼서 지정했습니다. 16시가 960이므로 차트가 10분봉이면 950 차트가 5분봉이면 955로 지정이 됩니다. input : N(1); var : loss(0); if stime == 160000 or (stime > 160000 and stime[1] < 160000) Then{ var1 = O; Loss = 0; } if MarketPosition == 0 and CurrentContracts < CurrentContracts[1] and (IsExitName("bx",1) == true or IsExitName("sx",1) == true) Then loss = loss+1; if MarketPosition == 0 and TimeToMinutes(stime) == TimeToMinutes(160000)+BarInterval Then buy("b",AtStop,round(NextBarOpen*1.01,3)); if MarketPosition == 0 and TimeToMinutes(stime) == TimeToMinutes(160000)+BarInterval Then sell("s",AtStop,round(NextBarOpen*0.99,3)); if loss < N then{ if MarketPosition == 0 and NextBarOpen <= round(var1*1.01,3) Then buy("b1",AtStop,round(var1*1.01,3)); if MarketPosition == 0 and NextBarOpen > round(var1*1.01,3) Then buy("b2",Atlimit,round(var1*1.01,3)); if MarketPosition == 0 and NextBarOpen >= round(var1*0.99,3) Then sell("s1",AtStop,round(var1*0.99,3)); if MarketPosition == 0 and NextBarOpen < round(var1*0.99,3) Then sell("s2",AtLimit,round(var1*0.99,3)); } if MarketPosition == 1 Then ExitLong("bx",AtStop,round(EntryPrice*0.99,3)); if MarketPosition == -1 Then ExitShort("sx",AtStop,round(EntryPrice*1.01,3)); 2. 말씀하신 설정상태이면 첫봉이 16시 봉이므로 15시50분봉이 없어 신호를 낼 방법이 없습니다. 16시봉 미완성시에서 신호를 발생하기 전봉에서 가격을 셋팅을 하게 되는데 전봉이 없으므로 신호를 발생할수가 없습니다. 3. 시스템 수식에서는 주문가격을 지정하는 부분이 없습니다. 신호가 발생하면 주문가격은 시스템 트레이딩 설정창의 매매가격에서 지정한 가격으로 주문이 집행됩니다. 설정창에서 진입과 청산을 따로 가격지정 가능합니다. 즐거운 하루되세요 > spek 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다. > 안녕하세요? 매번 성의있는 답변 감사드립니다. 1. 아래 식에서 16시 봉 바로 이전 봉이 15시 50분인 경우도 있지만, 다른 종목에서 16시 바로 이전 봉이 14시 라던가 10분전이 아닌 경우도 있습니다. 이럴 때 식이 꼬이게 되는데, if MarketPosition == 0 and stime == 155000 Then buy("b",AtStop,round(NextBarOpen*1.01,3)); if MarketPosition == 0 and stime == 155000 Then sell("s",AtStop,round(NextBarOpen*0.99,3)); 위 부분에서 155000 으로 지정하는 부분을 종목마다 일일히 바꿔야 되더군요. 이 부분을 일일히 지정하지 않고 그냥 '16시봉 바로 전의 봉' 으로 바꿀 수 없나요? input : N(1); var : loss(0); if stime == 160000 or (stime > 160000 and stime[1] < 160000) Then{ var1 = O; Loss = 0; } if MarketPosition == 0 and CurrentContracts < CurrentContracts[1] and (IsExitName("bx",1) == true or IsExitName("sx",1) == true) Then loss = loss+1; if MarketPosition == 0 and stime == 155000 Then buy("b",AtStop,round(NextBarOpen*1.01,3)); if MarketPosition == 0 and stime == 155000 Then sell("s",AtStop,round(NextBarOpen*0.99,3)); if loss < N then{ if MarketPosition == 0 and NextBarOpen <= round(var1*1.01,3) Then buy("b1",AtStop,round(var1*1.01,3)); if MarketPosition == 0 and NextBarOpen > round(var1*1.01,3) Then buy("b2",Atlimit,round(var1*1.01,3)); if MarketPosition == 0 and NextBarOpen >= round(var1*0.99,3) Then sell("s1",AtStop,round(var1*0.99,3)); if MarketPosition == 0 and NextBarOpen < round(var1*0.99,3) Then sell("s2",AtLimit,round(var1*0.99,3)); } if MarketPosition == 1 Then ExitLong("bx",AtStop,round(EntryPrice*0.99,3)); if MarketPosition == -1 Then ExitShort("sx",AtStop,round(EntryPrice*1.01,3)); 2. 그리고 위의 1번 질문에서 짜준식은 "if loss < N then{" 이 부분에서 "loss < N 이라는 조건이 15시 50분에 셋팅되는 식까지 포함을 시켜서 신호가 나오지 않았습니다" 라고 말슴해 주셔서 수정된 식인데, 저렇게 수정하니 원하던 대로 16시 봉이 장대봉이 나와서 16시 봉 안에서 바로 진입신호가 나오면 신호가 잘 잡힙니다. 그런데 이상하게도 제일 첫봉은 그게 안되네요. 무슨 말씀이냐면, 시뮬레이션 화면에서 예를들어 5월 1일 16시 봉부터 나오도록 봉의 건수를 예를들어 1500 봉으로 잡았는데, 그렇게 했을 때, 제일 첫봉이 아까 말씀드린 그런 장대봉이 나오면, 역시 그 장대봉 안에서는 신호가 안잡히네요. 하지만 뒤에서는 정상 작동합니다. 건수로 안잡고 날짜로 잡으면 첫 신호가 엉뚱한 기준에 의해서 잡히기 때문에, 저렇게 딱 건수로 맞춰서 해야만 됩니다. 3. 위 식은 시장가로 주문이 나가나요? 아니면 지정가로 주문이 나가나요? 지정가나 시장가 등을 설정하는 수식이 궁금합니다. 또는 시장가와 유사하게 빠른 체결을 위해서 매수시는 현재가 보다 3~5틱 초과, 매도시는 3~5틱 미만으로 주문을 내거나 또는 반대로 매수시는 낮게 매도시는 높게 주문을 내는 수식이 궁금합니다. 또는 진입신호는 지정가, 청산은 시장가 따위도 가능한지 궁금합니다.