커뮤니티

[긴급오류]진입명변경안됨

프로필 이미지
회원
2013-12-13 13:58:40
145
글번호 70431
답변완료
주문관련해서 중복진입 허용조건 IF(MARKETPOSITION ==0) THEN IF(C==258.30) THEN SELL("S1",ONCLOSE,DEF,1); IF(MarketPosition == -1) THEN IF(ENTRYNAME =="S1" AND C==258.50) THEN { Messagelog("이름확인 %.2f, %s",EntryPrice,EntryName); SELL("S2", OnClose, DEF, 1); Messagelog("이름확인 %.2f, %s",EntryPrice,EntryName); } -원하는 것: S1진입후 S2진입되어 ENTRYNAME 이 S2로 변경되길 기대함 진입명이 S1일 경우에만 S2가 진입되길 원함 -결과 : 진입명이 변경되지 않고 S1으로 계속 남아 있음 그래서 S2가 계속 진입되는 상황입니다.
시스템
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2013-12-13 15:37:14

안녕하세요 예스스탁입니다. 모든 포지션 함수는 첫진입을 기준으로 값을 리턴합니다. 진입의 명칭은 피라미딩시에 항상 첫진입만 리턴합니다. 최종 진입이 아닙니다. S1으로 진입이후 S2로 한번만 추가 매도를 하실 의도이시면 아래와 같이 작성하시면 됩니다. IF(MARKETPOSITION ==0) THEN{ IF(C==258.30) THEN SELL("S1",ONCLOSE,DEF,1); } #매도포지션 진입 중이고 진입이 한번(최초매도)만 발생하고 있을 때만 S2진입 IF(MarketPosition == -1 and CurrentEntries == 1) then{ IF(ENTRYNAME =="S1" AND C==258.50 ) THEN { SELL("S2", OnClose, DEF, 1); } } 즐거운 하루되세요 > HI_bo****** 님이 쓴 글입니다. > 제목 : [긴급오류]진입명변경안됨 > 주문관련해서 중복진입 허용조건 IF(MARKETPOSITION ==0) THEN IF(C==258.30) THEN SELL("S1",ONCLOSE,DEF,1); IF(MarketPosition == -1) THEN IF(ENTRYNAME =="S1" AND C==258.50) THEN { Messagelog("이름확인 %.2f, %s",EntryPrice,EntryName); SELL("S2", OnClose, DEF, 1); Messagelog("이름확인 %.2f, %s",EntryPrice,EntryName); } -원하는 것: S1진입후 S2진입되어 ENTRYNAME 이 S2로 변경되길 기대함 진입명이 S1일 경우에만 S2가 진입되길 원함 -결과 : 진입명이 변경되지 않고 S1으로 계속 남아 있음 그래서 S2가 계속 진입되는 상황입니다.
프로필 이미지

회원

2013-12-13 15:56:12

