예스트레이더(이하 예트)에서 시스템을 만들기 위해서는 언어의 한 종류인 YesLanguage를 배워야합니다. YesLanguage 로 원하는 수식을 자유롭게 만들기 위해서는 많은 공부가 필요합니다.

 

다행히 QnA 란에 질문하면 관리자가 친절하게 답변을 해 줍니다만, 매번 그렇게 하는 것도 어렵습니다. 스스로 공부를 많이 해서 불편함 없이 사용을 할 수 있다면 좋겠죠?

 

이번에 돌파 전략인 던키안 4주 채널 전략에 대한 백테스를 하게 되었는데, 제가 개발한 결과가 맞는지 검증하기 위하여 예트를 이용하기로 했습니다. 오랜만에 접속을 해보니 사용법이 가물가물하는군요.

 

이전 글 다시 읽어보면서 감을 찾은 후 YesLanguage를 열었습니다. 하지만 제가 원하는 바를 YesLanguage로 표현하는게 쉽지가 않더군요. 그래서 혹시나 하는 마음에 이와 유사한 수식이 있는 인터넷에서 찾아보았습니다.

 

다행히 제가 원했던 예제가 있었습니다. 

https://blog.naver.com/chartist/222633747003

 

 

주식시장을 이긴 전략들에 나오는 전략을 모두 YesLanguage로 만들어 올려놓으셨더군요. 덕분에 YesLanguage를 더 잘 이해할 수 있게 될 듯 합니다. 감사!!

 

이 글에 나오는 전략을 예트에서 실행하기 위한 절차를 자세하게 설명합니다.

 

이 post에 나오는 전략을 사용하기 위해서는 한가지 선행해야할 것이 있습니다. 바로 전략에서 사용하는 사용자 함수를 미리 복사를 해야하는 것인데요.

 

아래 글에 가서 WeekHigh.yfu, WeekLow.yfu를 다운 받은 후 YesTrader가 설치된 곳에 가서 복사를 해야합니다.

 

https://blog.naver.com/chartist/222633688599

 

설치 위치를 변경하지 않았다면 C 드라이브 밑 아래 위치에 복사하시면 됩니다.

C:\예스트레이더(x64)\YesLang\Functions

 

그리고 각 전략을 설명한 page에 있는 .ysg 파일을 아래 폴더에 복사하시면 됩니다.

 

이제 던키안의 4주 채널을 시뮬해볼 수 있는 준비가 마무리되었습니다.

 

YesTrader를 실행한 후 YesLanguage를 실행하면 방금 복사한 전략/함수들을 가져올 것인지 물어봅니다. Yes를 하시면 됩니다.

 

다음은 시스템 트레이딩을 실행하는 절차입니다.

1.시스템트레이딩 밑에 있는 시뮬레이션 차트를 누른다.

2. 원하는 종목/기간/봉 종류를 선택한다.

3. 빨간색을 표시된 시스템적용을 누른 후 좀전에 추가한 시스템을 선택한다.

4. 시뮬한 결과가 차트에 표시가 됨

5. 시스템 성능 보고서를 열어서 성과를 확인한다.

 

 

결과를 보면 원글에 나오는 성과보고서와 조금 차이가 나는데요.

원글은 평가 기간이 21/12/30일까지인 반면에 제가 돌려본 기간은 23/10월까지 입니다.

원글은 국내 지수에 대한 수익 그래프입니다(아래 왼쪽 그래프).

나스닥에 대하여 어떻 결과가 나올지 궁금하여 돌려본 결과는 오른쪽에 있습니다.

 

나스닥 상승시에는 수익그래프도 아주 이쁘게 우상향하고 있습니다만, 최근까지 반영한 시뮬 결과는 혼조 그자체이군요.

그 이유는 2022년 부터 나스닥이 하락을 했기 때문입니다.

결국 던키안4주채널 전략은 상승장에서 상승, 하락장에서는 하락하는 특징을 가지고 있다고 보시면 될 것 같습니다.

대부분의 추세 돌파 전략의 경우에는 이러한 단점을 가지고 있기 때문에 상승장에서만 적용하는 필터를 적용하는 경우가 많이 있습니다.

 

