지난 1, 2편에 이어 이번에는 양매도 진입 조건으로 양합 이동평균선 5/20 데드크로스를 이용하는 전략에 대한 시뮬 결과를 보겠습니다.

 

 

시뮬 데이터는 아래와 같습니다.

 

거래대상 : Weekly 옵션 4/20일 만기

거래행사가쌍 :  [315, 317, 320, 322, 325, 327, 330, 332, 335, 337]

거래일 : 20230413

진입 : 거래 쌍 양합 이평 5/20 데드 크로스 나는 시점

청산 : 익절(150,000), 손절(-95,000) 혹은 이평 이평 60/120일 골드크로스

슬리피지 : 2.5 tick (양매도 한쌍 기준)

계약 수 : 콜/풋 각 1개

 

진입 : ma 5/20  빨간 색이면 ma5가 큰 값, 파란색은 ma20이 큰 값.  따라서 빨간색에서 파란색으로 변하는 첫 시점이 데드크로스임

 

청산 : ma 60/120  기준 파란색에서 빨간색으로 변하는 첫 시점이 골드크로스임

참고로, 청산시에 출력되는 수익은 수수료/슬리피지 고려하지 않은 금액임

 

중간 과정을 생략하고 끝까지 돌려보면 아래와 같은 결과가 나옵니다.

결론적으로 위 조건으로 돌렸을 때 4승 3패, 62,500원 수익이 났으나 slipage 때문에 손실로 마감합니다.

 

시스템 트레이딩에서 슬리피지가 중요함을 다시 한번 생각하게 됩니다. 

 

이 전략에서 슬리피지를 줄이기 위해서는 매매 횟수를 줄이면 됩니다. 빨간 박스를 한 매매 내역을 보면 양합 차이가 별로 없음에도 불구하고 ma 60/120 골드 크로스가 생기자 마자 청산을 하고 있습니다. ma 60/120 골드크로스가 생기더라도 손실에 대한 losscut에 다다를 때까지 기다리는 전략을 적용해보겠습니다.

 

간단하게 코드를 보면 로스 컷을 확인하는 부분을 추가하면 됩니다.

        if changed and self.who_upper_60 == 60:
            if ent_sum + self.get_loss_cut_by_tick() < cur_sum :
                return 1, 1

이렇게 진입 횟수를 조절한 전략의 결과는 아래와 같습니다.

원하는 대로 ma 60/120 골드크로스가 생기더라도 loss cut이 발생하지 않으면 무시한 결과 약 수익으로 마무리되었습니다.

 

ma 60/120 골드 크로스시 바로 혹은 일정 시간 후 청산과 loss cut까지 기다리는 것 중 어느 것이 좋을지는 많은 데이터로 시뮬을 해 보고 결론을 내려야할 것 같습니다. 지금 상태는 수익에 비하여 슬리피지가 워낙 큰 상태라 적절한 loss cut까지 기다리는 것이 나쁘지않은 전략으로 생각이 됩니다.

 

좀더 다양한 일자/다양한 옵션에 대하여 백테트스트 진행한 후 결과 공유하겠습니다.

 

---------------------------

앞으로 작업할 내용은 다음과 같습니다.

1. weekly option 대상 다양화

2. 정규 옵션 back test

3. 최대 수익이 나는 익절과 손절 값 찾아보기 (현재는 익절 70,000원, 손절 -70,000원) : 완료

4. 특정 양매도 조합에서 청산 후 다시 진입하는 것이 유리한지 여부

5. 시간적인 관점에서 다양한 양매도 진입 시점(현재는 등가 +- 5%) 

     장시작, 장 시작 후 30분, 40분, 1시간, 2시간 이후 등등 

6. 가격적인 관점에서 다양한 양매도 진입  시점 (현재는 장 중 등가 +- 5% 시점)

    선물이 급격하게 움직일 때, 장기간 횡보할 때 등등

7. 매도에 적절한 옵션가격 : 

     2.50 이하 혹은 0.8이상 등등

8. 손절 대신 한 호가 위 혹은 아래 옵션 매수 본전 선에서 익절 ( 가치성장님 아이디어 )

9. ma 5/20 데드크로스시 진입, ma60/120 골드크로스시 청산 : 완료

반응형

설정

트랙백

댓글

예스트레이더(Yes Trader)에서 옵션 양합차트 그리는 방법은 아래 글에 자세히 기술되어 있습니다.

https://money-expert.tistory.com/80

 

