BLOG main image
ddd (50)
CUDA programming (0)
알고리즘 트레이딩 (5)
Cherry Picker 개발 (23)
TSimulator 개발(종료) (11)
IT 노트 (1)
잡동사니 (2)
사진 (4)
일기 (4)
이력서 (0)
Visitors up to today!
Today hit, Yesterday hit
daisy rss
tistory 티스토리 가입하기!
'포트폴리오'에 해당되는 글 4건
2016. 1. 26. 22:41

마지막으로 기록된 개발일정을 보니 2014년 1월까지로 되어있다. 이 일정이 마무리 되었을 때 CherryPicker 를 실거래에 적용할 수 있을만한 형태가 되었다. 그리고 때마침 운 좋게 제도권에서 시스템 트레이딩을 할 수 있는 기회가 주어졌다. 기회가 주어지고 한 달간 증권사에 출근하면서 CherryPicker 에 증권 API 대신 거래소에서 직접 날라오는 UDP 패킷을 사용하게끔 개조를 했다. 그렇게 개조가 무사히 끝나고 드디어 2014년 3월부터 CherryPicker 를 이용한 첫 거래를 시작했다. 그 후 조금 더 좋은 조건으로 한 차례의 이직을 하고 2016년 1월 현재까지 CherryPicker 로 거래하고 있다.


다행히도 가장 우려스러운 '주문사고'는 없었지만 프로그램이 뻗은적도 여러번 있었고, 실시간 패킷통신에서 오는 동시성에 관련된 문제점들도 많았다. 하지만 시간이 흐르면서 버그가 발생하는 빈도는 점점 줄었고, 현재는 근 1년 버그없이 잘 운용되고 있다. 사실 버그가 발생하면 기분이 좋다. (물론 주문사고는 한 번이라도 있어서는 안된다.) 왜냐하면 그것은 내가 발견하지 못했던 문제가 발견된 것이기에 고쳐서 더 완벽한 프로그램이 되는 기회이기 때문이다.


제도권 입성이라는 목표를 가지고 업무시간 외 시간을 투자해 만든 시스템 트레이딩툴을 풀타임으로 개발할 수 있다는 사실에 너무 행복했던 지난 2년이었다. 제도권에 입사 후 첫 거래에 성공한 이후 지금까지 많은 기능을 구현했고, 로직 최적화를 통해 속도향상에도 상당한 진전이 있어왔다. 파생상품 운용을 직접 해보면서 생기는 요구사항이 생기는대로 바로바로 반영했다. 처음에는 두서없이 거래만 되게끔 구현하는게 첫 목표였지만 최종적으로 내가 분류한 시스템 트레이딩에 필요한 개발파트는 크게 1. 실운용, 2. 백테스트, 3. GUI, 4. 성과분석 의 카테고리로 나뉜다. 어느것 하나 무시할 수 없는 시스템 트레이딩 전반에 있어 필수적인 요소들이다. 각 카테고리가 중요한 이유를 간단히 설명해보면


1. 실운용

    말이 필요없는 부분이다. 최대한 빨리 시그널을 받고 주문을 해야하므로 속도를 위한 코드 최적화가 중요하다.

2. 백테스트

    시스템 트레이딩의 꽂이다. 백테스트를 통해 시스템 전략들이 만들어진다. 최적화 변수들이 많아질수록 테스트에 걸리는 시간이 천문학적으로 길어지므로(전략 하나에 일 주일, 한 달이상 소요되기도..) 이것 역시 코드 최적화가 중요하다. 그리고 데이터 흐름 알고리즘을 조금 바꾸는 거에 의해 수십분의 일, 수백분의 일까지도 소요시간을 줄일 수 있다. 물론 하드웨어의 성능을 모두 활용하는 멀티 스레드/프로세스는 필수이다.

3. GUI

    실운용에 있어 현 상황이 어떤 상황인지 알기에는 텍스트로도 문제가 없지만 편리하고 직감적으로 알기 위해서는 그래픽으로 더 효과적이다. 포트폴리오 포지션, 손익, 전략상황 등을 GUI 를 통해서 파악한다.

