커뮤니티

수식 문제 해결 부탁드립니다.

프로필 이미지
회원
2010-08-03 19:57:52
680
글번호 31330
답변완료
15063의 문제와 관련해서 나름의 해결방법을 생각해봤습니다. 즉, 제가 의도하는 시스템 식은 [ 진입과 관련해서는 당일 최저가와 최고가의 차이가 30% 이상이고, 현재가가가 당일 최저가 보다 20% 이상 상승시에 최초 매수진입하는 것입니다. 이후 최초 진입가 보다 0.10 포인트 상승할 때 마다 추가로 매입합니다. 피라미드지요. 청산과 관련해서는 추가 진입 후에 "평균매입단가(AvgEntryPrice) + 0.02" 까지 떨어졌을 때, 최초 진입 분만 남겨두고 모두 청산하는 것입니다. 당일 일괄 청산은 2시 30분에 하고요. ] ----> "A" 발생하는 문제는 앞서의 질문(15063)에서와 같이 추가진입시 0.10 포인트 상승시마다 한 번 씩만 진입해야 하는데 조건 만족시 마다 계속 재진입이 일어나는 것입니다. 제 나름대로 생각해 본 해결책은 아래의 식과 같이 최초진입 후 0.10 포인트 마다 수식을 새롭게 정의 해 주는 것입니다. 그리고 피라미드에서 "모든 진입신호 허용"이 아닌, "다른 진입신호만 허용"으로 바꿔 주는 겁니다. 이렇게 하면 "BB" 나 "CC" 는 한번 씩만 발생을 할 듯 합니다. 다만 이렇게 해도 "BB" 신호가 발생 후 "bx" 의 청산신호가 나와서 청산이 되면 다시 "BB" 신호가 발생해서 진입한다는 것입니다. 이걸 해결하기 위해서 "bx", "cx", "dx" 등의 청산신호가 한 번 이라도 발생했다면 추가진입을 허용하지 않으면 될 듯합니다. 이렇게 하면, 추가진입 후 청산이 됐다면 그 이후에는 진입을 하지 않고, 청산이 안 됐다면 "다른 진입신호만 허용" 이니까 "CC" 나 "DD" 등의 다른 신호에만 반응 할 것으로 보입니다. 근데 청산신호가 한 번 이라도 발생했다면 추가진입을 허용하지 않는 것을 수식으로 구현하기가 어렵네요. 가능하게 수식 수정 좀 부탁드립니다. P.S. 만약 위의 내용이 맞지 않는다면 위의 [ ] 로 묶인 "A"의 의도와 맞는 식으로 가능한 식을 좀 부탁드리겠습니다. (꼭 atstop 으로 구현하지 않더라도 상관없을 듯 합니다.) 긴글에 다소 산만한 듯 해서 죄송합니다. 그럼 부탁드리겠습니다. #최초진입 if MarketPosition == 0 and daylow*1.3 < H and stime < 150000 Then{ buy("b",AtStop,daylow*1.2); } #추가진입 if MarketPosition == 1 and C > EntryPrice+0.1 Then buy("BB"); if MarketPosition == 1 and C > EntryPrice+0.2 Then buy("CC"); if MarketPosition == 1 and C > EntryPrice+0.3 Then buy("DD"); if MarketPosition == 1 Then exitlong("bx",AtStop,AvgEntryPrice+0.02,"BB"); if MarketPosition == 1 Then exitlong("cx",AtStop,AvgEntryPrice+0.02,"CC"); if MarketPosition == 1 Then exitlong("dx",AtStop,AvgEntryPrice+0.02,"DD"); SetStopEndofday(143000);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2010-08-05 15:00:25