전략마다 통하는 시점이 있기 때문에 언제 어떤 전략을 돌려야 하는지를 선택하는 것 또한 중요한 전략인 듯 합니다.

 

반응형

설정

트랙백

댓글

ebest api에서 t8413을 이용하여 특정 주식의 일봉 자료를 얻을 수 있습니다. 자료에 보면 jongchk와 rate라는 항목이 있는데 여기에 주가 변동 사항에 대하여 정리가 되어 있습니다.

 

이동 평균선을 구할 때 이 항목을 잘 확인을 해야하는데요. 이걸 무시하면 엉뚱한 결과가 나올 수 있습니다.

 

삼성전자 예를 들어보겠습니다. 아시다시피 삼성전자는 액면가 5,000원을 100으로 변경하는 액면분할을 하였습니다. 당시 일봉자료를 보면 아래와 같은 값이 표기되어 있습니다.

 jongchk : 4100

rate : -98

 

그 의미를 이해하려면 4100을 hex 값으로 변환하여야 합니다. 4100의 hex값은 1004가 됩니다. 위에 그림에서 보면 0x1000은 기준가 조정이고 마지막 4는 액면분할을 의미합니다. 

 

 

그리고 rate값인 -98은 액면가가 98% 줄어들었다는 의미입니다.

주가 보정을 위해서는 아래와 같은 방식으로 하면 됩니다.

삼성전자 2018/05/03 주가 2,650,000  

수정주가 => 2,650,000 * (100+rate)/100  = 53,000

 

반대로 액면병합인 경우에는 rate 값이 양수로 표기됩니다.

 

액면병합, 연말 배당, 유상증자 등으로 권리변동이 계속 발생하므로 변경이 생긴 원인을 파악하고 이에 맞는 적절한 가격 계산을 해 주어야 합니다.

 

반응형

설정

트랙백

댓글

 

월요일 만기 weekly option이 상장되었습니다.

자동매매를 하시는 분들은 새로운 변화에 대응을 해야하는데요.

다행히 기존 목요일 만기 weekly option은 문제없이 작동을 했습니다.

 

다만 월요일 만기 weekly option도 매매 대상으로 넣기 위해서는 추가 작업을 해 주셔야 합니다.

 

우선 코드입니다.

아래 그림과 같이 기존 목요일 만기 weekly 코드는 변화가 없습니다. 월요일 만기 weekly 옵션 용 코드가 신규로 생성되었습니다. 월요일 만기 weekly 옵션 코드는 AF 이고 이번 주가 01로 시작해서 쭉 올라갈 듯 합니다. 다다음 주 코드가 나오면 확실한 규칙을 알 수 있을 것 같습니다.

 

 

 

다음은 검색방법입니다.

옵션 전광판 t2301을 보면 위클리의 경우에는 yyyymm 필드에 W1MON 혹은 W1THU를 입력하도록 변경되었습니다. 기존에는 아래 그림과 같이 W1을 입력했습니다. 즉 뒤에 행사요일 정보가 추가된 형태입니다. 기존과 같이 W1을 입력하여도 목요일 만기 옵션 정보가 출력되기는 합니다.

 

아래는 월요일 만기 wekly 옵션 현재 가격을 얻는 방법임.

 

결론적으로 기존 목요일 만기 weekly 옵션 코드는 변경없이 동작합니다. 월요일 만기 weekly 옵션을 추가하면 W1으로 query를 하던 부분을 월/목에 따라 뒤에 MON/THU를 추가하면 됩니다.

 
 

 

반응형

설정

트랙백

댓글

파이썬은 참 좋은 언어인데, C나 C#같이 컴파일 방식이 아니라 인터프리터 방식이다보니 실제 코드가 실행되는 순간에 문법적인 오류가 발생하면 죽는 문제가 생깁니다. 컴파일 방식이라면 실행하기 전에 인지할 수 있겠지만 파이썬은 쉽지가 않습니다. 이 문제를 해결하기 위해서는 수정한 부분을 실제 조건을 만족시켜 돌려봐야하는데요. 이것도 쉬운 것은 아닙니다. 실제 조건문이 만족하도록 설정하는 행위가 소스를 수정하는 것이기 때문에 이 또한 문제를 야기할 수 있습니다.

 