4. 성과분석

    성과분석툴은 크게 두 가지로 나뉜다. 백테스트한 결과중 어떤것을 실운용할지, 어떤 조합으로 포트폴리오를 구성할건지 분석할 수 있는 GUI툴과, 현재 실운용인중인 포트폴리오의 운용성과를 분석하고 백테스트한 결과와 비슷한 성과를 내고 있는지 분석할 수 있는 GUI툴이다. 이는 현 수익을 목적지(백테스트상 수익)로 안전하게 도달하게끔 유도해주는 역할을 해준다.


위 네 가지의 기능들을 수행하기 위해 그 동안 CherryPicker(알고리즘엔진) 외에 Unit_3(백테스트), Gaia(실운용), Efreet(성과분석) 등이 탄생했다. 현업에서 일하고 있는 이상 개발진행 사항을 포스팅 하기가 어려워져 이렇게 상황요약을 마지막으로 개발일정은 포스팅을 종료하겠다. 다른 메뉴들은 계속 업데이트할 생각이다.


지금까지 알고리즘 포스팅에 관심 가져주신 분들이 적지만 몇 분 계셨고 오프라인에서의 만남도 있었다. 나는 시스템 자동화에 대해 이야기하는걸 참 좋아한다. 교류를 원하시는 분들은 언제나 환영이다. :)

'Cherry Picker 개발 > 일정(종료)' 카테고리의 다른 글

13년 12월 ~ 14년 1월 일정  (0) 2013.12.11
10~11 월 일정 (2013년)  (0) 2013.11.21
SetTimer 함수를 도입  (0) 2013.11.08
증권 API 를 Cherry Picker 에 연결하다.  (0) 2013.07.17
의미있는 일정  (0) 2013.06.17
2013. 9. 24. 08:10

Cherry Picker 에서 전략, 심볼, 심볼 매니저를 사용하는 방법은 다음과 같다.

각 과정의 설명과 함께 소스코드를 넣어봤다.


1. SymbolManager 객체 생성

2. SymbolManager 에 MaxBarsBack, 최초자본금, 결과파일저장경로 등을 세팅

3. Symbol 객체 생성 및 속성을 초기화

4. SymbolManager 에 Symbol 을 추가

5. Strategy 객체 생성

6. SymbolManager 에 Strategy 를 추가

=== 데이터 수신 대기상태 ===

7. 데이터를 수신하면 Symbol 에 업데이트

8. SymbolManager 의 메서드인 run 을 수행시키면 세팅된 Strategy 들이 한 번의 루프를 수행


소스코드는 대략 다음과 같다.


/* SymbolManager 객체 생성 및 세팅 */

SymbolManager sSymbolMgr;

sSymbolMgr.setResPath( "C:\res\..." );

sSymbolMgr.setResName( "File Name" );

sSymbolMgr.setMaxBarsBack( 500 );

sSymbolMgr.setBarsCnt4Loop( 50 );

sSymbolMgr.setInitialCapitlal( 10000000 );


/* Symbol 객체 생성 및 초기화 (Tick Symbol 두 개 생성)*/

Symbol sSymbolOne( KOSPI200_FUT, ETRADE, TICK, 1 );

Symbol sSymbolTwo( KOSPI200, ETRADE, TICK, 1 );


/* SymbolManager 에 Symbol 을 추가 */

sSymbolMgr.addSymbol( &sSymbolOne );

sSymbolMgr.addSymbol( &sSymbolTwo );


/* Strategy 객체 생성 */

TrendStrategy       sStrategyOne;

ArbitragteStrategy sStrategyTwo;


/* SymbolManager 에 Strategy 를 추가 */

sSymbolMgr.addStrategy( &sStrategyOne );

sSymbolMgr.addStrategy( &sStrategyTwo );


.

.

.


KOSPI200 선물 데이터 수신시 수행되는 CallBack 함수 (위에서 생성한 객체들은 클래스의 멤버변수라고 가정)

void CallBackFunction( ... )