예스트레이더(Yes Trader)에서 옵션 양합차트 보기

옵션 매매를 하다보면 양합의 흐름을 보는 것이 중요합니다. 매도할지 매수할지를 양합의 추이를 보고 판단할 수 있는데요. 실시간 옵션 데이터를 API로 받아서 직접 차트를 만들 수도 있지만 사

money-expert.tistory.com

 

이번에는 양합 차트를 좀 더 upgrade해서 보기 쉽게 해보겠습니다.

단톡방 가치성장님이 양합의 5/20 이동평균선을 보면 양매도 시점을 잘 파악할 수 있다고 언급해주셨고, yes trader에서 사용하는 차트를 보여주셨습니다.

 

이에 yes trader를 이용하여 양합의 이평선을 함께 보여주는 방법에 대하여 정리하도록 하겠습니다.

 

양합 차트를 만들 때 사용하는 양합 수식을 아래와 같이 수정하여 주세요.

 

plot1(data1(c)+data2(c));
Plot2(ma((data1(c)+data2(c)),5), "이동평균5");
Plot3(ma((data1(c)+data2(c)),20), "이동평균20");

 

양합에 대한 5/20일 이평선을 추가하는 부분입니다. 만약 5/20이 아닌 다른 이평을 사용하신다면 적절한 숫자로 대체하시면 됩니다.

 

이렇게 수정한 수식을 기반으로 양합차트는 그렸다고 가정하겠습니다. 그러면 이렇게 화면에 보일겁니다.

뭔가 보이는 것 같은데 조금 어수선하죠. 그래서 이평 골드/데드 크로스 시점을 직관적으로 알 수 있도록 채우기 기능을 사용해보았습니다.

 

1. 양합 차트에서 오른쪽 마우스 클릭하여 지표속성을 선택한다.

2. 차트표시 tab에서 채우기를 선택한다. 

3. 이동평균5 > 이동평균20 선택하고 발강색, 선은 가장 굵은 것으로 선택한 후 추가 버튼을 누른다(색은 원하는 취향대로).  다음으로 작은 경우도 선택하고 색도 선택한 후 추가 버튼을 누른다. 확인 또 확인을 누른다.

4. 이동평균 gold/dead를 쉽게 파악할 수 있는 양합 차트가 완성된다.

5. 관리 메뉴에서 화면틀보관하기에서 적절한 이름을 입력하고 저장한다.

 

장 중 양합의 움직임을 파악하면서 양합 5/20MA값이 데드크로스 되는 시점이 양매도 진입하기 적절한 시점이라고 합니다.

 

이상 Yes Trader를 이용한 양합 차트 그리는 방법에 대하여 정리하였습니다. 양매도 하시는 분들의 지표가 될 것 같아서 기분이 아주 좋습니다. 이러한 정보를 나눠주신 가치성장님께 다시 한번 감사드립니다.

 

반응형

설정

트랙백

댓글

1편에 이어서 향후 해야할 일들 3번에 나오는 최적의 익절/손절 값을 찾아보겠습니다.

프로그램으로 백테스트를 하면 이런 식으로 파라미터를 조절하면서 확인하는 것이 용이합니다. 물론 추가 개발이 필요합니다만, 한번 개발하면 계속 사용할 수 있기 때문에 투자할 만 합니다.

 

익절 : 20,000 ~ 100,000원

손절 : -20,000 ~ -100,000원

 

손절이 익절보다 큰 경우는 제외하였습니다.

 

 

결과를 간단하게 정리해보겠씁니다.

23일은 양매도는 손실이 발생하는 날입니다. 어떤 조합도 손실을 막을 수는 없습니다. 이런 날은 빨리 손절하고 쉬는 것이 정신 건강에 좋습니다.

 

24일은 대부분 수익이 나는 날인데요. 얼마나 수익을 내느냐는 파라미터에 따라서 차이가 많이 납니다.

  • - 최저 -27,000부터 최고 363,000원까지 다양
  • 손실이 나는 구간도 익절/손절 금액을 높이면 익절이 남. 양매도는 시간과의 싸움이라 적당한 시간을 기다려주는 것이 수익률에 도움이 되는 것을 알 수 있음.
  • 일반적으로 익절/손절 범위가 넓을수록 그리고 최대 옵션 가격도 2.6 정도로 확장하였을 때 수익이 최대가 됨

 