이런 문제를 풀기 위하여 보통 유닛테스트를 많이 사용하는데요. 유닛테스트를 전체 프로그램을 test할 수 있으면 수정시 발생하는 오류를 가장 빨리 발견할 수 있습니다. 하지만 소스 전체를 유닛테스트로 적용하기 위해서는  최초 설계부터 반영을 해야하기 때문에 쉽지 않습니다.

 

결론적으로 유닛테스트를 적용하면 좋은데, 전체 소스코드에 적용하기에는 좀 어렵다인데요. 대안으로 특정 함수만 별도로 유닛테스트한 후 사용하는 것입니다.

 

이번에 주식 자동매매 프로그램을 만들던 중 매매 가격에 따라 유효한 주문 가격을 결정하는 함수를 유닛테스트를 적용한 예를 설명하도록 하겠습니다. 특히 주식 자동매매에서 유효한 주문가격을 구하지 못하면 주문 거부가 발생하기 때문에 꼼꼼하게 test해보아야 합니다. 모든 case를 손으로 직접 test하는 것은 쉬운 일이 아니기 때문에 유닛테스트를 적용하는 것이 바람직 합니다. 특히 해당 함수 내부 소스가 변경되는 경우에는 유닛테스트의 진가가 발휘됩니다.

 

올해 변경된 주식 가격별 호가 단위입니다. 자동매매 코드에서는 소숫점 계산을 한 목표 매수가가 나오고 이를 버림/반올림/올림 등의 조건을 추가하여 호가 단위에 맞는 가격으로 변경해주는 함수가 필요합니다.

우선 아래 package를 import합니다.

 

import unittest

 

그리고 원하는 함수를 작성합니다. 일단 2천원 미만은 1원 단위의 가격을 돌려주는 함수를 만들어봅시다. 

 

def get_order_price(price) :
    tick_size = 0
    if price < 2000:
            tick_size = int(price)
    return tick_size


다음은 unittest를 사용하는 방법입니다. unittest에서는 아래와 같은 CustomTests class를 지원합니다. 원하는 함수안에 필요한 코드를 넣으면 됩니다. test case는 test_process_statement() 함수 안에서 작성하면 됩니다.

 

 

 

class CustomTests(unittest.TestCase): 
    def setUp(self):    # 무시
        pass
    def tearDown(self): # 무시
        pass
    def test_process_statement(self) :
        in_price = 45
        result = get_order_price(in_price)
        self.assertEqual(result, 45) # 계산 결과와 원하는 값 입력

 

위와 같이 test_process_statement() 함수 안에 test case를 만들면 됩니다. 그 후 unittest.main()을 호출하면 계산값과 원하는 결과가 틀리면 self.assertEqual함수에서 fail이 뜹니다.

 

unittest.main()

 

실행을 해보면 아래와 같은 결과 나옵니다.

 

 

만약 in_price와 다른 값을 입력한다면

 

    def test_process_statement(self) :
    	in_price = 45
        result = get_order_price(in_price)
        self.assertEqual(result, 44) # 계산 결과와 다른 값 입력

 

친절하게도 틀리다는 메세지가 출력됩니다.

 

 

다음은 주식 거래시 사용하는 실제 코드입니다. 이번 전략에서는 목표 가격이 오면 가능한 빨리 매수하기를 원하기 때문에 버림을 적용합니다. float를 int로 변경하기만 하면 자동으로 버림이 적용되기 때문에 간단하게 구현할 수 있습니다.

 

def get_order_price(price):
    tick_size = 0.0
    if price >= 500000:
        tick_size = int(price/1000)*1000
    elif price >= 100000:
        tick_size = int(price/500)*500
    elif price >= 50000:
        tick_size = int(price/100)*100
    elif price >= 10000:
        tick_size = int(price/50)*50
    elif price >= 5000.0:
        tick_size = int(price/10)*10
    elif price >= 1000.0:
        tick_size = int(price / 5)*5
    else:
        tick_size = int(price)
    return tick_size

 