{

    /* 수신된 가격 및 기타 정보를 세팅 */

    sSymbolOne.setPrice( 111 );

    sSymbolOne.setCVolume( 222 );

    .

    .

    .

    sSymbolOne.updateBar();


    /* Symbol 이 Bar 를 생성할 타이밍인지 체크 (분봉의 경우 Symbol 정보세팅 이전에 수행되어야 함)*/

    if( sSymbolOne.isBarOver() == true )

    {

        /* Tick 봉 생성 및 틱 count 초기화 */

        sSymbolOne.createBar();

        sSymbolOne.reset();


        /* Symbol 이 업데이트 됐으므로 전략 수행 (기타 처리들을 해줘야 하지만 여기선 간략화 했다) */

        sSymbolMgr.run();

    }

}



수도코드는 대략 위와 같다. 여기서 sSymbolMgr 객체에 추가된 전략들(sStrategyOne, sStrategyTwo)로 포트폴리오를 구성했다고 가정하고 통계값이 갱신될 때마다 sSymbolMgr 객체 내부에서는 포트폴리오 통계값을 파일에 기록한다. 현재 기록되고 있는 통계값은 다음과 같으며 얼마든지 필요에 의해 확장될 수 있다.


전략 포트폴리오 관련 통계값

* PfoNetProfit : 포트폴리오 총 순수익

* PfoGrossProfit : 포트폴리오 총 수익

* PfoGrossLoss : 포트폴리오 총 손실

* PfoInitialCapital : 포트폴리오 최초 자본금(고정)

* PfoCurrentCapital : 포트폴리오 자본금 잔고

* PfoMaxCapital : 포트폴리오 최고 자본금

* PfoDrawDown : 포트폴리오 DD

* PfoMaxDrawDown : 포트폴리오 MDD

* PfoPercentDrawDown : 포트폴리오 % DD

* PfoPercentMaxDrawDown : 포트폴리오 % MDD


위의 통계값들은 포트폴리오 관점 뿐만 아니라 개개 전략 관점에서도 각각 전략 객체들이 자신의 값을 가지고 있다. 


여기서 의문점이 들 수 있다. 서로 다른 SymbolManager 들의 전략들끼리 포트폴리오를 구성하고 싶을 때도 분명 있을 것이다. 아니 반드시 있다. 그럴 경우에는 다음 함수를 사용하면 된다.


double sPfoNetProdit;


sSymbolMgrOne.setPfoNetProfit( &sPfoNetProfit );

sSymbolMgrTwo.setPfoNetProfit( &sPfoNetPfofit );


위와 같이 통계값을 저장하고자 하는 변수를 생성하고 각 SymbolManager 에 세팅을 해주면 SymbolManager 들은 내부 변수가 아닌 외부 변수에 통계값을 저장하기 시작한다.


이상으로 전략 포트폴리오 개념 도입에 대한 개발노트를 마치겠다.

2013. 9. 23. 16:50

CherryPicker 가 기본 기능을 하기 시작함에 따라 시장분석 작업도 동시에 진행하고 있다. 시장 데이터를 분석하고 결론을 내는 작업에 푹 빠진 탓에 새로운 기능이 추가됐음에도 불구하고 포스팅을 게을리 해왔다... 밀린 일정보고를 하겠다.


이전 일정보고에서 완료되지 않은 목록 중 다음 두 가지가 있었다.


1. 멀티 틱 심볼 데이터를 이용한 HFT 전략 분석

2. 틱데이터와 분데이터를 결합한 멀티 심볼을 사용하는 전략 테스트


'Cherry Picker 시장분석' 카테고리에 '테스트 전략' 이라는 하위 카테고리를 만들었는데 위 두 가지를 그 카테고리에서 테스트할 예정이다. 이미 1 번은 '테스트 전략 - 1' 에서 테스트를 진행했다.


'테스트 전략' 카테고리는 최소 일주일에 한 번 이상 업데이트할 생각이다.


일정보고를 시작하겠다.


전략 포트폴리오 개념의 도입