> 예스스탁 님이 쓴 글입니다. > 제목 : Re : [긴급오류]진입명변경안됨 > 안녕하세요 예스스탁입니다. 모든 포지션 함수는 첫진입을 기준으로 값을 리턴합니다. 진입의 명칭은 피라미딩시에 항상 첫진입만 리턴합니다. 최종 진입이 아닙니다. S1으로 진입이후 S2로 한번만 추가 매도를 하실 의도이시면 아래와 같이 작성하시면 됩니다. IF(MARKETPOSITION ==0) THEN{ IF(C==258.30) THEN SELL("S1",ONCLOSE,DEF,1); } #매도포지션 진입 중이고 진입이 한번(최초매도)만 발생하고 있을 때만 S2진입 IF(MarketPosition == -1 and CurrentEntries == 1) then{ IF(ENTRYNAME =="S1" AND C==258.50 ) THEN { SELL("S2", OnClose, DEF, 1); } } 즐거운 하루되세요 > HI_bo****** 님이 쓴 글입니다. > 제목 : [긴급오류]진입명변경안됨 > 주문관련해서 중복진입 허용조건 IF(MARKETPOSITION ==0) THEN IF(C==258.30) THEN SELL("S1",ONCLOSE,DEF,1); IF(MarketPosition == -1) THEN IF(ENTRYNAME =="S1" AND C==258.50) THEN { Messagelog("이름확인 %.2f, %s",EntryPrice,EntryName); SELL("S2", OnClose, DEF, 1); Messagelog("이름확인 %.2f, %s",EntryPrice,EntryName); } -원하는 것: S1진입후 S2진입되어 ENTRYNAME 이 S2로 변경되길 기대함 진입명이 S1일 경우에만 S2가 진입되길 원함 -결과 : 진입명이 변경되지 않고 S1으로 계속 남아 있음 그래서 S2가 계속 진입되는 상황입니다. ======================================================== 함수설명에 보면요 EntryName(N) ※ N은 진입 위치.진입위치는 현재를 기준으로 역순으로 지정. ※ 최근 진입은 0, 직전 진입 1,…… ※ (0)은 생략가능 ※ 피라미딩 상황에서는 포지션이 시작되는 첫 진입의 이름 이렇게 되어 있고요 1. CurrentEntries를 이용해서 해볼려고 해도 진입이 이상하게 되네요 if(CurrentEntries==1 and c- EntryPrice>=0.2 and c-EntryPrice<=0.25) Then { Sell("s2",OnClose,def,1); } if(CurrentEntries ==2 and c- EntryPrice(1)>=0.4 and c-EntryPrice(1) <=0.45) Then { Sell("s3",OnClose,def,1); } if(CurrentEntries==3 and c- EntryPrice(2) >=0.8 and c-EntryPrice(2) <=0.85) Then { Sell("s4",OnClose,def,1); } if(CurrentEntries==4 and c- EntryPrice(3)>=1.2 and c-EntryPrice(3) <=1.25) Then { Sell("s5",OnClose,def,1); } 로 했만들어 봤더니 진입이 이상합니다. 예를 들어서 255에 첫진입(s1)이라면 255.20(s2), 255.40(s3), 255.80(s4), 256.20(s5) 진입을 해야 하는데 실제 데이터에서 255.95(s1)진입, 265.15(s2)진입, 255.70(s3)진입되었고요 2. 청산에 있어서도 IF(CurrentEntries == 2) Then if((EntryPrice+EntryPrice(1))/2 - c >= 0.05) Then ExitShort(); 최소 진입가격 ((s1)+(s2))/2 평균값 아래로 현재가 아래로 내려오면 청산하게 하면 청산이 안되는 경우도 있고 엉뚱하게 가격도 맞지 않는데 s2다음 봉에서 바로 청산되어 버리는 현상이 나타납니다. ENTRYPRICE가 정해지는 방식이 생각과 다른것 같은데요 ENTRYPRICE, ENTRYPRICE(1), ENTRYPRICE(2) ... 이 의미하는 정확한 의미는 무엇인지? ENTRYNAME, ENTRYNAME(1), ENTRYNAME(2) ... 이 의미하는 정확한 의미는 무엇인가요?
프로필 이미지

예스스탁 예스스탁 답변

2013-12-13 16:33:45