위 코드를 바탕으로 test case를 만들어보면 아래와 같습니다. 이외에도 모든 가격대를 test하는 문장을 추가하여야합니다.

 

    def test_process_statement(self) :
        result = get_order_price(999.99) # 1000원 미만 test
        self.assertEqual(result, 999)

        result = get_order_price(1000.01) # 1000원 이상 test
        self.assertEqual(result, 1000)

        result = get_order_price(4999.9999) # 5000원 이하 test
        self.assertEqual(result, 4995)

        result = get_order_price(9999.9999) # 10000원 이하 test
        self.assertEqual(result, 9990)

 

 

실행결과는 아래와 같습니다. 즉 문제가 없다는 의미입니다.

 

 

만약 함수의 출력과 예상결과가  틀린 경우에는 오류 메세지가 뜹니다. 오류 메세지가 뜨면 해당 가격에 대한 코드를 자세하게 살펴보면서 문제점을 수정하면 됩니다.

 

 

이렇게 완성된 함수를 본 프로그램에 추가하여 개발을 진행하면 됩니다. 모든 함수를 유닛테스트하기에는 시간이 많이 걸리는 문제가 있으므로, case가 복잡하거나 경우의 수가 많은 함수를 만드는 경우에는 해당 함수만 뽑아서 유닛테스트 환경하에서 test하는 습관을 들이는 것이 좋을 듯 합니다. 당장은 힘들겠지만 시간이 가면 갈수록 코드의 안정성을 유지하는 것이 유닛테스트 통과한 코드입니다.

 

반응형

설정

트랙백

댓글

지난 7편에서 수익이 나는 시뮬결과를 올렸습니다. 그 결과를 바탕으로 실제 거래를 위하여 개발을 진행했습니다.

그런데 지난 번 시뮬결과와는 전혀 다른 결과가 나왔습니다.

 

그 이유는 아래와 같습니다.

 

이전 시뮬에서는 특정 call/put pair의 조합으로 진행하였습니다. 따라서 특정 call/put 조합에서 손실이 나면 해당 일은 거래 종료하였는데요. 실제 거래에서는 시간 순으로 거래할 수 있는 pair 순서가 존재합니다. 이전 시뮬에서는 그 순서를 무시하고 임의의 순서로 처리가 되었습니다.

 

예를들어 지난 시뮬에서 2023/01/09을 보면 1번 거래하고 손실이 났으므로 거래를 종료했습니다. 하지만 실제 동작하는 시뮬을 만들어보니 거래가 종료되기 전에 거래 쌍을 여러 개 진입하게 됩니다(설정된 최대 값 만큼 진입). 그러다보니 1번 손실보고 마감하는 경우는 없다고 보시면 됩니다. 그래서 이전 시뮬에 비하여 손실은 늘어나는 구조일 수 밖에 없습니다.

 

실제 매매와 최대한 비슷하게 시뮬한 결과입니다.

조건은 이전 글과 거의 비슷하게 하였습니다. 차이가 있다면 최소 거래 pair를 2로 설정했다는 점입니다.

 

전략명 : 양매도 진입 제한(전략1)
거래대상 : 정규옵션 2/09일 만기
거래행사가쌍 :  285-342
거래일 : 2023/01/09 - 2/9
진입 : 거래 쌍 양합 이평 5/20 데드 크로스 나는 시점
청산 : 익절(90,000), 손절(-90,000) 혹은 이평 이평 60/120일 골드크로스
슬리피지 : 2.5 tick (양매도 한쌍 기준)
계약 수 : 콜/풋 각 1개
동시 진입 쌍 : 최소 2개 이상

승률은 50% 나왔지만 손익비가 나쁜 상황입니다. 결과론적으로 큰 손실입니다.

 

이런 저런 전략을 추가하면서 손실 금액을 낮추는 방법을 고민하고 있는데요.

우선 적용한 것은 거래 pair 별 손절 뿐 아니라 현재 진입 중인 모든 거래의 수익을 기준으로 손절하는 기능을 추가해보았습니다. 그리고 손절 금액도 -50,000원으로 줄였습니다.

