커뮤니티

문의 (IF)

프로필 이미지
TRF
2013-11-20 09:29:09
160
글번호 69624
답변완료
1. 선물 1분봉 기준으로 if ( (DAYINDEX < 30) AND (조건A) OR (DAYINDEX >= 30) AND (조건B) ) then EnReady = TRUE; 으로 조건식을 주고 있는데 30분이내에는 조건A가 만족하던 말던 상관없고, 30분이 지나서야 B조건을 만족해야지 EnReady = TRUE로 해주고 싶습니다. 위 방법이 제대로 맞는건지 그리고 더 좋은 방법이 있는지 조언부탁드립니다. 2. OS마다 지표값이 다르게 나올수 있나요? 아니면 어떠한 문제로 인해 지표값이 다르게 나오는지 궁금하네요. 시스템결과치가 달라서 이격도에서 소수점 4자리까지 표시를 해보니까 0.00X에서 X부분에 따라서 결과가 달라지더군요. 연산결과가 달라져서 결과적으로 시스템 리포트가 다르게 나오던데 이를 해결할 수 있는 방법은 없는지요? 아래식과 같이 현재는 이렇게 해주고 있는데 소수점 4자리는 값을 반올림해서 3자리까지 표시하는 방법 좀 부탁드립니다. VARS: A(0); A = M1 / M2 * 100; 3. 시스템 수식내에 DATA1일 경우 명시적으로 기입해주지 않아도 된다는 것으로 알고 있습니다. 하지만, 아래 수식에서 DATA1을 빼면 시스템 결과치가 확 다르게 나옵니다. 다른 부분들은 모두 고정시키고 아래에서 DATA1을 모두 빼주면 결과가 달라지더군요. 가능성이 있는 문제인지, 원인이 있다면 무엇인지 알려주시면 감사하겠습니다. VARS: sumGap(0, DATA1), Gap(0, DATA1), gCLOSE(0, DATA1); //---------------------------------------------------------------------------------------------------------------------------------------------------------- if DATA1(Date <> Date[1]) then Begin Gap = ( DATA1(O) - DATA1(C[1]) ); sumGap = sumGap + Gap; End; gCLOSE = DATA1(CLOSE) - sumGap; VARS: MP1(10, DATA1), MP2(20, DATA1), MP3(30, DATA1); VARS: M1(0, DATA1), M2(0, DATA1), M3(0, DATA1); //---------------------------------------------------------------------------------------------------------------------------------------------------------- M1 = DATA1(TMA(gCLOSE, MP1)); M2 = DATA1(TMA(gCLOSE, MP2)); M3 = DATA1(TMA(gCLOSE, MP3)); 늘 감사드립니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-11-20 12:24:48

