커뮤니티

문의 드립니다.

프로필 이미지
spek
2015-06-15 07:46:37
91
글번호 87186
답변완료
안녕하세요? 수고 많으십니다. 1. 아래 식은 예전에 부탁드려서 짜주신 식인데, "if loss < N then{" 이 부분이 아래에서는 매수신호 b, 매도신호 s 만 포함하게 되어있는데, 원래는 b1, s1 까지 포함되게 되어있었습니다. 그런데 그렇게 하니 10분봉으로 첫봉에 해당하는 16시 봉으로는 신호가 안떠서 문의를 드렸더니, b1, s1 까지 포함되어서 그러니 b, s 만 포함되게 바꾸라고 하셔서 바꾸고나서 시뮬레이션에서는 잘 작동합니다. 그런데 이렇게 되면 실전에서는 10분봉을 켜놓고 하면 BX, SX 가 첫봉인 16시 봉에서 발생했다가 다시 16시 10분이 되기전에 또 진입신호가 발생해 버리면 b1, s1 이 포함되지 않아서 다시 진입해 버리는 것 아닌가요? 만약에 그렇다면, 어찌 바꿔야 되나요? Input : N(3); Var : HH(0), LL(0), Loss(0); if stime == 160000 or (stime > 160000 and stime[1] < 160000) Then var1 = O; 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("b1",AtStop,NextBarOpen*1.01); if MarketPosition >= 0 and stime == 155000 Then sell("s1",AtStop,NextBarOpen*0.99); if loss < N then{ if MarketPosition <= 0 and H < var1*1.01 Then buy("b",AtStop,var1*1.01); if MarketPosition >= 0 and L > var1*0.99 Then sell("s",AtStop,var1*0.99); } if MarketPosition == 1 Then ExitLong("Bx",AtStop,Round(EntryPrice*0.99,2)); if MarketPosition == -1 Then ExitShort("Sx",AtStop,Round(EntryPrice*1.01,2)); 2. 예스트레이더에 오류가 있는 것 같습니다. 외부변수, 변수편집에서 최적화 체크하고 최소값 0.55, 최대값 0.65, 증가단위 0.05 로 해서 시뮬레이션 돌려봤는데, 시스템 최적화 보고서를 보면, 이러면 0.55, 0.6, 0.65 이렇게 세개의 값이 대입이 이루어져야 되잖습니까? 그런데 0.55, 0.6 이렇게 두개만 되네요. 그런데 최소값 0.25, 최대값 0.35, 증가단위 0.05 로 하면, 정상적으로 0.25, 0.3, 0.35 의 값이 대입되어 나옵니다. 첨엔 제 수식이 잘못 되었나 싶었는데, 재부팅한 뒤 차트도 완전 다른 차트 띄워서, 제 수식이 아니라 그냥 기본으로 제공되는 단순 이동평균이나, 파라볼릭 이런데 막 넣어서 해봤는데도, 꼭 최소 0.55 최대 0.65 증가단위 0.05 로만 하면 0.55 0.6 두개만 대입되어 나오네요. 0.25 0.35 0.05 같은 다른 수치들은 이상 없는데 말입니다. 최대 0.65 가 아니라 0.650001 등으로 넣으면 정상적으로 0.55 0.6 0.65 세개 다 뜹니다. 다른 수치들은 안그런데 꼭 0.65 만 미만값으로 잡히나봅니다. 제가 어디 잘못 손댄건가요 아니면 예트의 오류인가요?
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-06-15 13:40:45