안녕하세요 예스스탁입니다. EntryName(N) 에서 N은 이전거래를 지칭합니다. 수식에서 하나의 거래는 진입에서 청산까지 입니다. 즉 최초 진입부터 전량 청산될때까지가 하나의 거래입니다. 진입("매수2") --> 청산(bx2) --> 진입("매도1") --> 청산("sx1") --> 진입("매수1") --> 현재 EntryName(0)은 현재 진행중인 포지션의 진입명칭입니다. --> "매수1" EntryName(1)은 가장 최근 청산완료된 거래에서 진입명칭 --> "매도1" EntryName(2)은 두번째 최근 청산완료된 거래에서 진입명칭 --> "매수2" 청산은 진행중인 청산이 없으므로 (0)은 없고 1부터 시작합니다 ExitName(1)은 가장 최근 청산완료된 거래에서 청산명칭 --> "sx1" ExitName(2)은 두번째 최근 청산완료된 거래에서 진입명칭 --> "bx2" 진입 --> 청산까지 여러번 분할진입이 있어도 첫번째 이름만 리턴합니다. 즉 피라미딩에서는 포지션을 시작하는 진입의 이름입니다. buy("매수1") --> buy("매수2") --> buy("매수3") 은 모두 하나의 포지션 상태이므로 진입명은 매수1이고 매수2나 매수3을 리턴하지는 않습니다. EntryPrice도 위와 같습니다. 즐거운 하루되세요 > HI_bo****** 님이 쓴 글입니다. > 제목 : Re : Re : [긴급오류]진입명변경안됨 > > 예스스탁 님이 쓴 글입니다. > 제목 : Re : [긴급오류]진입명변경안됨 > 안녕하세요 예스스탁입니다. 모든 포지션 함수는 첫진입을 기준으로 값을 리턴합니다. 진입의 명칭은 피라미딩시에 항상 첫진입만 리턴합니다. 최종 진입이 아닙니다. S1으로 진입이후 S2로 한번만 추가 매도를 하실 의도이시면 아래와 같이 작성하시면 됩니다. IF(MARKETPOSITION ==0) THEN{ IF(C==258.30) THEN SELL("S1",ONCLOSE,DEF,1); } #매도포지션 진입 중이고 진입이 한번(최초매도)만 발생하고 있을 때만 S2진입 IF(MarketPosition == -1 and CurrentEntries == 1) then{ IF(ENTRYNAME =="S1" AND C==258.50 ) THEN { SELL("S2", OnClose, DEF, 1); } } 즐거운 하루되세요 > HI_bo****** 님이 쓴 글입니다. > 제목 : [긴급오류]진입명변경안됨 > 주문관련해서 중복진입 허용조건 IF(MARKETPOSITION ==0) THEN IF(C==258.30) THEN SELL("S1",ONCLOSE,DEF,1); IF(MarketPosition == -1) THEN IF(ENTRYNAME =="S1" AND C==258.50) THEN { Messagelog("이름확인 %.2f, %s",EntryPrice,EntryName); SELL("S2", OnClose, DEF, 1); Messagelog("이름확인 %.2f, %s",EntryPrice,EntryName); } -원하는 것: S1진입후 S2진입되어 ENTRYNAME 이 S2로 변경되길 기대함 진입명이 S1일 경우에만 S2가 진입되길 원함 -결과 : 진입명이 변경되지 않고 S1으로 계속 남아 있음 그래서 S2가 계속 진입되는 상황입니다. ======================================================== 함수설명에 보면요 EntryName(N) ※ N은 진입 위치.진입위치는 현재를 기준으로 역순으로 지정. ※ 최근 진입은 0, 직전 진입 1,…… ※ (0)은 생략가능 ※ 피라미딩 상황에서는 포지션이 시작되는 첫 진입의 이름 이렇게 되어 있고요 1. CurrentEntries를 이용해서 해볼려고 해도 진입이 이상하게 되네요 if(CurrentEntries==1 and c- EntryPrice>=0.2 and c-EntryPrice<=0.25) Then { Sell("s2",OnClose,def,1); } if(CurrentEntries ==2 and c- EntryPrice(1)>=0.4 and c-EntryPrice(1) <=0.45) Then { Sell("s3",OnClose,def,1); } if(CurrentEntries==3 and c- EntryPrice(2) >=0.8 and c-EntryPrice(2) <=0.85) Then { Sell("s4",OnClose,def,1); } if(CurrentEntries==4 and c- EntryPrice(3)>=1.2 and c-EntryPrice(3) <=1.25) Then { Sell("s5",OnClose,def,1); } 로 했만들어 봤더니 진입이 이상합니다. 예를 들어서 255에 첫진입(s1)이라면 255.20(s2), 255.40(s3), 255.80(s4), 256.20(s5) 진입을 해야 하는데 실제 데이터에서 255.95(s1)진입, 265.15(s2)진입, 255.70(s3)진입되었고요 2. 청산에 있어서도 IF(CurrentEntries == 2) Then if((EntryPrice+EntryPrice(1))/2 - c >= 0.05) Then ExitShort(); 최소 진입가격 ((s1)+(s2))/2 평균값 아래로 현재가 아래로 내려오면 청산하게 하면 청산이 안되는 경우도 있고 엉뚱하게 가격도 맞지 않는데 s2다음 봉에서 바로 청산되어 버리는 현상이 나타납니다. ENTRYPRICE가 정해지는 방식이 생각과 다른것 같은데요 ENTRYPRICE, ENTRYPRICE(1), ENTRYPRICE(2) ... 이 의미하는 정확한 의미는 무엇인지? ENTRYNAME, ENTRYNAME(1), ENTRYNAME(2) ... 이 의미하는 정확한 의미는 무엇인가요?