전략명 : 양매도 진입 제한(전략2)
거래대상 : 정규옵션 2/09일 만기
거래행사가쌍 :  285-342
거래일 : 2023/01/09 - 2/9
진입 : 거래 쌍 양합 이평 5/20 데드 크로스 나는 시점
청산 : 
   - pair별 : 익절(90,000), 손절(-50,000) 혹은 이평 이평 60/120일 골드크로스
   - 거래쌍 수익 합 : 익절(200,000), 손절(-50,000)
슬리피지 : 2.5 tick (양매도 한쌍 기준)
계약 수 : 콜/풋 각 1개
동시 진입 쌍 : 최소 2개 이상

 

 

손실이 좀 줄었군요. 그렇다고 이전 시뮬 같이 수익은 아니므로, 실전에 투입하기에는 부족한 상태입니다.

 

과연 장중 양매도가 수익이 나는 전략인지 고민하지 않을 수 없는 상태입니다.

반응형

설정

트랙백

댓글

본인이 보유하고 있는 계좌를 모두 알고 계시나요? 각 계좌에 잔고가 얼마나 있는지 알고 계신가요?

요즘은 open bank 기능이 있기 때문에 전 금융기관을 묶어서 한번에 볼 수 있습니다. 하지만, 왠지 이렇게 모아 놓는 것이 조금은 불안하여 아직은 사용하고 있지는 않습니다.

 

그럼에도 불구하고 전 금융기관에 있는 본인의 계좌를 보고 싶은 경우가 있을 겁니다. 특히 계좌에 현금이 자꾸 줄어 든다면 어딘가에 짱박혀 있을 확률이 있겠죠. 특히 저 같이 여러 증권사에 계좌를 가지고서 공모주에 참여하는 사람들은 특정 증권사에 현금을 오랜기간 방치할 수도 있습니다.

 

본인의 금융 계좌를 모두 볼 수 있는 방법이 있을 것 같아서 찾아봤습니다. 역시나 존재하는군요.

이름하여 계좌통합관리 서비스..

 

https://www.payinfo.or.kr/payinfo.html

 

계좌정보통합관리서비스

 

www.payinfo.or.kr

은행권/증권사 본인 계좌를 모두 확인할 수 있습니다.

심지어는 보험/대출 정보도 확인 가능합니다.

이 사이트 덕분에 장기간 방치되고 있던 자금을 회수하였습니다.

 

어떤 목적으로 이런 사이트를 만들었는지 모르겠지만 가끔씩 들어가서 전 계좌 잔고를 확인해보면 잊고 있던 현금을 모두 찾을 수 있을 듯 합니다.

반응형

설정

트랙백

댓글

시뮬레이션 방식을 바꾸었더니 (실제 매매와 비슷하게) 수익률이 -로 바뀌었습니다. (7) 글은 무시하시고 아래 (8)글 보세요.

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

 

[시스템트레이딩] 수익나는 옵션 매도 전략(8)

지난 7편에서 수익이 나는 시뮬결과를 올렸습니다. 그 결과를 바탕으로 실제 거래를 위하여 개발을 진행했습니다. 그런데 지난 번 시뮬결과와는 전혀 다른 결과가 나왔습니다. 그 이유는 아래와

money-expert.tistory.com

이하 글은 무시하세요. ㅠㅠ

 

지난 글에서 2023년 1월 정규옵션 시뮬 결과를 정리했습니다. 손실금이 상당히 크게 나와서 더 이상 현 상태로 시뮬하는 것은 큰 의미가 없을 것 같아서, 수익나는 모델로 upgrade하여 다시 시뮬해보았습니다.

전략명 : 양매도 진입 제한(전략1)
거래대상 : 정규옵션 2/09일 만기
거래행사가쌍 :  285-342
거래일 : 2023/01/09 - 2/9
진입 : 거래 쌍 양합 이평 5/20 데드 크로스 나는 시점
	이전 거래가 손실이었으면 당일 더 이상 거래하지 않음
	이전 거래가 수익이었으면 거래 계속
청산 : 익절(90,000), 손절(-90,000) 혹은 이평 이평 60/120일 골드크로스
슬리피지 : 2.5 tick (양매도 한쌍 기준)
계약 수 : 콜/풋 각 1개

 

 

