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

개요

시스템 트레이딩에서는 각 종목별로 매매 거래를 지원할 수 있도록 구현해야 합니다. 종목마다 캔들 데이터가 입력되면, 해당 종목의 매매 로직을 참고하여 매매 계획이 수립되어야 합니다.

매매 관리자 객체의 스펙 정보를 알아보겠습니다.

매매관리자객체의 스펙정보

매매관리자객체가 수행하는 기능에 대해서 정리하였습니다. 매매관리자객체는 매매상태를 가지고 매수시점인지 매도시점인지를 파악하고 자신이 정의한 매매전략에 맞게 수행합니다.

  • 매매관리자객체가 가지고 있는 정보와 메소드
    • 정보 (variable)
      • 매매로직목록를 가지고 있습니다(List 형식으로 저장합니다)
        • 매매로직은 매수와 일괄매도, 추가매수등 다양한 형식의 타입으로 가지고 있습니다.
      • 매매이력정보를 가지고 있습니다 (List형식으로 저장합니다)
        • 매매이력은 매수(수량 > 0)에서 매도(수량 = 0)까지 하나로 그룹으로 관리합니다.
        • 매수와 매도가 같은 그룹에 있어야 추후에 승률 및 손익계산하기 편리합니다.
    • 메소드 (method)
      • 매매수행(종목변수) - 종목변수에는 지표정보와 가격정보를 포함하고 있습니다. 종목변수를 이용하여 매매를 수행하고 매매결과는 매매이력에 저장합니다.
      • 매매계획(), 마지막매매계획() = 매매이력에 저장된 매매정보를 추출합니다. 거래소에서 매수 혹은 매도를 할것인지를 판단하는 정보로 활용됩니다.
  • 매매수행() 메소드에서 로직처리 시 고려사항
    • 매매 전략에 대해서 검토되어야합니다. 매수에서 매도까지 어떤 방식으로 처리할지를 정의해야합니다.
      • (예시)(매수 -> 일괄매도,매수 -> 추가매수 -> 일괄매도)
    • 매매로직의 우선순위와 조건에 대해서 검토되어야합니다.
      • (예시)처음 매수시 신중하게 처리하기 위하여 모든매수로직이 true일경우 매수수행합니다.
      • (예시)거래중일 경우 손절비용을 줄이기 위하여 추가매수보다 일괄매도 로직이 더 우선순위가 높도록 작성합니다.
      • (예시)추가매수는 하나의 추가매수로직이라도 true일경우 추가매수를 수행합니다.

다음은 매매관리자 객체를 작성한 Pseudo 코드입니다.

  매매관리자 ={
    List 매매로직목록
    List 매매이력목록

    매매수행(종목변수) ={
        var 현재거래중인매매그룹 = 매매이력목록으로 부터 마지막매매그룹정보를 가져옴
        if 현재거래중인매매그룹.거래중 == false then
            List 매수로직들 = 매매로직목록에서 매수로직가져옴
            boolean 전체매수로직결과 = true
            for 매수로직 in 매수로직들 loop
                boolean 매매결과 = 매수로직.매매(종목변수)
                if 매매결과 == false then
                    전체매수로직결과 = false
                    break;
                end if
            end loop
            if 전체매수로직결과 = true then
               현재거래중인매매그룹.add("매수",종목변수)
            end if
        else  -- 거래중일경우

           List 매도로직들 = 매매로직목록에서 매도로직가져옴
           boolean 매도로직결과 = false
            for 매도로직 in 매도로직들 loop
                boolean 매매결과 = 매도로직.매매(종목변수)
                if 매매결과 == true then
                    매도로직결과 = true
                    break;
                end if
            end loop

            if 매도로직결과 = true then
                현재거래중인매매그룹.add("매도",종목변수)
            else
                List 추가매수로직들 = 매매로직목록에서 추가매수로직가져옴
                boolean 추가매수로직결과 = false
                for 추가매수로직 in 추가매수로직들 loop
                    boolean 매매결과 = 추가매수로직.매매(종목변수)
                    if 매매결과 == true then
                        추가매수로직결과 = true
                        break;
                    end if
                end loop
                 if 추가매수로직결과 = true then
                    현재거래중인매매그룹.add("추가매수",종목변수)
                else
            end if

        end if
    }

    매매계획(조회날짜, 조회시간) = {  -- 백테스트시 사용
        return 매매이력에서 조회날짜.조회시간을 조건으로 매매계획을 추출함.
    }
    마지막매매계획() ={ -- 실전거래시 사용
        return 매매이력에서 마지막매매이력을 추출함.
    }

마무리

매매관리자 객체에 대해서 알아보았습니다. 매매전략은 매매관리자객체의 매매수행() 메소드에서 구현됩니다. 처음에는 매수와 매도를 구현해보시고 이후에 고민 하신 매매전략에 맞게 코드를 추가하시기 바랍니다. 추가매수는 추세추종시 적합한 구현방식인것 같고, 분할매도는 리스크관리를 줄이기 위해서 필요한 전략이라고 생각합니다.

댓글남기기