커뮤니티
수식 문제 해결 부탁드립니다.
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);
다음글
이전글