단 하루 검정을 하였기 때문에 이 값이 최적이라고는 볼 수 없지만 느낌 상으로도 범위를 넓혀야 손절하지 않고 익절할 수 있는 기회가 생기는 것 같습니다. 그리고 갑자기 변동성이 증가할 때 적절한 손실이 자주 발생합니다. 이때 잘 견디면 프리가 다시 빠지면서 수익 전환하는 경험이 많았던 것으로 보아, 익절/손절 폭은 넓힐수록  유리한 듯 합니다.

 

참고로 수익에 나오는 값은 slipage 2 tick, 수수료까지 감안한 수치입니다.

 

앞으로 작업할 내용은 다음과 같습니다.

1. weekly option 대상 다양화

2. 정규 옵션 back test

3. 최대 수익이 나는 익절과 손절 값 찾아보기 (현재는 익절 70,000원, 손절 -70,000원) : 완료

4. 특정 양매도 조합에서 청산 후 다시 진입하는 것이 유리한지 여부

5. 시간적인 관점에서 다양한 양매도 진입 시점(현재는 등가 +- 5%) 

     장시작, 장 시작 후 30분, 40분, 1시간, 2시간 이후 등등 

6. 가격적인 관점에서 다양한 양매도 진입  시점 (현재는 장 중 등가 +- 5% 시점)

    선물이 급격하게 움직일 때, 장기간 횡보할 때 등등

7. 매도에 적절한 옵션가격 : 

     2.50 이하 혹은 0.8이상 등등

8. 손절 대신 한 호가 위 혹은 아래 옵션 매수 본전 선에서 익절 ( 가치성장님 아이디어 )

반응형

설정

트랙백

댓글

그동안 옵션 매수로 수익나는 방법에 대하여 고민을 많이 해 보았으나, 시간가치 감소를 이기고 수익을 내기가 상당히 힘들었습니다. 그래서 요 며칠 장 중 양매도를 해보니 수익이 조금씩 나는 것 같아서 그동안 가지고 있던 양매도에 대한 부정적인 이미지를 버리고 양매도 전략으로 수익을 내는 방법을 찾아보기로 하였습니다.

 

시장 중립형으로 비교적 안정적인 매도 방법을 찾는 것이 이번 연구의 목표입니다.

 

일단 생각한 방식으로는 

1. 당일 청산

2. 콜풋 동일 가격 양매도

3. 장 중 청산 후 다시 조건이 발생하면 재 진입

 

보통 옵션 매도는 차월 먼 외가 양매도 후 1달 정도 가져가면서 시간 감소 수익을 취하는 경우가 많은데, 가끔씩 터지는 큰 손실에 대한 두려움으로 당일 청산을 목표로 합니다. 과연 당일 청산을 하고도 수익이 날 수 있을지 확인해보겠습니다.

 

우선 장 중 변동성이 큰 weekly 옵션을 대상으로 back test를 진행해보았습니다.

시뮬 기간 동안 kospi200 가격표입니다.

3/28일을 제외하고는 큰 등락이 없었군요. 시뮬 결과입니다.

 

다행히 수익이 나왔습니다. 그런데 장 중 재진입시 손실이 나는 경우가 많았습니다. 좀 더 많은 경우에 대하여 수익 여부를 확인할 예정입니다.

 

수익금액도 중요하지만 수익률도 중요하겠죠. 수익률에 대하여 살펴보겠습니다.

양매도는 증거금이 많이 들기 때문에 실제 투입금액을 증거금을 기준으로 하여야 하지만, 채권이나 주식 대용도 가능하기 때문에 계산의 편의를 위하여 1 point당 250,000원 기준으로 수익률을 계산해보았습니다.

평균 하루에 서로 다른 행사가로 3set 정도 동시에 양매도가 들어가는 경우에 투입금액 약 4.4백만원이며, 위와 같이 일주일에 230,000원 정도 수익이 나온다면 연 270% 정도 수익률이 나옵니다.

 

물론 좀 더 다른 조합과 상황에서 돌려보아야겠지만 손절을 잘 한다는 가정하에서 장 중 양매도는 생각만큼 위험하지 않은 것 같습니다. 다만 장중 양매도를 하기 때문에 하루 수익금이 크지는 않습니다. 

 

앞으로 작업할 내용은 다음과 같습니다.

1. weekly option 대상 다양화

2. 정규 옵션 back test

3. 최대 수익이 나는 익절과 손절 값 찾아보기 (현재는 익절 70,000원, 손절 -70,000원)

4. 특정 양매도 조합에서 청산 후 다시 진입하는 것이 유리한지 여부