일자별 시뮬 결과입니다.

 

손실나는 경우에는 깔끔하게 한번만 거래하고 끝, 수익이 나는 경우에는 계속 거래한 결과입니다.

 

지난 글에서 정리했던 것을 기본 전략이라고 정의하고, 이번에 시뮬한 전략은 전략I 이라고 부르겠습니다. 

 

진입 조건 추가함에 따라 승률과 손익비가 아주 좋아졌습니다. 기본적으로 좋은 전략이었기 때문에 가능한 것 같습니다.

트레이딩의 기본인 손절은 빨리 수익은 길게..  이 방식이 적용된 아주 좋은 전략으로 보입니다.

 

드디어 수익나는 옵션 양매도 전략을 만들었습니다!!

 

아직 확인하고 싶은 사항들이 몇 있으나, 이 정도면 수익나는 전략으로 보입니다.따라서 지금부터는 실전을 위한 자동매매 개발을 시작합니다.

 

다음에는 실전 결과를 공유하도록 하겠습니다.

 

 

반응형

설정

트랙백

댓글

그동안 보유하고 있던 옵션 1분 데이터가 중요한 부분이 빠져있어서 정상적인 시뮬을 할 수가 없었습니다. 다행히 1월 옵션 데이터는 전체를 가지고 있더군요. 그래서 1월 데이터로 시뮬해보았습니다.

거래대상 : 정규옵션 2/09일 만기
거래행사가쌍 :  285-342
거래일 : 2023/01/09 - 2/9
진입 : 거래 쌍 양합 이평 5/20 데드 크로스 나는 시점
청산 : 익절(90,000), 손절(-90,000) 혹은 이평 이평 60/120일 골드크로스
슬리피지 : 2.5 tick (양매도 한쌍 기준)
계약 수 : 콜/풋 각 1개

일자별 시뮬 결과입니다.

 

결과가 생각보다 안좋습니다. 이전 결과와 비슷하게 손실이 난 날은 더 큰 손실이, 수익이 난 날은 더 큰 수익이 났습니다만 손실이 좀 더 많이 났습니다. 특히 손실 발생한 날에 매매 횟수도 엄청 많았고요.
그나마 승률이 50%를 넘었다는 것은 고무적입니다.

이제 손실이 난 날의 매매 횟수를 줄이는 작업을 진행 해보도록 하겠습니다.

반응형

설정

트랙백

댓글

그동안 변동성이 높은 wekkly option 위주로 시뮬을 해보았는데요. 이번에는 정규옵션에 대하여 시뮬한 결과를 공유합니다.

 

대상은 지난 달 만기 옵션입니다. 정규 옵션 역시 322-327까지 데이터가 없는 관계로 시뮬에 나오는 수치는 대략적인 흐름만 파악해보시기 바랍니다. 즉 손실이 나는 날에는 더 손실이 나고, 이익이 나는 날에는 더 이익이 납니다.

 

시뮬 결과입니다.

 

승률 : 66.67%

손익비 : 0.6

 

 

승률은 높지만 손익비가 낮게 나와서 약 이익 상태입니다. 아래 10, 12번 전략을 추가한다면 손익비를 더 높일 수 있을 듯 합니다.

 

문제는 slipage 비용인데요. 즉 거래가 많다는 의미입니다. 특히 손해가 나는 날 거래를 너무 많이 하는 점을 발견할 수 있습니다. 이에 대한 대응은 필수적이라고 보입니다.

 

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

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

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 골드크로스시 청산 : 완료

10. 당일 손실이 일정 금액 이상이면 loss cut 후 매매 종료

11. 당일 특정 pair가 익절이 되면 해당 pair는 매매 종료

12. 거래 쌍 추가시 손실시에는 추가하지 않는다. 최대 동시 진입 거래쌍 제한. 수익이 나고 있으면 계속 추가함.

반응형

설정

트랙백

댓글

제목과는 달리 아직은 수익이 나지 않는군요 ㅠㅠ.  

수익나는 전략이 나올 때 까지  Go Go!!

 

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