안녕하세요 예스스탁입니다. 1. 예 6시봉에 청산이 발생하고 b1,s1 가격조건에 만족하게 되면 진입을 하게 됩니다. 청산과 진입이 모두 전봉에 셋팅되서 다음봉에서 신호가 발생하는 구조로 수식에서 봉미완성시에 발생하는 신호의 내용은 체크해서 제어하게 할수가 없습니다. 문의하신 내용이라면 방법이 따로 없을것 같습니다. 기존과 같이 첫봉에 발생하는 청산은 그 16시 기준으로 그 이전일에 진입에 대한 청산이므로 동일봉에 진입을 허용하시거나 혹은 아래와 같이 무포지션에서만 신호가 발생하게 처리하시면 15시 50분봉이 무포지션일때만 16시 봉에 신호가 발생합니다. if MarketPosition == 0 and stime == 155000 Then buy("b1",AtStop,NextBarOpen*1.01); if MarketPosition == 0 and stime == 155000 Then sell("s1",AtStop,NextBarOpen*0.99); 2. 해당 내용은 사용자분이 처리를 잘못하신 부분은 아니며 프로그램상 오류도 아닙니다. 부동소숫점 오류로 컴퓨터가 계산할때 발생되는 오류입니다. 인터넷에서 부동소숫점 오류로 검색하시면 많은 글 보실수 있습니다. CPU에서 값을 계산할때 2진수로 계산후 10진수로 돌려주게 되는데 이때 소숫점 이하의 값을 0.65000000001 또는 0.6499999999와 같이 리턴해 주는 경우가 있어 발생되는 내용입니다. 해당 부분은 따로 개발팀에게 전달해서 프로그램쪽에서 처리를 해줄수 있는지 요청해 보도록 하겠습니다. CPU에서 계산해서 리턴하는 분은 저희쪽에서 컨트롤이 안되므로 처리가 가능할지 모르겠습니다. 현재로서는 수 최적화 시에 소숫점이하 단위가 사용되시면 최대값에 말씀하신 것처럼 0.650001와 같이 약간 큰값을 지정해서 사용해 주셔야 합니다. 즐거운 하루되세요 > spek 님이 쓴 글입니다. > 제목 : 문의 드립니다. > 안녕하세요? 수고 많으십니다. 1. 아래 식은 예전에 부탁드려서 짜주신 식인데, "if loss < N then{" 이 부분이 아래에서는 매수신호 b, 매도신호 s 만 포함하게 되어있는데, 원래는 b1, s1 까지 포함되게 되어있었습니다. 그런데 그렇게 하니 10분봉으로 첫봉에 해당하는 16시 봉으로는 신호가 안떠서 문의를 드렸더니, b1, s1 까지 포함되어서 그러니 b, s 만 포함되게 바꾸라고 하셔서 바꾸고나서 시뮬레이션에서는 잘 작동합니다. 그런데 이렇게 되면 실전에서는 10분봉을 켜놓고 하면 BX, SX 가 첫봉인 16시 봉에서 발생했다가 다시 16시 10분이 되기전에 또 진입신호가 발생해 버리면 b1, s1 이 포함되지 않아서 다시 진입해 버리는 것 아닌가요? 만약에 그렇다면, 어찌 바꿔야 되나요? Input : N(3); Var : HH(0), LL(0), Loss(0); if stime == 160000 or (stime > 160000 and stime[1] < 160000) Then var1 = O; 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("b1",AtStop,NextBarOpen*1.01); if MarketPosition >= 0 and stime == 155000 Then sell("s1",AtStop,NextBarOpen*0.99); if loss < N then{ if MarketPosition <= 0 and H < var1*1.01 Then buy("b",AtStop,var1*1.01); if MarketPosition >= 0 and L > var1*0.99 Then sell("s",AtStop,var1*0.99); } if MarketPosition == 1 Then ExitLong("Bx",AtStop,Round(EntryPrice*0.99,2)); if MarketPosition == -1 Then ExitShort("Sx",AtStop,Round(EntryPrice*1.01,2)); 2. 예스트레이더에 오류가 있는 것 같습니다. 외부변수, 변수편집에서 최적화 체크하고 최소값 0.55, 최대값 0.65, 증가단위 0.05 로 해서 시뮬레이션 돌려봤는데, 시스템 최적화 보고서를 보면, 이러면 0.55, 0.6, 0.65 이렇게 세개의 값이 대입이 이루어져야 되잖습니까? 그런데 0.55, 0.6 이렇게 두개만 되네요. 그런데 최소값 0.25, 최대값 0.35, 증가단위 0.05 로 하면, 정상적으로 0.25, 0.3, 0.35 의 값이 대입되어 나옵니다. 첨엔 제 수식이 잘못 되었나 싶었는데, 재부팅한 뒤 차트도 완전 다른 차트 띄워서, 제 수식이 아니라 그냥 기본으로 제공되는 단순 이동평균이나, 파라볼릭 이런데 막 넣어서 해봤는데도, 꼭 최소 0.55 최대 0.65 증가단위 0.05 로만 하면 0.55 0.6 두개만 대입되어 나오네요. 0.25 0.35 0.05 같은 다른 수치들은 이상 없는데 말입니다. 최대 0.65 가 아니라 0.650001 등으로 넣으면 정상적으로 0.55 0.6 0.65 세개 다 뜹니다. 다른 수치들은 안그런데 꼭 0.65 만 미만값으로 잡히나봅니다. 제가 어디 잘못 손댄건가요 아니면 예트의 오류인가요?