5. 시간적인 관점에서 다양한 양매도 진입 시점(현재는 등가 +- 5%) 

     장시작, 장 시작 후 30분, 40분, 1시간, 2시간 이후 등등 

6. 가격적인 관점에서 다양한 양매도 진입  시점 (현재는 장 중 등가 +- 5% 시점)

    선물이 급격하게 움직일 때, 장기간 횡보할 때 등등

7. 매도에 적절한 옵션가격 : 

     2.50 이하 혹은 0.8이상 등등

 

마지막으로 본 아이디어를 주신 파생인의 쉼터 API 대화방 분들과 특히 관심을 가져주신 구피님께 감사를 전합니다.

반응형

설정

트랙백

댓글

옵션 매매를 하다보면 양합의 흐름을 보는 것이 중요합니다. 매도할지 매수할지를 양합의 추이를 보고 판단할 수 있는데요. 실시간 옵션 데이터를 API로 받아서 직접 차트를 만들 수도 있지만 사용가능한 HTS가 있다면 굳이 만들 필요는 없겠죠.

 

여기저기 수소문한 결과 예스트레이더 HTS에서 가능하다고 합니다.  

 

설정방법에 대하여 자세하게 기술합니다.

 

우선 Yes Trader를 설치합니다. Yes Trader는 YesStock에서 만든 hts로 여러 증권사에서 사용이 가능합니다.

 

 

https://www.yesstock.com/home/home.asp

 

증권사별로 hts가 별도로 있는데, 국내/해외에 따라서 제휴 증권사가 상이하니 거래하고자하는 종목에 따라 적절한 증권사에 계좌를 만드시기 바랍니다. 증권사 계좌를 만든 후 아래 그림 중 해당 증권사를 클릭하면 HTS를 다운받을 수 있습니다.

 

YesStock site에서 제공하는 기능을 사용하기 위해서는 YesStock에도 계좌를 만드셔야 합니다. 즉 HTS를 사용하기 위해서는 연계 증권사 계좌를 만드셔야 하고, YesStock site를 이용하려면 YesStock에 가입도 하셔야합니다.

 

 

YesTrader를 사용할 준비가 끝났으니 지금부터는 옵션 양합 차트를 보는 방법을 설명합니다.

 

1. Yes Trader를 실행시킨  후 login을 합니다.

2. 시스템트레이딩 메뉴에서 전략실행차트를 선택합니다.

3. 돋보기 표시(종목선택)를 선택합니다.

4. 선/옵 tab을 선택하고 선물 메뉴에서는 "코스피200지수"를 옵션에서는 원하는 옵션을 선택합니다. 정규/미니/위클리 중 하나를 선택합니다. 그 후 원하는 콜 옵션 행사를 선택합니다. 콜 330을 선택해보겠습니다.

5. 차트에 보여줄 옵션들을 선택합니다. 참고로 아래 예는 1000개의 BAR를 표시하고 초봉으로 5초 주기로 update해 달라는 의미입니다. 

6. 확인을 누르면 이렇게 멋진 차트가 화면에 보입니다.

7. 양합을 보고 싶은 풋 옵션을 추가하는 방법입니다. 아래 그림에 있는 아이콘을 선택합니다.

8. 4번과 같은 종목 선택 창이 보입니다. 원하는 풋을 선택하면 5번과 같은 속성 창이 나옵니다. 선택 tab은 이전에 설정한 값을 사용하고, 차트표시로 이동합니다. 여기에서 콜과 구분을 하기 위하여 양봉/음봉의 색을 빨강/파랑보다 더 짙은 색을 선택하고 양봉채움과 음봉채움을 선택하지 않습니다. 이렇게 되면 풋은 테두리만 있는 봉차트로 표시됩니다.

9. 확인을 누르면 아래와 같이 콜/콜거래량/풋 차트가 동시에 보입니다.

10. 양합을 보기 전에 콜과 풋 차트를 합쳐보도록 하겠습니다. 우선 풋 차에 보이는 candle을 선택합니다. 그러면 candle이 선택된 표시가 나옵니다. 풋 캔들을 클릭한 채로 콜 차트 쪽으로 옮긴 후 클릭을 풀면 아래와 같이 표시 방법을 묻는 창이 나옵니다. 이때 "다음 항목과 공유"를 선택하고 콜차트를 선택합니다.

11. 확인을 누르면 아래와 같이 콜/풋이 동시에 그려지는 차트가 나옵니다.

