kimtth / finance-quant-sandbox

๐Ÿ’ธFlying Money with code.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Backtest - Dynamic Asset Allocation Strategy ๋™์ ์ž์‚ฐ๋ฐฐ๋ถ„

LAA (Lethargic Asset Allocation)

MM_PERIOD 13.0 CAGR 9.21 MDD -16.52658410328465

UEM QQQ (LAA Variant Only QQQ)

MM_PERIOD 14.5 CAGR 18.15 MDD -21.54066954224619

DUAL MOMENTUM

MM_PERIOD 13.67 CAGR 11.58 MDD -15.208144412024996

UEM SMH (LAA Variant Only SMH)

MM_PERIOD 14.5 CAGR 18.67 MDD -26.501303001917485

memo

(base) >conda create --name pyconda --clone base

Experimental - Leverage ETF - Risk Hedge

MM_PERIOD 23.33 CAGR 8.3 MDD -75.25161282084039

  • Risk Control #1

Pause and hold cash in case of daily returns when fallen more than 20%.

  • Risk Control #2

Balancing a portion of risk asset by AVG Momentum Score

  • Risk Control #3

Idea borrowed from LAA, avoid risky by UEM and SP MA200.

  • ์ „๋žต 1

์ข…๊ฐ€ ๊ธฐ์ค€ ๋‚˜์Šค๋‹ฅ -7% ์ด์ƒ ๋œจ๋ฉด ๊ณตํ™ฉ

๊ณตํ™ฉ์ด๋ฉด ๋ณด์œ ์ฃผ์‹ ์ „๋Ÿ‰ ๋งค๋„ ํ›„ 2๋‹ฌ ๊ธฐ๋‹ค๋ฆผ

๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ๋‹ค์‹œ -7% ์ด์ƒ ๋œจ๋ฉด ๊ทธ ๋•Œ ๊ธฐ์ค€์œผ๋กœ

๋‹ค์‹œ 2๋‹ฌ ๊ธฐ๋‹ค๋ฆผ.

200001 ~ 20210920 (22๋…„) ๋ณด์œ  | ํšŒํ”ผ
67.17 % | 158.50 %

201001 ~ 20210920 (12๋…„) ๋ณด์œ  | ํšŒํ”ผ
10909.93 % | 8459.6 %
  • ์ „๋žต 2

ํ‰๋‹จ๊ฐ€

์ตœ์ดˆ ๋งค์ˆ˜ ์‹œ์ : ์ „๊ณ ์  ๊ธฐ์ค€ MDD 15% ํ˜น์€ 20% ์ดํ•˜

๊ธฐ์ค€ MDD 10% ์ถ”๊ฐ€ ๋งค์ˆ˜๋Š” ํˆฌ์ž์›๊ธˆ๋ณด๋‹ค ๋‚ฎ์€ ๊ธˆ์•ก

ํ‰๋‹จ๊ฐ€๋ฅผ ์ตœ์ดˆ ๋งค์ˆ˜๊ฐ€์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊น๊ฒŒ ์œ ์ง€

e.g, ๋ผ์˜ค์–ด ๋ฌดํ•œ๋งค์ˆ˜ 1์ผ์ฐจ 100USD + 2์ผ์ฐจ 100USD + ....

ํ˜„๊ธˆ 30 - 50% ๋ณด์œ 

MDD 30% ์ด์ƒ ํญ๋ฝ ์‹œ, ์—ฌ์œ  ํ˜„๊ธˆ์œผ๋กœ ๋งค์ˆ˜

  • ์ „๋žต3

๋ฌดํ•œ๋งค์ˆ˜ ์ „๋žต

https://www.donga.com/news/Economy/article/all/20210619/107534251/1

https://infinite-geometric.tistory.com/47

https://blog.naver.com/hubeq/222501596897

  • ์ „๋žต4

์ฝ”์Šค๋‹ฅ ์ข…๊ฐ€ 3, 5, 10์ผ ์ด๋™ ํ‰๊ท  3๊ฐœ ๋‹ค ํ•˜ํšŒํ•˜๋ฉด ๋‹ค์Œ๋‚  ๋ชจ๋“  ์ฃผ์‹ ๋งค๋„