Cherry Picker 에서는 Symbol Manager 에 Symbol 을 추가하고 Strategy 를 추가한다. Symbol Manager 가 TradeStation 의 Chart Window 와 같은 개념이고 Symbol, Strategy 는 TradeStation 과 명칭과 의미가 같다. 전략 포트폴리오는 아무런 설정이 없다면 Symbol Manager 에 포함된 Strategy 들이 그 구성원이 된다. 하지만 따로 성정을 해주면 서로 다른 Symbol Manager 의 Strategy 들끼리도 하나의 전략 포트폴리오로 엮을 수가 있다. 이렇게 전략 포트폴리오의 개념을 도입했고, Strategy 집단의 관리를 할 틀을 만들었다.


전략 포트폴리오의 통계값 기록 시작


개개의 전략의 성과는 당연하고 포트폴리오 단위의 성과를 파일로 기록하는 로직을 넣었다. '테스트 전략' 카테고리에 '테스트 전략 - 3' 에는 이를 활용한 분석이 있으니 참고하면 된다. 이로서 순수익 뿐만이 아니라 MDD 나 변동성 같은 성질들을 조합해서 포트폴리오를 만들 수 있게 되어 더 나은 종합 성과를 낼 기반이 마련됐다.


최근월물 선물 호가 정보를 기록하기 시작


현재 수신 및 기록하고 있는 데이터는


    a. KOSPI 200 지수 정보 (9시 1분부터 2초마다 수신)

    b. KOSPI 200 최근월물 선물 체결정보 (9시부터 체결이 발생할 때마다 수신)


인데, 굳이 '정보' 라고 표현한 이유는 증권사 API 에서 보내주는 데이터는 여러 정보들이 같이 딸려오기 때문이다. 예를 들어 KOSPI 200 최근월물 선물 체결정보에는 체결 가격 뿐만 아니라 수량, 매수 1호가, 매도 1호가, 전날대비 상승폭, 당일 시고저가 등 여러 체결관련 정보들이 포함돼서 온다. 이 정보들을 모두 기록하고 있다.

추가로 최근월물 선물 호가정보를 기록하기 시작했다. 이 정보는 매수 또는 매도 1~5 호가의 정보를 포함하며 호가 정보가 하나라도 바뀌면 바뀐 정보를 포함한 모든 정보가 통째로 수신된다. 체결정보의 몇 배의 양이 된다. 


2013년 9월 이내에 최근월물, 선물 뿐만이 아닌 KOSPI 200 지수를 기초자산으로 하는 모든 현존 파생상품의 데이터를 기록하기 시작할 것 같다.


옵션 전략을 위한 전략 프레임의 디자인 시작


현재 전략 프레임은 첫 번째 심볼이 거래대상이 되는 한 가지 상품을 사고파는 전략 프레임이다. 이는 TradeStation 과 동일하다. 선물 거래를 뛰어넘어 옵션 거래, 선물 + 옵션 거래도 가능한 프레임을 디자인해야한다. 인터페이스는 Buy/Sell 함수 인자에 종목코드를 추가로 집어넣는 방법으로 생각하고 있다. 


전략에 활용 가능한 Symbol 정보 카테고리 추가


현재 Cherry Picker 에서 사용 가능한 Symbol 정보를 게시하려고 한다. 현재는 KOSPI 200 지수, 최근월 선물 관련정보밖에 없지만 점차 확대해 나가고 10월 중으로 선물 옵션 관련 모든 정보를 추가할 것이고 올해 안으로 API 에서 얻을 수 있는 모든 정보를 추가할 예정이다.

'TSimulator 개발(종료) > 일정(종료)' 카테고리의 다른 글

TSimulator 일정 종료  (0) 2013.09.23
2013. 9. 19. 21:05

시스템 전략이 완성되면 성능을 알아보기위해 과거데이터를 이용한 백테스트를 수행한다. 트레이드 스테이션에서 백테스트를 수행하면 Performance Report 가 만들어지는데 다음과 같이 생겼다.





이런 화면 외에도 아주 많은 화면들을 통해서 백테스트된 전략의 성과를 여러 측면에서 평가할 수 있다.