12. 다음으로는 양합을 표시하는 방법입니다. 우선 양합에 해당하는 새로운 지표를 만들어야합니다. HTS 메뉴 시스템트레이딩에서 YesLanguage 편집기를 선택합니다.

13. YesLanguage 편집기에서 제일 왼쪽에 있는 새로만들기 아이콘을 누르면 새로운 지표의 이름과 설명을 입력하는 창이 나옵니다. 적절한 이름과 설명을 추가한 후 확인을 누릅니다. 여기에 입력한 이름은 왼쪽에 보이는 여러 지표 중 하나로 등록이 되기 때문에 가급적 자세하게 기술하는 것이 좋습니다.

14 콜풋양합 지표 편집기에서 아래 수식을 입력합니다.

     plot1(data1(c)+data2(c));

 

15. 저장합니다.

16 YesTrader로 돌아갑니다. 화면에 보이는 차트에서 오른쪽 마우스 버튼을 누르면 popup 메뉴가 보입니다. 이 중 적용/지표를 선택합니다.

17. 선택할 수 있는 다양한 지표가 보입니다. 이 중 조금 전에 만든 콜풋양합을 선택합니다.

18. 콜/풋/양합을 동시에 볼 수 있는 차트가 완성됩니다.

19. 만약 거래량 지표를 지우고 싶다면 거래량 차트에서 오른쪽 버튼을 누릅니다. popup 메뉴에서 개체삭제/지표/거래량을 누르면 됩니다.

20. 거래량 차트가 지워진 최종 차트 형태입니다.

 

원하는 콜/풋 pair에 대하여 동시에 차트를 출력하고, 양합도 볼 수 있으니 아주 좋습니다. 양합 차트 참고하셔서 적절한 매수/매도 진입 시점을 잘 판단하시기 바랍니다.

 

마지막으로 이렇게 저장된 차트를 저장했다가 불러올 수도 있습니다. 저장하는 방법은 메뉴 중 관리/화면틀 보관하기를 사용하면 됩니다. 이렇게 저장된 화면틀은 "화면틀 열기"로 불러올 수 있습니다.

 

이상 Yes Trader를 이용하여 콜/풋 양합 차트를 만드는 방법에 대하여 기술하였습니다. 여기저기 흩어져있는 정보를 모아서 정리하였으니 처음 사용하시는 분들에게 도움이 되었으면 합니다.

 

참고한 자료입니다.

https://m.youtube.com/watch?v=2hfzJJJ2x1o&feature=youtu.be

반응형

설정

트랙백

댓글

제가 요즘 관심이 있는 분야는 옵션인데요. back test를 위하여 과거 데이터를 모으고 있습니다.

 

우선 필요한 데이터는 kospi200 데이터입니다. 만기일 기준으로 월 별 kospi200 변화를 보고 싶은데요.

ebest api에서는 과거 분 데이터까지 얻을 수 있지만 기간이 제한적입니다.

 

그래서 과거 데이터를 얻을 수 있는 방법을 찾아 보았습니다.

 

우선 naver.

 

아래 사이트로 가보시면 과거 kospi200 데이터를 볼 수 있습니다. 다만 2006.01.03일 까지 가능하고 종가 정보만 얻을 수 있습니다. 이 정도만 있어도 기본적인 back test를 위한 자료는 확보할 수 있습니다.

https://finance.naver.com/sise/sise_index.naver?code=KPI200

 

좀 더 찾아보니 한국거래소에서도 과거 kospi200 데이터를 검색할 수 있더군요. 여기에서는 시고저종 정보 뿐아니라 아주 먼 옛날 정보까지 검색이 가능합니다. 빙고!!

 

일일이 손으로 저장을 하다 보니 아무래도 API가 있을 것 같아서 검색을 해보니 역시나 API를 지원합니다.

 

krx api를 사용하기 쉽게 만든 wrapper api가 있을 것 같아서 github를 검색해보니 역시나 있습니다.

https://github.com/sharebook-kr/pykrx

 

github에는 없는게 없으니 항상 github에서 찾아보는 습관을 들여야 합니다.

 

pykrx를 다운 받아서 돌려보았습니다. 잘 동작합니다.

 

pykrx를 이용하여 kospi200 과거 데이터를 받아보겠습니다.

data = stock.get_index_ohlcv_by_date("20220103", "20220110", "1101") # kospi200 은 안됨

 

업종 정보를 얻을 수 있는 함수는 get_index_ohlcv_by_date() 입니다. kospi200의 업종 코드는 101입니다.
 
