커뮤니티

문의 (F1)

프로필 이미지
TRF
2014-04-02 13:03:27
166
글번호 74056
답변완료
1. 아래와 같이 수식이 있습니다. M3 > M4 > M5와 M3, M4, M5 모두 상승시에만 EBSx1A = TRUE를 해주어야 하는데, 수식을 적용해보면 N분 이후에도 그렇치 않은 부분에서 신호가 발생합니다. 즉 15분이 지났는대도 M3 < M4 나 M3.UTrend == FALSE 조건이어도 신호가 발생됩니다. 원인을 찾지못해 도움을 요청드립니다. VARS: EBSxTIME(15); VARS: EBSx1A(FALSE),; VARS: EBSx1A.TM(-1); if ( (stime == 070000) OR ((stime > 070000 AND stime[1] < 070000)) ) then { EBSx1A = FALSE; EBSx1A.TM = -1; } if ( (MarketPosition >= 0) ) then { if ( (M3 > M4) AND (M4 > M5) ) then { if ( (M3.UTrend == TRUE) AND (M4.UTrend == TRUE) AND (M5.UTrend == TRUE) ) then { EBSx1A = TRUE; EBSx1A.TM = TimeToMinutes(stime); } if ( (EBSx1A == TRUE) AND (TimeToMinutes(stime) >= EBSx1A.TM + EBSxTIME) ) then { EBSx1A = FALSE; EBSx1A.TM = -1; } } } if ( (MarketPosition >= 0) ) then { if ( (EBSx1A == TRUE) AND 기타조건 ) then BUY("B"); } 2. 데이트레이딩 즉 당일청산이 아닐경우 아래 수식과 같이 날짜변경시 초기화하는 부분이 필요없다고 생각하는데 구지 쓰지 않아도 되는지요? 3. 테스트를 해보면 아래 초기화하는 부분이 있거나 없거나 상관없이 진입 30분 이후에 청산을 하게끔 했더니 원하는 곳에서 청산이 되질 않더군요. 검증부탁드립니다. VARS: AES.EDT.T1(FALSE), AES.EDT.T2(FALSE), AES.EDT.T3(FALSE); if ( (stime == 070000) OR ((stime > 070000 AND stime[1] < 070000)) ) then { AES.EDT.T1 = FALSE; AES.EDT.T2 = FALSE; AES.EDT.T3 = FALSE; } AES.EDT.T1 = (TimeToMinutes(stime) >= TimeToMinutes(EntryTime) + 30); AES.EDT.T2 = (TimeToMinutes(stime) >= TimeToMinutes(EntryTime) + 60); AES.EDT.T3 = (TimeToMinutes(stime) >= TimeToMinutes(EntryTime) + 90); // 진입 30분이후부터 청산 if ( (AES.EDT.T1 == TRUE) AND 조건) then { ExitLong("EL[#1]", ONCLOSE, DEF); } 감사합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-04-02 14:51:29