여러 성과측정 도구들이 있지만 가장 먼저 눈에 들어오는건 Total Net Profit 이다. 시스템 전략의 제 1 의 목적이 수익을 발생시키는 것이기 때문이다. 이 외에도 중요한 성능지표로서 Percent Profitable, Profit Factor, 등 다른 여러 측정도구도 함께 참조한다. 그리고 다음과 같은 항목이 있다.





수익의 최근 고점에서부터의 손실폭 중 최대치(Max Draw Down... 줄여서 MDD)을 아주 중요하게 보는데, 쉽게 풀이하자면 이 전략에서 수익없이 손실이 나는 최대 금액이라고 얘기할 수 있다. 그 최대 손실액이 발생하기 시작하는 시점이 해당 전략을 이용한 시스템 트레이딩의 시작시점이 될 수도 있는데, 이 경우 투자자는 트레이딩을 시작하자마자 MDD 만큼의 손실을 입다는 말이된다. 당연히 최초자본금액이 MDD 보다 작다면 파산을 하게되므로 큰 MDD 는 트레이딩 내내 불안감을 떨칠 수 없으며 작은 MDD 는 비교적 여유를 가질 수 있는 심리적 요인이 된다. MDD 를 줄이려는 노력은 성공적인 전략을 개발하기 위해 반드시 필요하다.


이번 테스트에서는 복수의 전략으로 포트폴리오를 구성할 경우 각 전략들의 상관관계가 포트폴리오의 MDD 에 미치는 영향을 분석해본다.


실증분석에 앞서 간단하고 극단적인(?) 예를 들어 테스트 시나리오를 설명하겠다. '전략 a' 가 있고 최초자본금은 10 이고 다음과 같이 잔고의 변화가 있다고 가정한다.


 잔고

시간 1 

시간 2 

시간 3 

시간 4 

시간 5 

전략 a

10

11 (고점 갱신)

10


이 경우 DD(Draw Down) 값은 다음과 같이 변한다. (DD 공식 : 최근 최고 잔고에서 현재 잔고를 차감)


 Draw Down

 시간 1

시간 2 

시간 3 

시간 4 

시간 5 

 전략 a

0

0 (고점 갱신) 

3 (MDD)

1


위 두 표를 그래프로 보면 다음과 같다.




(X출 : 기간, Y축 : 잔고 및 DD)


시간 1 ~ 5 까지의 MDD 는 '3' 이다. 이 경우 잔고가 11 까지 상승한 후 MDD 가 발생하여 잔고가 8 까지 하락했지만 '시간 1' 에 MDD 가 발생했다면 잔고가 7 까지 하락하게된다.


이제 전략을 하나 더 추가하여 총 2 개의 전략으로 구성된 전략 포트폴리오를 만들 것이다. 추가할 후보전략 2 개는 다음과 같은 잔고흐름을 가진다.


잔고

시간 1 

시간 2 

시간 3 

시간 4 

시간 5 

전략 b 

10

8

11 (고점 갱신)

8

10

전략 c 

10 

11 (고점 갱신)

12 (고점 갱신) 

10


'전략 b' 는 '전략 a' 와 완전히 같은 움직임을 보인다. '전략 c' 는 완전히 반대의 움직임을 보인다. 상관관계 분석결과는 다음과 같다. (로그수익률의 상관관계)


상관계수 

전략 a

전략 b 

전략 c 

전략 a

1

 

 

전략 b 

1

1

 

전략 c 

-0.96

-0.96

1


포트폴리오 이론에 따르면 안정적인(표준편차가 낮은) 주식 포트폴리오를 구성하기 위해 기존 포트폴리오와의 상관계수가 높은, 즉 포트폴리오와 같은 움직임을 가진 주식 종목의 편입을 피하고 상관계수가 낮은 주식을 편입해야한다. 어느 시점의 수익률 부호가 반대라면 포트폴리오의 변동성이 커지는것을 막을 수 있기 때문이다.