그리고 pykrx에서는 코스피와 코스닥을 구분하기 위하여 앞에 1(코스피), 2(코스닥)를 추가합니다. 그래서 1101을 넣으면 kospi200 과거 정보가 나와야합니다. 그런데 동작하지 않습니다. 1027, 1111 모두 동작하는 하필 제가 필요로 하는 101만 동작하지 않습니다.
이 무슨 운명의 장난인지..
잠시 휴식을 취한 후 다시 한번 생각을 해 보았습니다. 왜 하필 kospi200만 안될까?
코드를 다시 보니 kospi200만 일관성이 없습니다. 027 이후 101 이후 111 뭔가 이상하죠..
그래서 혹시나 해서 028을 넣어보았더니.. 빙고!!!  잘 동작합니다.
data = stock.get_index_ohlcv_by_date("20220103", "20220110", "1028") # kospi200 028임
 

역시 뭔가 잘 안될때는 될 때까지 하는 것 보다는 잠시 휴식을 하고 전체를 다시 살펴보는 것이 문제 해결에 도움이 되는 듯 합니다.

 

 

 

 

 

 

반응형

설정

트랙백

댓글

자동매매 프로그램을 개발하면서 시간이 많이 걸리는 것 중의 하나가 GUI 부분입니다. 주로 Qt5를 많이 사용하는데, API 혹은 예제를 보고 본인이 원하는 대로 코딩을 해야합니다. Qt5가 워낙 파워풀하고 많이 사용되는 GUI 툴이므로 시간이 된다면 익숙해지는 것이 좋습니다.

 

하지만 본 카페에 계신 많은 분들이 개발을 배우고 계신 상태이다보니 Qt5를 이용한 GUI는 말처럼 쉽지가 앖습니다. 저 또한 Qt5를 자주 사용하지 않다보니, 뭔가를 하려면 일단 긴장부터 하는데요.

 

그래서 간단하게 x, y 위치 주고 화면에 보일 text를 전달하면 화면에 보이는 아주 심플한 package가 없을지 찾아보았습니다. 옛날 dos 시절에 이런 식으로 화면을 디자인했었죠.

 

오늘 소개해드릴 tkinter가 바로 제가 원했던 심플 GUI package입니다.

 

일단 화면부터 보시죠

 

 

 

현재 선물 가격 표시하고(상승/하락에 따라 배경색도 바꿀 수 있음) 양매수 혹은 양매도 하고 있다면 현재가 양합과 수익을 화면에 보여주고 있습니다.

 

사용법은 아주 간단합니다. tkinter를 기반으로 사용하기 쉽게 wrapper 함수를 몇 개 정의하였습니다. 이를 이용하여 첫 번째 선물과 선물 가격을 화면에 출력하는 방법입니다.

 

    window = tk.Tk()
    window.geometry('620x680')

    # for 선물
    create_label(window, 10, 10, '선물', width=10) # (10,10)위치에 "선물" 출력 
    f_label = create_label(window, 80, 10, '', width=10) # (10,10)위치에 현재 선물 가격 출력할 label

    # 실시간 선물 현재가를 받은 후 출력하는 부분
    f_val = 312.44
    update_label(window, f_label, f_val, background='red') # 현재 선물가격 출력
 

 

create_label은 그냥 단순 label을 만드는 함수입니다. x,y 위치, 출력할 데이터, 넓이만 입력하면 됩니다.

그리고 선물 가격을 출력할 label도 별도로 만들어야 합니다. 이 또한 x,y 위치와 넓이만 입력하면 됩니다. text는 향후 update될 예정이므로 그냥 ''을 입력하면 됩니다.

 

xing api에서 선물 가격을 얻은 후 미리 만든 label에 출력하는 방법입니다.

함수명은 update_label이고 사용 방법은 앞에서 만든 label, 출력할 값, 배경색(필요하다면) 입니다.

 

이 두 함수만으로도 다양한 곳에 원하는 값을 쉽게 출력할 수 있습니다. 이 보다 더 간단할 수는 없겠죠.

------------------------------

 

다음으로는 treeview입니다. excel같이 row, col 형식으로 자료를 출력해줍니다.

    # for 양매수
    width = 50
    heads = ['행사가', '매도가', '현재가', '행사가', '매도가', '현재가', '양합', '양합차', '수익']
    widths = [width] * len(heads) 
    widths[8] = 80 # 수익은 더 넓은 공간이 필요해서 변경함
            
    row = 1
    col = 9

    create_label(window, 10, 50, '양매도', width=10)  # (10,50)위치에 "양매도" 출력
    tr_view = create_table(window, 10, 70, row, col, heads, widths, background='#D3D3D3') # gray
 