안녕하세요 예스스탁입니다. 다른진입신호허용으로 설정하셔도 해당 명칭이 진입이 들어간 후 청산이 된다면 해당 진입이 또 들어갈수 있습니다. 또한 하나의 봉에서 진입과 청산이 같이 발생된다면 이 부분은 컨트롤이 불가합니다. 최대한 위와 같은 상황을 피하게 식을 작성해 봤습니다 #최초진입 if MarketPosition == 0 and daylow*1.3 < dayhigh and stime < 150000 and H < daylow*1.2 Then{ buy("b",AtStop,daylow*1.2); } #추가진입 if countif(CurrentEntries < CurrentEntries[1],BarsSinceEntry) < 1 Then{ if MarketPosition == 1 and CurrentEntries == 1 and highest(H,BarsSinceEntry) < EntryPrice+0.1 Then buy("BB",AtStop,EntryPrice+0.1); if MarketPosition == 1 and CurrentEntries == 2 and highest(H,BarsSinceEntry) < EntryPrice+0.2 Then buy("CC",AtStop,EntryPrice+0.2); if MarketPosition == 1 and CurrentEntries == 3 and highest(H,BarsSinceEntry) < EntryPrice+0.3 Then buy("DD",AtStop,EntryPrice+0.3); } if MarketPosition == 1 Then exitlong("bx",AtStop,AvgEntryPrice+0.02,"BB"); if MarketPosition == 1 Then exitlong("cx",AtStop,AvgEntryPrice+0.02,"CC"); if MarketPosition == 1 Then exitlong("dx",AtStop,AvgEntryPrice+0.02,"DD"); SetStopEndofday(143000); 만약 atstop이아닌 onclose타입도 괜찮으시다면 래식을 사용하시면 됩니다. if date != date[1] Then{ Condition1 = false; Condition2 = false; Condition3 = false; } #최초진입 if MarketPosition == 0 and daylow*1.3 < dayhigh and crossup(c,daylow*1.2) Then{ buy("b"); } #추가진입 if MarketPosition == 1 and CurrentEntries == 1 and crossup(c,EntryPrice+0.1) and Condition1 == False Then{ buy("BB"); Condition1 = true; } if MarketPosition == 1 and CurrentEntries == 2 and crossup(c,EntryPrice+0.2) and Condition2 == False Then{ buy("CC"); Condition2 = true; } if MarketPosition == 1 and CurrentEntries == 3 and crossup(c,EntryPrice+0.3) and Condition3 == False Then{ buy("DD"); Condition3 = True; } if MarketPosition == 1 Then exitlong("bx",AtStop,AvgEntryPrice+0.02,"BB"); if MarketPosition == 1 Then exitlong("cx",AtStop,AvgEntryPrice+0.02,"CC"); if MarketPosition == 1 Then exitlong("dx",AtStop,AvgEntryPrice+0.02,"DD"); SetStopEndofday(143000); 즐거운 하루되세요 > WT_mbloc 님이 쓴 글입니다. > 제목 : 수식 문제 해결 부탁드립니다. > 15063의 문제와 관련해서 나름의 해결방법을 생각해봤습니다. 즉, 제가 의도하는 시스템 식은 [ 진입과 관련해서는 당일 최저가와 최고가의 차이가 30% 이상이고, 현재가가가 당일 최저가 보다 20% 이상 상승시에 최초 매수진입하는 것입니다. 이후 최초 진입가 보다 0.10 포인트 상승할 때 마다 추가로 매입합니다. 피라미드지요. 청산과 관련해서는 추가 진입 후에 "평균매입단가(AvgEntryPrice) + 0.02" 까지 떨어졌을 때, 최초 진입 분만 남겨두고 모두 청산하는 것입니다. 당일 일괄 청산은 2시 30분에 하고요. ] ----> "A" 발생하는 문제는 앞서의 질문(15063)에서와 같이 추가진입시 0.10 포인트 상승시마다 한 번 씩만 진입해야 하는데 조건 만족시 마다 계속 재진입이 일어나는 것입니다. 제 나름대로 생각해 본 해결책은 아래의 식과 같이 최초진입 후 0.10 포인트 마다 수식을 새롭게 정의 해 주는 것입니다. 그리고 피라미드에서 "모든 진입신호 허용"이 아닌, "다른 진입신호만 허용"으로 바꿔 주는 겁니다. 이렇게 하면 "BB" 나 "CC" 는 한번 씩만 발생을 할 듯 합니다. 다만 이렇게 해도 "BB" 신호가 발생 후 "bx" 의 청산신호가 나와서 청산이 되면 다시 "BB" 신호가 발생해서 진입한다는 것입니다. 이걸 해결하기 위해서 "bx", "cx", "dx" 등의 청산신호가 한 번 이라도 발생했다면 추가진입을 허용하지 않으면 될 듯합니다. 이렇게 하면, 추가진입 후 청산이 됐다면 그 이후에는 진입을 하지 않고, 청산이 안 됐다면 "다른 진입신호만 허용" 이니까 "CC" 나 "DD" 등의 다른 신호에만 반응 할 것으로 보입니다. 근데 청산신호가 한 번 이라도 발생했다면 추가진입을 허용하지 않는 것을 수식으로 구현하기가 어렵네요. 가능하게 수식 수정 좀 부탁드립니다. P.S. 만약 위의 내용이 맞지 않는다면 위의 [ ] 로 묶인 "A"의 의도와 맞는 식으로 가능한 식을 좀 부탁드리겠습니다. (꼭 atstop 으로 구현하지 않더라도 상관없을 듯 합니다.) 긴글에 다소 산만한 듯 해서 죄송합니다. 그럼 부탁드리겠습니다. #최초진입 if MarketPosition == 0 and daylow*1.3 < H and stime < 150000 Then{ buy("b",AtStop,daylow*1.2); } #추가진입 if MarketPosition == 1 and C > EntryPrice+0.1 Then buy("BB"); if MarketPosition == 1 and C > EntryPrice+0.2 Then buy("CC"); if MarketPosition == 1 and C > EntryPrice+0.3 Then buy("DD"); if MarketPosition == 1 Then exitlong("bx",AtStop,AvgEntryPrice+0.02,"BB"); if MarketPosition == 1 Then exitlong("cx",AtStop,AvgEntryPrice+0.02,"CC"); if MarketPosition == 1 Then exitlong("dx",AtStop,AvgEntryPrice+0.02,"DD"); SetStopEndofday(143000);