커뮤니티

시스템식 문의 드립니다.

프로필 이미지
사신의눈
2011-09-24 15:24:21
583
글번호 42992
답변완료
안녕하세요. 분할매수 시스템식을 구성해 보았는데요. 시뮬레이션을 돌려보면 2차매수, 3차매수, 매도 신호가 발생하지 않습니다. 우선 전략 설명 드릴게요. 1. 주식/선물/옵션 중에 주식에서만 사용할 거구요. 2. 1000만원 투자금으로 40%, 30%, 30% 비중으로 분할 매수합니다. 3. 매수조건 - 엔벨로프 하단선에 닿으면 1차매수 - 1차 매수가 보다 7% 더 떨어지면 2차매수 - 2차 매수가 보다 7% 더 떨어지면 3차매수 4. 청산조건 : 평균 매수가에서 3% 수익 발생 시 매수전량 매도 [ 시스템식 ] input : 투자총액(500000), 엔벨로프폭(20), 분할매수폭(7), 목표수익률(3) ; Variables: 매수상태(0), 매수가1(0), 매수량1(0), 평균매수가1(0), 목표가1(0), 매수가2(0), 매수량2(0), 평균매수가2(0), 목표가2(0), 매수가3(0), 매수량3(0), 평균매수가3(0), 목표가3(0) ; 매수가1 = EnvelopeDown( 20,엔벨로프폭 ) ; 매수가2 = 매수가1 / ( 1 + 분할매수폭/100) ; 매수가3 = 매수가2 / ( 1 + 분할매수폭/100) ; 매수량1 = int((투자총액 * 0.4)/C) ; 매수량2 = int((투자총액 * 0.3)/C) ; 매수량3 = int((투자총액 * 0.3)/C) ; If MarketPosition() == 0 Then 매수상태 = 0 ; If MarketPosition() == 0 and L > 매수가1 and 1440 > TimeToMinutes(stime) Then { Buy("매수1", AtLimit, 매수가1, 매수량1) ; 평균매수가1 = 매수가1 ; 목표가1 = 평균매수가1 * (1+목표수익률/100) ; if L <= 매수가1 then 매수상태 = 1 ; ExitLong("매도1",AtLimit,목표가1,"", 매수량1) ; } If 매수상태 == 1 Then { Buy("매수2", AtLimit, 매수가2, 매수량2) ; 평균매수가2 = (매수가1 + 매수가2)/2 ; 목표가2 = 평균매수가2 * (1+목표수익률/100) ; if L <= 매수가2 then 매수상태 = 2 ; ExitLong("매도2",AtLimit,목표가2,"", 매수량1+매수량2 ; } If 매수상태 == 2 Then { Buy("매수3", AtLimit, 매수가3, 매수량3) ; 평균매수가3 = (매수가1 + 매수가2 + 매수가3)/3 ; 목표가3 = 평균매수가3 * (1+목표수익률/100) ; if L <= 매수가3 then 매수상태 = 3 ; ExitLong("매도3",AtLimit,목표가3,"", 매수량1+매수량2+매수량3) ; } [ 질문요지] 아무래도 제가 함수나 수식을 잘못 이해하고 있는 부분이 있는것 같은데, 그게 어딘지 모르겠어요.. ㅠ.ㅠ 분할 매수/매도와 관련한 Q/A도 읽어봤는데, 대부분 관리자님께서는 CurrentContracts 나 CurrentEntries 같은 함수들을 이용하시는것 같더라구요. 근데 전 이 함수들이 정확히 어떤 값을 돌려주는 지 알수 없어서, (메뉴얼에 "포지션의 청산되지 않은 진입 횟수" 이렇게 나와있지만 정확히 이해가 되지 않고, "포지션"이라는 말 때문에 선물이 아닌 주식에도 동일하게 적용되는지 확실치 않아서..) 아무튼 그래서 최대한 어려운 함수를 쓰지 않고 작성해 보았는데 잘 안되네요.. 왜 2차매수, 3차매수, 매도 신호가 나오지 않는지, 어느 부분이 잘못된 것인지 찾아주시면 정말 감사하겠습니다.. 매수상태를 매기는 것에 문제가 있는게 아닌가 추측해 보지만, 단지 추측일 뿐이라.. 혹시 너무 엉터리 수식이라 잘못을 수정하기 힘든정도라면, 전략 내용을 보시고 새로 짜 주셔도... -_-;;; 긴 글 읽어 주셔서 감사합니다. 꾸벅.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2011-09-26 15:04:38

안녕하세요 예스스탁입니다. input : 투자총액(500000), 엔벨로프폭(20), 분할매수폭1(7), 분할매수폭2(14),목표수익률(3) ; Variables: 매수량1(0),매수량2(0),매수량3(0); if CodeCategory == 1 Then{ #코스피 if BasePrice < 50000 Then{ 매수량1 = int(int((투자총액*0.4)/C)/10)*10; 매수량2 = int(int((투자총액*0.3)/C)/10)*10; 매수량3 = int(int((투자총액*0.3)/C)/10)*10; } Else{ 매수량1 = int((투자총액*0.4)/C); 매수량2 = int((투자총액*0.3)/C); 매수량3 = int((투자총액*0.3)/C); } } if CodeCategory == 2 Then{ 매수량1 = int((투자총액*0.4)/C); 매수량2 = int((투자총액*0.3)/C); 매수량3 = int((투자총액*0.3)/C); } var1 = EnvelopeDown(20,엔벨로프폭); #첫매수(진입신호가 없는 상태) if MarketPosition == 0 and stime < 144000 Then buy("b",atlimit,var1,매수량1); #첫매수이후 첫매수가-7%에 추가매수 if MarketPosition == 1 and CurrentEntries == 1 Then buy("b2",atlimit,EntryPrice*(1-분할매수폭1/100),매수량2); #첫매수이후 두번매수가-7%에 추가매수 #(두번째 매수가 첫매수-7%이므로 첫매수-14%로 지정) if MarketPosition == 1 and CurrentEntries == 2 Then buy("b3",atlimit,EntryPrice*(1-분할매수폭2/100),매수량3); if MarketPosition == 1 Then exitlong("bx",atlimit,AvgEntryPrice*(1+목표수익률/100)); 식을 수정했습니다. 시스템 트레이딩 설정화면의 피라미딩 탭에서 피라미딩을 다른진입신호만 허용으로 지정하시기 바랍니다. 즐거운 하루되세요 > 사신의눈 님이 쓴 글입니다. > 제목 : 시스템식 문의 드립니다. > 안녕하세요. 분할매수 시스템식을 구성해 보았는데요. 시뮬레이션을 돌려보면 2차매수, 3차매수, 매도 신호가 발생하지 않습니다. 우선 전략 설명 드릴게요. 1. 주식/선물/옵션 중에 주식에서만 사용할 거구요. 2. 1000만원 투자금으로 40%, 30%, 30% 비중으로 분할 매수합니다. 3. 매수조건 - 엔벨로프 하단선에 닿으면 1차매수 - 1차 매수가 보다 7% 더 떨어지면 2차매수 - 2차 매수가 보다 7% 더 떨어지면 3차매수 4. 청산조건 : 평균 매수가에서 3% 수익 발생 시 매수전량 매도 [ 시스템식 ] input : 투자총액(500000), 엔벨로프폭(20), 분할매수폭(7), 목표수익률(3) ; Variables: 매수상태(0), 매수가1(0), 매수량1(0), 평균매수가1(0), 목표가1(0), 매수가2(0), 매수량2(0), 평균매수가2(0), 목표가2(0), 매수가3(0), 매수량3(0), 평균매수가3(0), 목표가3(0) ; 매수가1 = EnvelopeDown( 20,엔벨로프폭 ) ; 매수가2 = 매수가1 / ( 1 + 분할매수폭/100) ; 매수가3 = 매수가2 / ( 1 + 분할매수폭/100) ; 매수량1 = int((투자총액 * 0.4)/C) ; 매수량2 = int((투자총액 * 0.3)/C) ; 매수량3 = int((투자총액 * 0.3)/C) ; If MarketPosition() == 0 Then 매수상태 = 0 ; If MarketPosition() == 0 and L > 매수가1 and 1440 > TimeToMinutes(stime) Then { Buy("매수1", AtLimit, 매수가1, 매수량1) ; 평균매수가1 = 매수가1 ; 목표가1 = 평균매수가1 * (1+목표수익률/100) ; if L <= 매수가1 then 매수상태 = 1 ; ExitLong("매도1",AtLimit,목표가1,"", 매수량1) ; } If 매수상태 == 1 Then { Buy("매수2", AtLimit, 매수가2, 매수량2) ; 평균매수가2 = (매수가1 + 매수가2)/2 ; 목표가2 = 평균매수가2 * (1+목표수익률/100) ; if L <= 매수가2 then 매수상태 = 2 ; ExitLong("매도2",AtLimit,목표가2,"", 매수량1+매수량2 ; } If 매수상태 == 2 Then { Buy("매수3", AtLimit, 매수가3, 매수량3) ; 평균매수가3 = (매수가1 + 매수가2 + 매수가3)/3 ; 목표가3 = 평균매수가3 * (1+목표수익률/100) ; if L <= 매수가3 then 매수상태 = 3 ; ExitLong("매도3",AtLimit,목표가3,"", 매수량1+매수량2+매수량3) ; } [ 질문요지] 아무래도 제가 함수나 수식을 잘못 이해하고 있는 부분이 있는것 같은데, 그게 어딘지 모르겠어요.. ㅠ.ㅠ 분할 매수/매도와 관련한 Q/A도 읽어봤는데, 대부분 관리자님께서는 CurrentContracts 나 CurrentEntries 같은 함수들을 이용하시는것 같더라구요. 근데 전 이 함수들이 정확히 어떤 값을 돌려주는 지 알수 없어서, (메뉴얼에 "포지션의 청산되지 않은 진입 횟수" 이렇게 나와있지만 정확히 이해가 되지 않고, "포지션"이라는 말 때문에 선물이 아닌 주식에도 동일하게 적용되는지 확실치 않아서..) 아무튼 그래서 최대한 어려운 함수를 쓰지 않고 작성해 보았는데 잘 안되네요.. 왜 2차매수, 3차매수, 매도 신호가 나오지 않는지, 어느 부분이 잘못된 것인지 찾아주시면 정말 감사하겠습니다.. 매수상태를 매기는 것에 문제가 있는게 아닌가 추측해 보지만, 단지 추측일 뿐이라.. 혹시 너무 엉터리 수식이라 잘못을 수정하기 힘든정도라면, 전략 내용을 보시고 새로 짜 주셔도... -_-;;; 긴 글 읽어 주셔서 감사합니다. 꾸벅.