treeview를 그릴 수 있도록 create_table() 함수를 만들었습니다.

table을 출력할 x,y 위치, table의 구성(row, col), table head에 출력할 문자열, 각 문자열의 넓이, 마지막으로 table의 총 넓이를 입력으로 주면 됩니다.

이때 row는 title을 제외하고 date가 들어가는 row 수를 적으시고, 만약 화면에 보이는 treeview의 넓이가 column 보다 너무 넓으면 width=100 이런 식으로 전체 treeview의 넓이를 지정할 수도 있습니다.

 

추가적으로 필요한 기능이 있습니다. 예를들어 특정 column의 문자열 색을 바꾼다거나, 배경을 바꾸어야할 수도 있습니다. 이런 경우에는 해당 예제와 아래에 있는 문서를 참고하여 sample을 수정하여 사용하시면 됩니다.

 

 

-------------------------------

마지막으로 xing api와 연동하여 실시간으로 양합 값을 update하기 위해서는 thread를 사용하여야합니다. thread를 포함한 예제는 차후에 코드 정리해서 올리도록 하겠습니다.

 

-------------------------------

방금 설명한 tkinter sample 코드는 아래 github에 있습니다. pkinter 설치한 후 실행하시면 됩니다.

pip install pkinter
 
------------------------------
 
 

 

반응형

설정

트랙백

댓글

 

weekly 옵션은 기존 옵션 정보를 얻는 TR을 함께 사용합니다. tr2301을 이용하여 weekly 옵션 코드를 구해서 특정 option에 대한 정보만 요청할 수도 있습니다.

 

weekly 옵션과 관련된 TR입니다.

1) tr2301 : 옵션 전광판, 해당 물 전체 옵션의 가격 정보를 받을 수 있다.

사진 삭제

사진 설명을 입력하세요.

미니 정규의 경우에는 만기 년월을 표시하면 되지만 weekly의 경우에는 W1 - W5로 표시합니다. 예를들어 1주차는 "W1 " 인데 주의할 사항은 W1 뒤에 공백(space)를 4개 더 넣어야합니다. 이는 기존 정규/미니 선물/옵션 월물 형태인 yyyymm 6자리를 맞추기 위함입니다.

 

2) tr2101 : 특정 선/옵션 코드에 대한 보다 자세한 정보를 돌려줍니다.

 

3) tr8434 : 복수 개의 선/옵션 정보를 돌려줍니다. 관심 있는 복수 개의 코드를 한번에 받을 수 있어도 유용합니다.

tr2301로 weekly 옵션 정보를 모두 받아 오는 파이썬 코드입니다. 보다 정교하게 현재 일자 기준 거래되는 weekly option 코드를 만들 수 있지만 그냥 간단하게 전체를 받아오면 됩니다. 만약 해당 주 거래 물이 없다면 list가 empty로 돌아옵니다.

 

def get_weekly_option_prices() :
     # weekly W1 - W5  yyyymm이 W1 - W5임
     for i in range(1,6) :
         yyyymm = 'W' + str(i)+'    '

        ret = self.exchange.get_2301(yyyymm, 'W') #  yyyymm(예, 첫 번재 주 : "W1    ")의 weely option 정보를 요청한다.
        if 'error' in ret[0] : # 오류임
            return 0

        if len(ret[0]) == 0 :  # 정보가 없음. 해당 주는 거래가 안됨
            continue

        for each in ret[0] : # for call
            print(each)

        for each in ret[1] : # for put
            print(each)

 

옵션 전광판 TR에서 주는 정보를 바탕으로 hts 옵션 전광판과 유사하게 출력해보았습니다.

 

사진 삭제

사진 설명을 입력하세요.

마지막으로 오늘같이 weekly의 옵션의 경우에는 만기 일에는 다음 주 weekly option이 상장되어 같이 거래가 됩니다.

코드 상으로 W1 - W5까지 모두 검색을 하므로, 이러한 부분은 신경 쓸 필요는 없습니다.

 

 

 

반응형

설정

트랙백

댓글

자동매매 프로그램을 돌리다보면 여러가지 이유로 종료되는 경우가 있습니다. 그 원인은 프로그램 자체 오류일 수도 있고, 사용하는 API 때문일 수도 있습니다. 자동매매를 돌리는 이유가 매매 시점을 빨리 찾기 위함인데 프로그램이 죽어있으면 아주 곤란합니다.

 