๋‹ค์‹œ 3๊ฐœ ์ด๋™ํ‰๊ท ์„  ์ค‘ ํ•œ๊ฐœ๋ผ๋„ ์ƒํšŒํ•˜๋ฉด ๋ชจ๋“  ์ฃผ์‹ ๋‹ค์‹œ ๋งค์ˆ˜

7% ์ด์ƒ ํ•˜๋ฝํ•œ ์ข…๋ชฉ ์†์ ˆ

  • ์ „๋žต5

์ข…๊ฐ€ ๊ธฐ์ค€ 5% ํ•˜๋ฝ ์‹œ ๋ณด์œ ์ฃผ์‹ ์ „๋Ÿ‰ ๋งค๋„ (๋‚˜์Šค๋‹ฅ 1990๋…„ ๋ถ€ํ„ฐ 30๋…„๋ถ€ํ„ฐ 5% ํ•˜๋ฝ์€ 41์ผ์— ๋ถˆ๊ณผ)

5% ํ•˜๋ฝ ์‹œ ์ „๋Ÿ‰๋งค๋„ ํ›„ 1๋‹ฌ ๊ฐ€๋‹ค๋ฆผ

30์ผ ์•ˆ์— 5% ํ•˜๋ฝ 4๋ฒˆ ๋ฐœ์ƒ ์‹œ 2๋‹ฌ์„ ๊ธฐ๋‹ค๋ฆผ

๊ธฐ๋‹ค๋ฆฌ๋Š” ๋‹ค์‹œ 5% ํ•˜๋ฝ์‹œ ๊ฐ๊ฐ 1๋‹ฌ 2๋‹ฌ ๊ธฐ๋‹ค๋ฆผ.

Kiwoon securities Open API Overview ํ€€ํŠธํˆฌ์ž

ํ‚ค์›€์ฆ๊ถŒ Open API ๋Š” ํŒŒ์ด์ฌ Python 32๋น„ํŠธ์—์„œ๋งŒ ์ž‘๋™.

๋ชจ์˜ํˆฌ์ž ๊ฑฐ๋ž˜๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” 0000.

์ „๋ถ€ ๋งค๋„ ํ›„ ์‹œ๊ฐ€ ๋งค์ˆ˜. ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์˜ ๊ฒฝ์šฐ 20-40 ๊ฐœ์˜ ์ฃผ๋ฌธ์„ ๋งค๋ฒˆ ๊ฐฑ์‹ ํ•  ํ•„์š”๊ฐ€ ์žˆ์œผ๋‚˜ ์ด๋Ÿฌํ•œ ๋ถˆํŽธํ•จ์„ ๊ฐœ์ธ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๊ฐœ๋ฐœ.

๋‹ค๋งŒ data\sell ๊ณผ data\buy ์•ˆ์— ์žˆ๋Š” csv ํŒŒ์ผ๋กœ ๋งค๋„ ๋งค์ˆ˜ ํ•  ์ข…๋ชฉ์˜ ์ฝ”๋“œ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์ „์— ์ค€๋น„ํ•˜์—ฌ์•ผ ํ•จ.

ํ€€ํŠธํ‚น์—์„œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ csv๋ฅผ ์‚ฌ์šฉ.

์ฃผ๋ฌธ๊ฐ€๋Šฅ๊ธˆ์•ก์„ ์กฐํšŒ ํ›„ config.ini ์˜ NUMBER_ITEM ์„ค์ • ์น˜๋ฅผ 1/N ํ•œ ๊ธˆ์•ก์„ ์ข…๋ชฉ๋‹น ๋งค์ˆ˜๊ธˆ์•ก์œผ๋กœ ์„ค์ •.

ํ‚ค์›€์ฆ๊ถŒ Open API + Python

TrCode ๋ผ๋Š” OpenAPI+์˜ Request๋ฅผ ์ „์†กํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ์ปจ์…‰.

Client (๊ฐœ๋ฐœ) <-> Broker (Open API+ Win32์ œ์–ด์šฉ) <-> Kiwoom Server

