커뮤니티

피라미딩 관련해서 다시한번 문의드립니다.

프로필 이미지
파쿠3
2013-07-31 11:34:12
154
글번호 65964
답변완료
답변 감사드립니다. 궁금한 점이 있어서 문의드립니다. 1번 항목에 대한 질문 임의로 작성 한 식은 청산을 2회로만 쓴겁니다. P(5)로 할경우에 a1 ~ a5 까지 진입명을 다 지정해주고, 청산식도 5개를 다 써놓지 않고, P(5)로 INPUT 값을 적용하면 진입명이 순서대로 지정대고, 청산식도 5개 이름에 대해서 각각 작동할수는 없나요? value값도 value2~value5 까지 진입대로 부여를 하고요. 2번째부터 value2가 가장 최근진입의 종가가 아니라, 각 진입의 종가를 입력하고 싶습니다. 포지션이 0이면 진입명 a1 입력, 종가 value1 입력 포지션이 1이면 진입명 a2 입력, 종가 value2 입력 포지션이 2이면 진입명 a3 입력, 종가 value3 입력 ...... 여기서, 포지션이 청산이 되어 포지션이 2에서 1로 되지만 a2진입이 미청산이 경우에는 이름을 다른이름으로 부여해서 간섭이 안 일어났으면 하고요. 3번 항목에 대한 질문 강제청산함수는 기본이 각 진입별로 동작을 합니다.라고 하셨는데,, 강제청산함수를 써서 각각 체결을 하게 하려고 해도 진입명을 다 부여를 해야 하나요? 진입명을 모든 피라미딩에서 같게 할경우(매매 설정창에서 피라미딩 설정)에만 위와 같이 첫매수체결가 > 2차매수체결가 일 경우, 2차매수체결가 + 10pt 에서 첫매수체결가 먼저 체결을 하는건가요? 수식에서 각 진입별로 진입가격을 기억해서 청산하게 작성하려면 피라미딩 수가 두번까지로 고정으로 되어야 하고 첫진입, 두번째진입, 세번째진입등 진입별로 나눠서 진입식을 작성해야 하고 변수도 다르게 설정해야 합니다. 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"); } 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");
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-07-31 13:23:03

안녕하세요 예스스탁입니다. 1. 이름을 각자 부여하려면 수식에서 무조건 나열해 작성해야 합니다. 외부변수를 인지해서 이름을 자동으로 부여하거나 할수가 없습니다. 수식에서 진입별로 작성하려하면 진입횟수만큼 나열해서 작성하면서 이름도 각각 붙이고 서로다른 변수에 값 할당하면서 작성해야 합니다. 그러므로 외부변수로 진입횟수를 조절할수는 없습니다. 아래와 같이 진입순서대로 내열해 작성한 다음에 P값으로 진입횟수를 조절하게 작성하셔야 합니다. input : P(2); If MarketPosition == 0 and countif(C > O,3) == 3 Then { Buy("a1", OnClose, DEF, 1); value1 = C; } if MaxEntries < P then{ If MarketPosition == 1 and CurrentEntries == 1 and countif(C > O,3) == 3 Then { Buy("a2", OnClose, DEF, 1); value2 = C; } If MarketPosition == 1 and CurrentEntries == 2 and countif(C > O,3) == 3 Then { Buy("a3", OnClose, DEF, 1); value3 = C; } If MarketPosition == 1 and CurrentEntries == 3 and countif(C > O,3) == 3 Then { Buy("a4", OnClose, DEF, 1); value4 = C; } If MarketPosition == 1 and CurrentEntries == 4 and countif(C > O,3) == 3 Then { Buy("a5", OnClose, DEF, 1); value5 = C; } } if MarketPosition == 1 then{ if CurrentEntries >= 1 Then{ Exitlong("a1S", Atstop, Value1 - 10, "a1"); Exitlong("a1L", AtLimit, Value1 + 10, "a1"); } if CurrentEntries >= 2 Then{ Exitlong("a2S", Atstop, Value2 - 10, "a2"); Exitlong("a2L", AtLimit, Value2 + 10, "a2"); } if CurrentEntries >= 3 Then{ Exitlong("a3S", Atstop, Value3 - 10, "a3"); Exitlong("a3L", AtLimit, Value3 + 10, "a3"); } if CurrentEntries >= 4 Then{ Exitlong("a4S", Atstop, Value4 - 10, "a4"); Exitlong("a4L", AtLimit, Value4 + 10, "a4"); } if CurrentEntries >= 5 Then{ Exitlong("a5S", Atstop, Value5 - 10, "a5"); Exitlong("a5L", AtLimit, Value5 + 10, "a5"); } } 2. 강제청산함수는 자동으로 개별 진입을 인지합니다. 그러므로 따로 이름을 따로 부여하실 필요는 없습니다. 같은 이름도 여러번 발생하면 모두 다른 진입으로 인지하고 각 신호별 진입가격도 모두 따로 인지합니다. 그러므로 개별진입의 진입가별로 청산하고자 하실때는 1번과 같이 식을 나열해서 작성하시는 것보다는 강제청산 함수로 손절이나 목표이익 청산하게 하는것이 식작성이 간결합니다. 말씀하신 것과 같이 이름을 다 각자 붙이고자 하시면 1번식과 같이 나열해 작성하셔야만 합니다. 좀더 자세한 내용을 원하시면 02-3453-1060으로 전화주시기 바랍니다. 즐거운 하루되세요 > 파쿠3 님이 쓴 글입니다. > 제목 : 피라미딩 관련해서 다시한번 문의드립니다. > 답변 감사드립니다. 궁금한 점이 있어서 문의드립니다. 1번 항목에 대한 질문 임의로 작성 한 식은 청산을 2회로만 쓴겁니다. P(5)로 할경우에 a1 ~ a5 까지 진입명을 다 지정해주고, 청산식도 5개를 다 써놓지 않고, P(5)로 INPUT 값을 적용하면 진입명이 순서대로 지정대고, 청산식도 5개 이름에 대해서 각각 작동할수는 없나요? value값도 value2~value5 까지 진입대로 부여를 하고요. 2번째부터 value2가 가장 최근진입의 종가가 아니라, 각 진입의 종가를 입력하고 싶습니다. 포지션이 0이면 진입명 a1 입력, 종가 value1 입력 포지션이 1이면 진입명 a2 입력, 종가 value2 입력 포지션이 2이면 진입명 a3 입력, 종가 value3 입력 ...... 여기서, 포지션이 청산이 되어 포지션이 2에서 1로 되지만 a2진입이 미청산이 경우에는 이름을 다른이름으로 부여해서 간섭이 안 일어났으면 하고요. 3번 항목에 대한 질문 강제청산함수는 기본이 각 진입별로 동작을 합니다.라고 하셨는데,, 강제청산함수를 써서 각각 체결을 하게 하려고 해도 진입명을 다 부여를 해야 하나요? 진입명을 모든 피라미딩에서 같게 할경우(매매 설정창에서 피라미딩 설정)에만 위와 같이 첫매수체결가 > 2차매수체결가 일 경우, 2차매수체결가 + 10pt 에서 첫매수체결가 먼저 체결을 하는건가요? 수식에서 각 진입별로 진입가격을 기억해서 청산하게 작성하려면 피라미딩 수가 두번까지로 고정으로 되어야 하고 첫진입, 두번째진입, 세번째진입등 진입별로 나눠서 진입식을 작성해야 하고 변수도 다르게 설정해야 합니다. 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"); } 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");