보통은 프로세서 id를 찾아서 잘 동작하는지 확인하는 방식으로 watchdog 프로그램을 만드는데요. 다행히 파이썬에서는 프로그램 단위로 동작 여부를 확인할 수 있는 방법이 있습니다. 바로 subprocess package를 사용하는 것입니다. 간단하게 call() 함수에 실행할 프로그램 명령어를 입력하면 됩니다.

import os 
import time 
from subprocess import call
cmd = 'python myprogram.py'

while(1) :
   call(cmd)
   time.sleep(30)

정상 동작한다면 return이 없이 계속 block되어 있고, 프로그램이 정상 혹은 비 정상으로 종료하면 return이 됩니다.

 

call은 popen이라는 함수의 특수한 사용 예입니다. 만약 프로그램을 실행시키고 다른 뭔가를 더 하고 싶다면 popen을 사용하시면 됩니다. 예를들어 terminal은 하나인데 여러 프로그램을 실행시켜야 한다면 popen을 사용하시면 좋습니다.

 

추가로 call 함수는 return 값이 있습니다. call 함수로 실행한 프로그램에서 정상 종료와 비 정상 종료를 return 값으로  구분할 수도 있습니다.

 

 

 

 

반응형

설정

트랙백

댓글

일전에 쓴 grid trading을 기반으로 주식 자동 매매를 돌리고 있습니다.

https://money-expert.tistory.com/74?category=781442 

 

[시스템트레이딩] 주식 grid trading

현재 upbit에서 일부 암호화폐에 대하여 grid trading 중인데요. 매매 대상을 넓히는 것이 수익률에 좋을 것 같아서 ebest api로 주식도 함께 거래하도록 개발을 하였습니다. 이전에 만든 소스가 있어서

money-expert.tistory.com

 

지난 6월 중순부터 계속 돌리고 있는데요.

중간 점검 차 현재 상태를 올려봅니다.

 

6월은 주가가 계속 내려가는 시기여서 평가손실이 발생하였으나 7월에는 매매가 어느 정도 이루어지면서 수익이 났습니다. 결과적으로 두달에 약 1.7% 수익이 발생하였습니다.

 

 

6/23일 부터는 kodex200도 매매 종목에 추가하였습니다. 그 이유는 거래세가 없기 때문에 grid를 좁게 가져가도 수익이 발생할 수 있기 때문입니다. 또한 kospi가 급등락을 반복하고 있어서 grid grading하기 좋은 종목으로 판단이 되었습니다.

 

현재 보유 종목은 총 27개이며 적당히 +- 상태를 유지하고 있습니다.

grid trading에서 수익이 많이 나오려면 매매가 많아야 합니다. 오늘까지 총 103회 매도가 되었습니다.

1회 투자금이 약 33만원. grid는 3.3%이므로 대략 1백여만원 매매 수익이 발생하였습니다.

현재 잔고 상태는 - 이지만 매매 차익 덕분에 +로 전환한 상태입니다. 

 

간단한 소회입니다.

- 종목 선택이 역시 중요하다. 하지만 영원히 하락하는 종목은 별로 없다. 즉 적절히 빠진 시점에 grid trading을 시작하면 결국 수익이 날 수 있다.

- 계속 빠지는 경우도 많다. 손실을 제한하기 위하며 grid 수를 제한한다. 최대로 살 수 있는 grid 수를 제한함으로써 지속적으로 우하향하는 경우에 손실을 제한할 수 있다. 현재는 grid 3개로 제한함(약 -10%)

- 매수 시작한 시점 이후 바로 상승하여 매수를 못한 경우도 있고, 한번 정도 매매하고 우상향한 경우도 있다. 이런 건 어쩔 수 없을 듯.

- 매수 종목이 많아야 매매가 자주 발생하는데, 종목을 늘리기 위해서는 투자금이 많이 들어간다. 적절한 투자 규모를 정하는 것이 필요하다. 증거금 관리가 중요한데 40% 증거금이 필요한 종목 위주로 포트폴리오를 구축하는 것도 좋다.

 

지금까지 운용해본 경험상 적당히 빠진 시총 높은 종목으로 grid trading을 하면 연 10% 정도는 나올 듯 합니다. 

 

한달에 한번씩 투자 상황을 정리해서 공유하겠습니다.

 

반응형

설정

트랙백

댓글