안녕하세요 예스스탁입니다. 1. if ( (MarketPosition >= 0) ) then #1번조건 { if ( (M3 > M4) AND (M4 > M5) ) then #2번조건 { if ( (M3.UTrend == TRUE) AND (M4.UTrend == TRUE) AND (M5.UTrend == TRUE) ) then#3번조건 { EBSx1A = TRUE; EBSx1A.TM = TimeToMinutes(stime); } if ((EBSx1A == TRUE) AND (TimeToMinutes(stime) >= EBSx1A.TM + EBSxTIME) ) then #4번조건 { EBSx1A = FALSE; EBSx1A.TM = -1; } } } 위 if조건을 보시면 EBSx1A이 false로 되는 조건이 1번,2번,3번이 모두 만족한 경우라야 false가 됩니다. 만약 1번,2번조건,3번이 만족해 true가 된다음에 15분 전에 정배열이 풀리게 되면 15분 후라도 false로 되지 않고 true가 유지가 됩니다. 아래와 같이 4번 조건을 2번밖에 위치해야 15분 후에 false로 값이 저장이 됩니다. if ( (MarketPosition >= 0) ) then #1번조건 { if ( (M3 > M4) AND (M4 > M5) ) then #2번조건 { if ( (M3.UTrend == TRUE) AND (M4.UTrend == TRUE) AND (M5.UTrend == TRUE) ) then#3번조건 { EBSx1A = TRUE; EBSx1A.TM = TimeToMinutes(stime); } } if ((EBSx1A == TRUE) AND (TimeToMinutes(stime) >= EBSx1A.TM + EBSxTIME) ) then #4번조건 { EBSx1A = FALSE; EBSx1A.TM = -1; } } 2. 매봉 조건만족하면 true아니면 false가 저장이 되므로 해당 특정시간에 초기화하는 부분은 불필요합니다. 아래와 같이 작성해 사용하시면 됩니다. // 진입 30분이후부터 청산 if MarketPosition == 1 Then{ AES.EDT.T1 = (TimeToMinutes(stime) >= TimeToMinutes(EntryTime) + 30); if ( (AES.EDT.T1 == TRUE) AND 조건) then { ExitLong("EL[#1]", ONCLOSE, DEF); } } 즐거운 하루되세요 > TRF 님이 쓴 글입니다. > 제목 : 문의 (F1) > 1. 아래와 같이 수식이 있습니다. M3 > M4 > M5와 M3, M4, M5 모두 상승시에만 EBSx1A = TRUE를 해주어야 하는데, 수식을 적용해보면 N분 이후에도 그렇치 않은 부분에서 신호가 발생합니다. 즉 15분이 지났는대도 M3 < M4 나 M3.UTrend == FALSE 조건이어도 신호가 발생됩니다. 원인을 찾지못해 도움을 요청드립니다. VARS: EBSxTIME(15); VARS: EBSx1A(FALSE),; VARS: EBSx1A.TM(-1); if ( (stime == 070000) OR ((stime > 070000 AND stime[1] < 070000)) ) then { EBSx1A = FALSE; EBSx1A.TM = -1; } if ( (MarketPosition >= 0) ) then { if ( (M3 > M4) AND (M4 > M5) ) then { if ( (M3.UTrend == TRUE) AND (M4.UTrend == TRUE) AND (M5.UTrend == TRUE) ) then { EBSx1A = TRUE; EBSx1A.TM = TimeToMinutes(stime); } if ( (EBSx1A == TRUE) AND (TimeToMinutes(stime) >= EBSx1A.TM + EBSxTIME) ) then { EBSx1A = FALSE; EBSx1A.TM = -1; } } } if ( (MarketPosition >= 0) ) then { if ( (EBSx1A == TRUE) AND 기타조건 ) then BUY("B"); } 2. 데이트레이딩 즉 당일청산이 아닐경우 아래 수식과 같이 날짜변경시 초기화하는 부분이 필요없다고 생각하는데 구지 쓰지 않아도 되는지요? 3. 테스트를 해보면 아래 초기화하는 부분이 있거나 없거나 상관없이 진입 30분 이후에 청산을 하게끔 했더니 원하는 곳에서 청산이 되질 않더군요. 검증부탁드립니다. VARS: AES.EDT.T1(FALSE), AES.EDT.T2(FALSE), AES.EDT.T3(FALSE); if ( (stime == 070000) OR ((stime > 070000 AND stime[1] < 070000)) ) then { AES.EDT.T1 = FALSE; AES.EDT.T2 = FALSE; AES.EDT.T3 = FALSE; } AES.EDT.T1 = (TimeToMinutes(stime) >= TimeToMinutes(EntryTime) + 30); AES.EDT.T2 = (TimeToMinutes(stime) >= TimeToMinutes(EntryTime) + 60); AES.EDT.T3 = (TimeToMinutes(stime) >= TimeToMinutes(EntryTime) + 90); // 진입 30분이후부터 청산 if ( (AES.EDT.T1 == TRUE) AND 조건) then { ExitLong("EL[#1]", ONCLOSE, DEF); } 감사합니다.