๊ณต์‹์ ์ธ API๋‚˜ ์ผ๋ถ€ ์˜ˆ์ œ๋Š” PyQT ๋˜๋Š” Pyside๋ฅผ ์‚ฌ์šฉํ•ด GUI ๋ฅผ ๊ฐœ๋ฐœ ํ›„ ์ด๋ฅผ ํ†ตํ•ด ํ‚ค์›€์—์„œ ์ œ๊ณตํ•˜๋Š” API ์™€ ์—ฐ๊ณ„ ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ ๋งค๋ฒˆ ๋™์ผํ•œ ๋ถ€๋ถ„์„ ๋‹ค์‹œ ์“ฐ๋ฏ€๋กœ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๋งŽ์Œ.

๋Œ€์‹  ๋น„๊ณต์‹์ ์ธ Wrapper API ๋“ค์€ Request ์™€ Response Event์˜ ๊ณตํ†ต๋œ ๋ถ€๋ถ„์„ API์—์„œ ๋ฏธ๋ฆฌ ์ฒ˜๋ฆฌํ•จ. ๋น„๊ณต์‹์ ์ธ Wrapper API ์ค‘ kiwoom / koapy / pykiwoom ๋ฅผ ์‚ฌ์šฉํ•ด ๋ดค์œผ๋‚˜ ํ™•์žฅ์„ฑ์ด๋‚˜ ์‚ฌ์šฉ์„ฑ ์ธก๋ฉด์—์„œ koapy ๊ฐ€ ๊ฐ€์žฅ ๋‚˜์€ ๋“ฏํ•จ.

Koapy 0.6.1 ์˜ ๊ฒฝ์šฐ Python 3.10 ์ด์ƒ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜์„ฑ์ด ์—†์Œ. Python 3.9๋ฅผ ์‚ฌ์šฉํ•จ.

Koapy Core Class

์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ†ตํ•ด Wrapper์˜ ์ƒ์„ธํ•œ ๊ตฌํ˜„ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ์Œ.

์•„๋ž˜ ํŒŒ์ผ์„ ์ฐธ๊ณ ํ•˜๋ฉด ์™ ๋งŒํ•œ ๊ตฌํ˜„์€ ๊ฑฐ์˜ ๋‹ค ๋˜์–ด ์žˆ์Œ.

KiwoomOpenApiPlusServiceClientStubCoreWrapper.py

ํ‚ค์›€ ๊ณต์‹ API ๋ฌธ์„œ์— ์žˆ๋Š” ์„ค๋ช…๊ณผ ์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์†Œ ์—‰์„ฑํ•จ. ๊ณ ๋กœ ์ง์ ‘ ์‹คํ–‰ ํ›„ ๋งค๋ฒˆ Response๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ API ๋ช…์„ธ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•จ.

WinAPI ๊ธฐ๋ฐ˜ API ๋ฅผ ์–ต์ง€๋กœ ๋‹ค๋ฅธ ์–ธ์–ด๊ธฐ๋ฐ˜์œผ๋กœ ๋ผ์›Œ ๋งž์ถ˜๋“ฏ ํ•ด์„œ Wrapper๋ฅผ ์ฐธ๊ณ  ์ด๋ฏธ ๊ตฌํ˜„๋œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์Œ.

Koapy Command

๊ด€๋ จ ๋ชจ๋“ˆ์„ ๊ฐ„๋‹จํžˆ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” CMD๋ฅผ ์ œ๊ณต. ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ํŠน๋ณ„ํžˆ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†์Œ.

์„ค์น˜ ๊ฐ€์ด๋“œ์—๋Š” Anaconda ๋ฅผ ์ด์šฉํ•œ ์„ค์ •๋ฒ•์ด ๊ธฐ์žฌ๋˜์–ด ์žˆ์œผ๋‚˜ Anaconda ์—†์ด๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

koapy serve # Koapy Manager/Server ๊ธฐ๋™

koapy install openapi    # OpenAPI ์„ค์น˜
koapy update openapi     # OpenAPI ์ž๋™ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ
koapy uninstall openapi  # OpenAPI ์‚ญ์ œ

koapy install pywin32    # pywin32 ์„ค์น˜
koapy uninstall pywin32  # pywin32 ์‚ญ์ œ

About

๐Ÿ’ธFlying Money with code.


Languages

Language:Jupyter Notebook 90.5%Language:Python 9.5%