위클리 옵션 기준으로 최근 5주 데이터를 이용한 시뮬 결과입니다. 

 

거래대상 : Weekly 옵션 03/16 - 4/27일

거래행사가쌍 :  [295 - 337] 중 콜/풋 가격 차이가 0.7배 - 1.3배 사이

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

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

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

계약 수 : 콜/풋 각 1개

 

지난 글에서는 익절/손절을 너무 높게 잡아서 거의 종가에 청산이 되었으나, 장중 최대 수익권을 분석한 결과 9만원 정도가 적당한 것으로 판단되어 9만원으로 설정함. 앞으로 적절한 익절 가격에 대한 통계 데이터도 꾸준히 모아서 적절하게 변경하는 것이 수익률에 도움이 될 듯 합니다.

 

3/16일 부터 주별로 시뮬 결과입니다. 

 

단 3/16 - 4/06 자료에서는 옵션 행사가 322, 325, 327이 빠진 상태의 시뮬결과입니다. 따라서 수익이 난 날은 더 났을 것이고, 손실이 난 날은 손실이 더 났을 것이니 이 점 감안하고 보시기 바랍니다.

 

시뮬결과는 그렇게 좋지 않습니다. 큰 손실로 마감하는 경우가 가끔씩 나와서 전체적으로 손실입니다.

 

시뮬 내용을 좀 더 자세하게 분석해보겠습니다.

크게 손실이 난 경우가 며칠있습니다. 이 날은 코스피 변동폭이 상당히 컸던 날입니다. 단순 양매도로는 무조건 손실이 날 수 밖에 없는 시기입니다. 코스피 변동성이 큰 날 어떻게 대응하느냐가 양매도 전략의 수익을 결정한다고 보시면 됩니다.

 

손실이 가장 컸었던 4/25일 시뮬 결과를 좀 더 자세히 살펴보겠습니다. 

당시 코스피는 -1.83%(저가대비) -1.27%(종가대비) 빠졌습니다.

 

 

코스피가 큰폭으로 하락하다보니 양매도 들어가기만 하면 손실로 마무리됩니다. 9시 초반에 들어간 5건의 양매도가 모두 loss cut에 걸려서 청산되었는데, 이런 경우에는 더 이상 신규 매도 진입을 하지 않는 것이 좋을 듯 합니다. 

 

그리고 profit cut이 낮은 경우에는 장중 익절 후 다시 진입하는 경우가 있습니다. 이런 경우에는 손절이나 약이익으로 마감하는 경우가 많았습니다.

 

따라서 아래와 같이 전략을 개선해보겠습니다.

 

전략 개선 방안

- 당일 손실이 일정 금액 이상이면 loss cut 후 매매 종료

  그동안 전략 당 loss cut을 좀 높게 잡고 있었는데, 해당 일 전체 매도 분에 대한 총 손실도 loss cut 기준으로 설정

- 당일 특정 pair가 익절이 되면 해당 pair는 매매 종료

- 거래 쌍 추가시 손실시에는 추가하지 않는다. 최대 동시 진입 거래쌍 제한. 수익이 나고 있으면 계속 추가함.

 

 

예상한대로 단순한 기계적 양매도는 평상시 약수익, 가끔 큰손실로 마감합니다. 손실 리스크를 줄이기 위하여 양매도 청산 전략의 한계점으로 보입니다. 

하지만 손실 발생시 잘 대응하는 전략을 추가한다면 손실을 어느 정도 제한할 수 있을 것 같습니다. 그리고 진입 시점/동시 진입 pair 수 조절 등등 손실을 최소화할 수 있는 다양한 방법이 있으므로 이에 대한 시뮬을 좀 더 해보도록 하겠습니다.

 

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

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

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 골드크로스시 청산 : 완료

10. 당일 손실이 일정 금액 이상이면 loss cut 후 매매 종료

11. 당일 특정 pair가 익절이 되면 해당 pair는 매매 종료

12. 거래 쌍 추가시 손실시에는 추가하지 않는다. 최대 동시 진입 거래쌍 제한. 수익이 나고 있으면 계속 추가함.

반응형

설정

트랙백

댓글