마찬가지로 어떤 시스템 전략 포트폴리오가 낮은 수익률 상관관계를 가진 전략들로 이루어져있다고 가정하자. 어떤 시점에 한 전략이 손실을 입어 DD 가 발생하는 상황일 때 다른 전략은 수익을 내어 DD 발생을 억제시킬 수 있기때문에 결과적으로 각 전략의 MDD 의 합보다는 낮은 포트폴리오 MDD 를 기대할 수 있다. 전략 a, b 로 구성된 포트폴리오와 전략 a, c 로 구성된 포트폴리오의 잔고흐름과 MDD 는 다음과 같다.


포트폴리오 잔고 

시간 1 

시간 2 

시간 3 

시간 4 

시간 5 

전략 a + b

20

16

22

16

20

전략 a + c

20

19

19

20

20


포트폴리오 DD

시간 1 

시간 2 

시간 3 

시간 4 

시간 5 

전략 a + b

0

4

0

6 (MDD)

2

전략 a + c

0

(MDD)

1

0


그래프로 표현하면 다음과 같다.


(X축 : 기간, Y축 : 잔고 및 DD)


상관계수가 최대값인 1인 전략과 포트폴리오를 구성한 경우 포트폴리오 MDD 는 각 전략 MDD 의 단순 합인 6(= 3 + 3) 이 됐고 상관계수가 낮은(-0.96) 전략과 포트폴리오를 구성한 경우 포트폴리오 MDD 는 1 로 낮아졌다. 상관계수 최소값인 -1 일경우 포트폴리오 MDD 는 0 이 될것이다. 


실증분석을 시작하겠다.


위 예제에서 '전략 a' 에 해당하는 전략을 먼저 선정해야한다. 이전 글인 '테스트 전략 - 2' 편에서 사용했던 필터가 있는 이동평균 전략을 다시 사용하겠다. 전략구현 프로세스는 2 번째 version 을 따른다.


==============================================================================================

1. 전략을 구현할 때 필요한 데이터(symbol)는 무엇인가?

  • KOSPI200 선물

2. 필요한 데이터 중 실시간으로 변하는 데이터와 그렇지 않은 데이터는 무엇인가?

  • 실시간으로 변하는 데이터

        Symbol Data 1 : KOSPI200 선물

  • 실시간으로 변하지 않는 데이터

        없음

3. 기초자본금은 얼마인가?

  • 10,000,000 원

4. (백테스트인 경우) 테스트 기간은?

  • 2004년 08월 02일 ~ 2005년 03월 02일 (120일)

5. 전략에서 사용될 symbol 은 분봉인가 틱봉인가?


    Minute Bar


6. 전략에서 사용될 symbol 의 time interval 은?


    Symbol Data 1 : KOSPI200 선물 (5 Minute Bar)


7. 첫 전략루프를 수행할 때 필요한 과거봉 개수는?


    50 개


8. 최근 몇 개까지의 과거봉을 참조할 수 있나?


    300 개


=== Strategy Flow ===


1. 장 시작 후 바로 전략을 수행시킬 것인가? 일정하거나 상황에 따라 다른 term 을 두고 수행시킬 것인가?


    바로 시작


2. 장 종료시까지 전략을 수행시킬 것인가? 일정하거나 상황에 따라 다르게 전략을 중지시킬 것인가?


    장 종료까지 수행


3. 거래대상은 무엇인가?


    Symbol Data 1


4. 거래계약수는 몇 개인가?


    1 개


5. 매수(매도) 준비신호는?


    5 이동평균이 10 이동평균을 상회(하회) 할 때


6. 매수(매도) 신호는?


    3 이동평균이 5 이동평균을 상회(하회) 할 때


7. 환매도(환매수) 신호는?


    진입 후 10 개 봉이 지나면 청산

==============================================================================================




먼저 이 전략의 수익과 DD 그리고 MDD 를 그래프로 표현해보겠다.


(X축 : 기간, Y 축 : 잔고, DD, MDD)


'전략 a' 의 MDD 는 7,500,000 원이다. 이제 전략 포트폴리오를 구성하기 위해 이번에는 5 개의 후보전략을 사용하겠다. 후보전략들의 잔고는 다음과 같다.


(X축 : 기간, Y 축 : 잔고)


