커뮤니티

피라미딩 관련 문의드립니다.

프로필 이미지
파쿠3
2013-07-31 01:55:57
168
글번호 65948
답변완료
매번 답변 해주셔서 감사합니다. 피라미딩 관련하여 문의드립니다. 현재 피라미딩을 허용하고 있습니다. 첫 진입이 매수일 경우, 매수만 허용하고 첫 진입이 매도일 경우, 매도만 허용하고 있습니다. 기본로직은 아래식을 하고 있습니다. If countif(C > O,4) == 4 Buy("a"); SetStopProfittarget(10,PointStop); SetStopLoss(10,PointStop); 문제는 첫매수체결가 > 2차매수체결가 일 경우, 2차매수체결가 + 10pt 에서 첫매수체결가 먼저 체결을 해버리고 있습니다. 수식에서는 진입가격등 포지션 함수가 첫번째 진입신호를 기준으로 하고 있어서 이런 문제가 나오는 거 같습니다. 현재는 다음과 같이 문제를 해결했습니다만, 임시해결 로직이 타당한지 검토 부탁드립니다. 현재 임시 해결. 피라미딩 2의 경우, 아래와 같이 임시로 해결을 하고 있습니다. 진입조건은 동일한 피라미딩 구성이고요. 또한, 피라미딩 숫자를 Input : P(2); 으로 놓고 숫자를 변경하여 사용가능한 함수화된 로직 구성을 부탁드리고 싶습니다. If MarketPosition == 0 Then { If countif(C > O,3) == 3 Then { Buy("a1", OnClose, DEF, 1); value1 = C; } } If MarketPosition == 1 Then { If countif(C > O,3) == 3 Then { Buy("a2", OnClose, DEF, 1); value2 = C; Exitlong("a1S", Atstop, Value1 - 10, "a1"); Exitlong("a1L", AtLimit, Value1 + 10, "a1"); Exitlong("a2S", Atstop, Value1 - 10, "a2"); Exitlong("a2L", AtLimit, Value1 + 10, "a2");
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-07-31 10:57:18

안녕하세요 예스스탁입니다. 모든 포지션 함수는 첫진입을 기준으로 합니다. 피라미딩상 두번째 진입부터의 값을 변수를 따로 만들어 사용하셔야 합니다. 1. 피라미딩을 최대 P회까지 하고자하시면 아래와 같이 작성하시면 됩니다. 다만 작성하신 식의 경우 청산이 2회로 고정이 되어 있습니다. value1은 첫진입의 값이지만 value2는 2회이상일경우 가장최근 진입의 가격입니다. input : P(2); If MarketPosition == 0 Then { If countif(C > O,3) == 3 Then { Buy("a1", OnClose, DEF, 1); value1 = C; } } If MarketPosition == 1 and CurrentEntries < P then{ #진입누적을 P회 까지만 If countif(C > O,3) == 3 Then { Buy("a2", OnClose, DEF, 1); value2 = C; } } if MarketPosition == 1 then{ Exitlong("a1S", Atstop, Value1 - 10, "a1"); Exitlong("a1L", AtLimit, Value1 + 10, "a1"); Exitlong("a2S", Atstop, Value2 - 10, "a2"); Exitlong("a2L", AtLimit, Value2 + 10, "a2"); } 2. 피라미딩을 최대 P회 까지 하는데 중간에 일부 청산이 되면 더이상 진입을 하지 않고자 하시면 아래와 같이 조건 추가하시면 됩니다. 마찬가기로 청산이 2회로 고정이 되어 있습니다. value1은 첫진입의 값이지만 value2는 2회이상일경우 가장최근 진입의 가격입니다. input : P(2); If MarketPosition == 0 Then { If countif(C > O,3) == 3 Then { Buy("a1", OnClose, DEF, 1); value1 = C; } } If MarketPosition == 1 and CurrentEntries < P and #진입누적을 P회 까지만 countif(CurrentContracts < CurrentContracts,BarsSinceEntry) < 1 Then { #일부청산되면 추가진입없음 If countif(C > O,3) == 3 Then { Buy("a2", OnClose, DEF, 1); value1 = C; } } if MarketPosition == 1 then{ Exitlong("a1S", Atstop, Value1 - 10, "a1"); Exitlong("a1L", AtLimit, Value1 + 10, "a1"); Exitlong("a2S", Atstop, Value2 - 10, "a2"); Exitlong("a2L", AtLimit, Value2 + 10, "a2"); } 3. 손절이나 목표수익을 각 진입별로 하고자 하시면 강제청산 함수를 사용하셔야만 합니다. input : P(2); If MarketPosition == 0 Then { If countif(C > O,3) == 3 Then { Buy("a1", OnClose, DEF, 1); value1 = C; } } If MarketPosition == 1 and CurrentEntries < P then{ #진입누적을 P회 까지만 If countif(C > O,3) == 3 Then { Buy("a2", OnClose, DEF, 1); value2 = C; } } SetStopProfittarget(10,PointStop); SetStopLoss(10,PointStop); 수식에서 각 진입별로 진입가격을 기억해서 청산하게 작성하려면 피라미딩 수가 두번까지로 고정으로 되어야 하고 첫진입, 두번째진입, 세번째진입등 진입별로 나눠서 진입식을 작성해야 하고 변수도 다르게 설정해야 합니다. 강제청산함수는 기본이 각 진입별로 동작을 합니다. 4. 가장 마지막진입가격에서 +-10포인트 움직이면 전량 청산한다면 동일변수에 (value1)에 종가 저장하신후에 청산식에서 이용하셔야 합니다. input : P(2); If MarketPosition == 0 Then { If countif(C > O,3) == 3 Then { Buy("a1", OnClose, DEF, 1); value1 = C; } } If MarketPosition == 1 and CurrentEntries < P and #진입누적을 P회 까지만 countif(CurrentContracts < CurrentContracts,BarsSinceEntry) < 1 Then { #일부청산되면 추가진입없음 If countif(C > O,3) == 3 Then { Buy("a2", OnClose, DEF, 1); value1 = C; } } if MarketPosition == 1 then{ Exitlong("a1S", Atstop, Value1 - 10); Exitlong("a1L", AtLimit, Value1 + 10); } 즐거운 하루되세요 > 파쿠3 님이 쓴 글입니다. > 제목 : 피라미딩 관련 문의드립니다. > 매번 답변 해주셔서 감사합니다. 피라미딩 관련하여 문의드립니다. 현재 피라미딩을 허용하고 있습니다. 첫 진입이 매수일 경우, 매수만 허용하고 첫 진입이 매도일 경우, 매도만 허용하고 있습니다. 기본로직은 아래식을 하고 있습니다. If countif(C > O,4) == 4 Buy("a"); SetStopProfittarget(10,PointStop); SetStopLoss(10,PointStop); 문제는 첫매수체결가 > 2차매수체결가 일 경우, 2차매수체결가 + 10pt 에서 첫매수체결가 먼저 체결을 해버리고 있습니다. 수식에서는 진입가격등 포지션 함수가 첫번째 진입신호를 기준으로 하고 있어서 이런 문제가 나오는 거 같습니다. 현재는 다음과 같이 문제를 해결했습니다만, 임시해결 로직이 타당한지 검토 부탁드립니다. 현재 임시 해결. 피라미딩 2의 경우, 아래와 같이 임시로 해결을 하고 있습니다. 진입조건은 동일한 피라미딩 구성이고요. 또한, 피라미딩 숫자를 Input : P(2); 으로 놓고 숫자를 변경하여 사용가능한 함수화된 로직 구성을 부탁드리고 싶습니다. If MarketPosition == 0 Then { If countif(C > O,3) == 3 Then { Buy("a1", OnClose, DEF, 1); value1 = C; } } If MarketPosition == 1 Then { If countif(C > O,3) == 3 Then { Buy("a2", OnClose, DEF, 1); value2 = C; Exitlong("a1S", Atstop, Value1 - 10, "a1"); Exitlong("a1L", AtLimit, Value1 + 10, "a1"); Exitlong("a2S", Atstop, Value1 - 10, "a2"); Exitlong("a2L", AtLimit, Value1 + 10, "a2");