안녕하세요 예스스탁입니다. 1. "조건식을 주고 있는데 30분이내에는 조건A가 만족하던 말던 상관없고, 30분이 지나서야 B조건을 만족해야지 EnReady = TRUE로 해주고 싶습니다." 위 문의하신 내용이면 조건B가 장시작후 30분 경과후에 만족하면 true가 되므로 아래와 같이 작성하셔야 하며 첫봉에서는 false로 초기값을 가지게 하셔야 합니다. if date != date[1] then EnReady = False; if (DAYINDEX >= 30) AND (조건B) ) then EnReady = TRUE; 거래가 없어 봉수로 30개가 30분보다 클수도 있으므로 아래와 같이 시간으로 지정하시는 것이 정확합니다. if date != date[1] then{ Ftime = TimeToMinutes(stime); EnReady = False; } if (TimeToMinutes(stime) >= Ftime+30) AND (조건B) ) then EnReady = TRUE; 2. 해당부분이 부동소숫점 연산의 오류가 아닌가 생각됩니다. 컴퓨터 프로세서가 실수를 부동소수점형태의 테이터 표현방식을 사용함으로 인해서 소수를 이진수로 변환하는 과정에서 생기는 문제로 대부분의 컴퓨터에서 동일하게 일어나는 문제입니다. 따로 해당 부분은 제어를 할수 없으므로 문의하신부분과 같이 반올림을해서 사용하셔야 합니다. VARS: A(0); A = round(M1 / M2 * 100,3);#4자리에서 반올림애서 3자리까지 사용 3. 수식에서 참조데이터를 사용하는 경우 if DATA1(Date <> Date[1]) then { 실행문 } 은 data1로 지정을 했으므로 if문이 data1봉만 기준으로 계산이 되는데 if Date <> Date[1] then 위와 같이 작성하시면 차트의 있는 봉이 완성이 될때마다 if문이 구동이 되어 조건만족여부를 따져 만족하면 하위의 실행문들이 수행되므로 중복으로 계산이 됩니다. 마찬가지로 DATA1(TMA(gCLOSE, MP1)); 와 같이 작성하시면 해당 함수를 계산하는 봉을 data1의봉수로만 따지게 되는데 TMA(gCLOSE, MP1); 와 같이 있으면 참조데이터를 포함해서 봉수를 산정하게 됩니다. 참조데이터를 이용하는 식을 만드실때는 해당 조건문 혹은 함수가 따라가야 하는 데이터가 어떤데이터인지 명시해 주셔야 합니다. 즐거운 하루되세요 즐거운 하루되세요 > TRF 님이 쓴 글입니다. > 제목 : 문의 (IF) > 1. 선물 1분봉 기준으로 if ( (DAYINDEX < 30) AND (조건A) OR (DAYINDEX >= 30) AND (조건B) ) then EnReady = TRUE; 으로 조건식을 주고 있는데 30분이내에는 조건A가 만족하던 말던 상관없고, 30분이 지나서야 B조건을 만족해야지 EnReady = TRUE로 해주고 싶습니다. 위 방법이 제대로 맞는건지 그리고 더 좋은 방법이 있는지 조언부탁드립니다. 2. OS마다 지표값이 다르게 나올수 있나요? 아니면 어떠한 문제로 인해 지표값이 다르게 나오는지 궁금하네요. 시스템결과치가 달라서 이격도에서 소수점 4자리까지 표시를 해보니까 0.00X에서 X부분에 따라서 결과가 달라지더군요. 연산결과가 달라져서 결과적으로 시스템 리포트가 다르게 나오던데 이를 해결할 수 있는 방법은 없는지요? 아래식과 같이 현재는 이렇게 해주고 있는데 소수점 4자리는 값을 반올림해서 3자리까지 표시하는 방법 좀 부탁드립니다. VARS: A(0); A = M1 / M2 * 100; 3. 시스템 수식내에 DATA1일 경우 명시적으로 기입해주지 않아도 된다는 것으로 알고 있습니다. 하지만, 아래 수식에서 DATA1을 빼면 시스템 결과치가 확 다르게 나옵니다. 다른 부분들은 모두 고정시키고 아래에서 DATA1을 모두 빼주면 결과가 달라지더군요. 가능성이 있는 문제인지, 원인이 있다면 무엇인지 알려주시면 감사하겠습니다. VARS: sumGap(0, DATA1), Gap(0, DATA1), gCLOSE(0, DATA1); //---------------------------------------------------------------------------------------------------------------------------------------------------------- if DATA1(Date <> Date[1]) then Begin Gap = ( DATA1(O) - DATA1(C[1]) ); sumGap = sumGap + Gap; End; gCLOSE = DATA1(CLOSE) - sumGap; VARS: MP1(10, DATA1), MP2(20, DATA1), MP3(30, DATA1); VARS: M1(0, DATA1), M2(0, DATA1), M3(0, DATA1); //---------------------------------------------------------------------------------------------------------------------------------------------------------- M1 = DATA1(TMA(gCLOSE, MP1)); M2 = DATA1(TMA(gCLOSE, MP2)); M3 = DATA1(TMA(gCLOSE, MP3)); 늘 감사드립니다.