하나하나 구별하기는 힘들지만 다양한 수익률 곡선을 그리는 전략들이며 마지막에는 잔고가 10,000,000 원을 넘어 결국 수익으로 끝나는 전략들임을 알 수 있다. 각 전략들의 DD 를 그래프로 그려보면 다음과 같다.


(X축 : 기간, Y 축 : DD)


역시 알아보기는 힘들다. 각 선의 최고점이 해당 전략의 MDD 이다.


이제 본격적인 분석을 위해 각 전략의 로그수익률의 상관관계를 분석해보겠다.



 상관계수

 전략 a 

 전략 b

 전략 c

 전략 d

 전략 e

 전략 f

 전략 a 

 1

 

 

 

 

 

 전략 b

 0.195

 1

 

 

 

 

 전략 c

 -0.063

 -0.051

 1

 

 

 

 전략 d

 0.147

 0.652

 -0.147

 1

 

 

 전략 e

 0.233

 0.411

 -0.028

 0.437

 1

 

 전략 f

 -0.006

 0.531

 -0.069

 0.401

 0.178

 1


파란색으로 칠해진 부분이 '전략 a' 와의 상관관계다. 


상관관계가 높은 순으로 보면 e - b - d - f - c 순이다. 여기서는 상관관계가 높을수록 MDD 감소비율이 작을 것으로 가정했으므로,'전략 a' 와 포트폴리오를 구성했을 때 구성전략의 MDD 의 단순합에서 포트폴리오 MDD 로의 차감비율이 가장 작은 순서 역시 e - b - d - f - c 순이 되어야 한다. 다음은 각 조합의 포트폴리오 분석결과를 나타낸 표다.


전략 a 와의 상관계수

MDD 단순합

포트폴리오 MDD

MDD 차감비율

전략 a+a

1

15,000,000

15,000,000

0%

전략 a+b

0.195

13,075,000

10,500,000

19.69%

전략 a+c

-0.06

10,275,000

4,875,000

52.55%

전략 a+d

0.148

14,850,000

10,375,000

30.13%

전략 a+e

0.234

10,875,000

8,875,000

18.39%

전략 a+f

-0.007

14,150,000

8,475,000

40.10%


기대했던대로 전략 a 와의 상관관계가 작은 포트폴리오가 MDD 차감비율이 커지는 결과가 나왔다. '전략 a' 와의 상관관계를 높은 순으로 MDD 차감비율을 나타낸 그래프는 다음과 같다.



다음 그래프는 가장 많은 MDD 비율 하락을 보여준 전략 a+c 조합의 포트폴리오의 DD, MDD, 단순 DD 합, 단순 MDD 합을 보여준다.


(X축 : 기간, Y 축 : 포트폴리오 DD, MDD, 단순합 DD, MDD)


위 그래프를 보면 시간이 흐를수록 포트폴리오 MDD 와 단순 MDD 합의 차이가 커짐을 알 수 있고, DD 의 흐름을 비교해보면 (특히 마지막 부분) 단순합 DD 는 상승하는 반면 포트폴리오 DD 는 억제되고 있는듯한 움직임이 보인다.


공교롭게도 모든 부분이 예상과 일치했지만 무수히 많은 전략들을 같은 방식대로 조랍해봐야하며 그런 과정에서 이번 분석의 헛점들도 많이 발견될 것이다.



결론


전략 포트폴리오 구성시에 구성전략들의 상관계수가 높으면 포트폴리오 구성에서 오는 MDD 감소비율은 작아지는 경향이 있고 반대로 구성전략들의 상관계수가 낮으면 포트폴리오 구성에서 오는 MDD 감소비율이 커지는 경향이 있다.

대표적으로는 추세전략과 비추세전략의 포트폴리오 구성이 이런 구성에서 이득을 얻는데, 승률이 낮은 추세전략이 손실을 쌓아가는 동안 높아지는 Draw Down 을 높은 승률의 비추세전략이 상쇄시키면 포트폴리오 Draw Down 역시 낮게 유지할 수가 있다. 이상으로 전략 포트폴리오를 구성하는 전략들의 상관관계가 포트폴리오 MDD 에 미치는 영향에 대한 분석을 마치겠다.


prev"" #1 next