참고사항 시스템 트레이딩 관련 블로그들은 개인 경험을 바탕으로 작성되었습니다. 각자 자신만의 투자방식과 매매전략을 만들어 가시기 바랍니다.

개요

시스템 트레이딩을 필요한 구성요소에 알아보고, 각 구성요소별 스펙정보를 알아보겠습니다.

시스템 트레이딩을 위한 구성요소

시스템 트레이딩을 위해서는 항상 백테스트와 실전 거래 두 가지 관점에서 설계되어야 합니다. 공통 컴포넌트로는 종목 객체과 종목 그룹 객체를 구분하여 설계했고, 이 두 객체는 백테스트와 실전 거래 모두에서 함께 사용됩니다. (객체는 데이터와 메소드를 가지고 있는 업무 단위로 이해하시면 됩니다. Java 기반으로 개발할 경우 class와 매핑이 됩니다.)

  • 종목 객체는 각 종목을 의미하며 캔들 데이터를 가지고 매매를 수행하는 역할을 담당합니다.
  • 종목 그룹 객체는 여러 개의 종목을 동시에 매매하거나 데이터를 통합하는데 목적이 있습니다.

이 두 객체는 매매 계획을 작성하는데까지만 담당합니다. 즉, 캔들 데이터가 들어가면 지표를 이용하여 매매 매개변수를 생성하고 매매 로직을 수행하여 매매 기회를 탐색하여 매매 계획을 작성합니다.

종목객체의 스펙정보

종목객체가 수행하는 기능에 대해서 정리하였습니다. 종목객체는 캔들데이터를 이용하여 매매수행까지를 담당합니다.

  • 종목객체가 가지고 있는 정보와 메소드
    • 정보 (variable)
      • 종목명과 종목 코드를 가지고 있습니다. (string형식으로 저장합니다.)
      • 유의종목여부 정보를 가지고 있습니다. (boolean형식으로 저장합니다.)
      • 종목변수를 가지고 있습니다.(hashmap 형식으로 저장합니다.)
      • 지표(indicator) 목록(List형식)을 가지고 있습니다.
      • 매매관리자 객체를 가지고 있습니다.
    • 메소드 (method)
      • 데이터처리(캔들데이터) - 캔들데이터가 들어오면 데이터를 Parser해서 지표계산하기 필요한 데이터로 변환합니다.
      • 종목변수 생성() - Parsing데이터를 이용하여 지표로 부터 종목변수를 생성합니다.
      • 매매 수행() - 매매관리자 객체로 종목변수을 넣어서 매매를 수행합니다.
      • 매매 계획() - 매매관리자 객체로 부터 매매계획을 추출합니다.

※ 지표 작성방법과 매매관리자의 매매처리방식에 대해서 다른 페이지에서 설명합니다.

다음은 종목 객체를 작성한 Pseudo 코드입니다.

종목 = {
    String 종목명, 종목코드
    boolean 유의종목여부
    HashMap 종목변수 
    List 지표목록
    매매관리자 객체

    종목변수생성(지표변수) = {
        종목변수.put(지표변수)
    }
    데이터처리(캔들데이터) ={
        var 시가,고가,저가,종가,거래량 = 캔들데이터로부터 데이터추출
        for 지표 in 지표목록 loop
            지표.지표계산(시간,고가,저가,종가, 거래량);
            종목변수생성(지표.지표변수())
        end loop
    }
    매매수행() ={
       return 매매관리자.매매수행(종목변수)
    }  
    매매계획(조회날짜, 조회시간) = {  -- 백테스트시에 사용됨
        return 매매관리자.매매계획(조회날짜, 조회시간);
    }
    매매계획() = { -- 실전거래시에 사용됨
        return 매매관리자.마지막매매계획();
    }
}

종목그룹객체의 스펙정보

종목그룹객체가 수행하는 기능에 대해서 정리하였습니다. 종목그룹 객체는 캔들데이터를 각 종목별로 입력하고 매매계획을 추출하는 역할을 담당합니다.

  • 종목그룹객체가 가지고 있는 정보와 메소드
    • 정보 (variable)
      • 종목객체 목록(List형식)을 가지고 있습니다.
    • 메소드 (method)
      • 데이터처리(종목코드, 캔들데이터) - 종목별로 캔들데이터를 넣어주는 기능을 합니다.
      • 매매 수행() - 모든 종목에 대해서 매매를 수행합니다.
      • 매매 계획() - 모든 종목에 대해서 매매계획을 추출합니다.

다음은 종목그룹 객체를 작성한 Pseudo 코드입니다.

종목그룹 = {
    List 종목리스트
    
    데이터처리(종목코드, 캔들데이터) ={
        var 종목 = 종목리스트에서 종목코드로검색
        종목.데이터처리(캔들데이터)
    }

    매매수행() = {
        for 종목 in 종목리스트 loop
           종목.매매수행()
        end loop
    }

    매매계획(조회날짜, 조회시간) = {  -- 백테스트시에 사용됨
        var 매매계획목록
        for 종목 in 종목리스트 loop
           매매계획목록.add(종목.매매계획(조회날짜, 조회시간))
        end loop
        return 매매계획목록
    }
    매매계획() = { -- 실전거래시에 사용됨
        var 매매계획목록
        for 종목 in 종목리스트 loop
           매매계획목록.add(종목.매매계획())
        end loop
        return 매매계획목록
    }
}

종목그룹객체에서 추출된 매매계획을 이용하여 가상거래를 하거나 실전거래에 사용될수 있습니다.

마무리

시스템 트레이딩을 위한 필수 구성 요소로서 종목 객체와 종목 그룹 객체에 대해 알아보았습니다. 종목 그룹 객체는 종목 객체를 효율적으로 관리하며, 종목 객체 내부 처리는 외부에서 알아볼 수 없도록 작성되었습니다.

각자의 프로그래밍 습관이 있겠지만, 중복 코드를 최소화하도록 지속적으로 리팩터링을 하는것이 좋습니다. 추후에 로직이 계속추가되어 복잡해지더라도 시스템을 운영하는데 큰 도움이 되기때문입니다.

댓글남기기