ftfw

package
v0.0.0-...-07baef5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 30, 2024 License: LGPL-2.1 Imports: 13 Imported by: 0

README

ftfw (FacTor Fixed Weight)

고정 비중 팩터 모델 백테스트

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func F백테스트_실행

func F백테스트_실행[T팩터 T팩터_데이터, T재무 T재무_데이터](전략_인수 I전략_인수[T팩터, T재무])

func F점수_계산_강환국_무작정_따라하기_단순형

func F점수_계산_강환국_무작정_따라하기_단순형(s *S필터_정렬_처리기[*S팩터_세종])

func New팩터_데이터

func New팩터_데이터[T팩터 T팩터_데이터, T재무 T재무_데이터](종목코드 string, 기준일 uint32,
	일일_가격정보 *dd.S종목별_일일_가격정보_모음,
	재무정보_저장소 *S재무_정보_저장소[T재무]) (값 T팩터)

Types

type I데이터_처리기

type I데이터_처리기 interface {
	G영업일_모음() []uint32
	G현재가(string) float64
	G현재가_맵([]string) map[string]float64
	ETF_ETN_종목_여부(string) bool
	G제외_종목_여부(string) bool
	S상장_주식_수량_확인([]string) []string
}

type I데이터_처리기_백테스트_전용

type I데이터_처리기_백테스트_전용 interface {
	S준비(uint32, btc.T가격_구분)
	G일자() uint32
	G가격(uint32, btc.T가격_구분, string) float64
	G가격_맵(uint32, btc.T가격_구분, []string) map[string]float64
	G기준일_시가_종가_평균(uint32, string) float64
	G기준일_이전_전종목_가격_맵(uint32) map[string]*dd.S종목별_일일_가격정보_모음
}

백테스트에서만 사용됨. 실제 매매에서는 현재가/'현재가 맵'으로 충분함.

type I전략_식별_정보

type I전략_식별_정보 interface {
	G전략명() string
	G계좌번호() string
	G전략_식별_문자열() string
}

type I전략_실행기

type I전략_실행기 interface {
	G실행() error
}

func New전략_실행기

func New전략_실행기[T팩터 T팩터_데이터, T재무 T재무_데이터](인수 I전략_인수[T팩터, T재무]) I전략_실행기

type I전략_인수

type I전략_인수[T팩터 T팩터_데이터, T재무 T재무_데이터] interface {
	I전략_식별_정보
	G리밸런싱_주기() lib.T리밸런싱_주기
	G종목_수량() int
	G복합_등급_계산_함수() func(*S필터_정렬_처리기[T팩터])
	G급등_종목_제외() bool
	G급락_종목_제외() bool
	G버퍼_퍼센트() float64 // 버퍼가 '0%'이면 버퍼룰 적용 안 함.
	G데이터_처리기() I데이터_처리기
	G팩터_데이터_처리기() I팩터_데이터_처리기[T팩터, T재무]
	G포트폴리오() I포트폴리오
}

type I팩터_데이터_처리기

type I팩터_데이터_처리기[T팩터 T팩터_데이터, T재무 T재무_데이터] interface {
	G필터_정렬_처리기() *S필터_정렬_처리기[T팩터]
}

재무 데이터에서 생성된 '종목별 팩터 데이터'를 정렬/필터하는 자료형 생성

type I포트폴리오

type I포트폴리오 interface {
	G보유_종목_코드_모음() []string
	G리밸런싱_필요(string, lib.T리밸런싱_주기) bool
	G리밸런싱_기준_가격(종목코드 string) float64
	G리밸런싱_기준_수량(종목코드 string) int64
	G보유_수량_맵() (map[string]int64, error)
	S리밸런싱_실행(종목코드_모음 []string) error
	S손절(종목코드 string)
	S전체_손절()
	S익절(종목코드 string)
	S부분_익절(종목코드 string, 비율 float64)
}

type I포트폴리오_백테스트_전용

type I포트폴리오_백테스트_전용 interface {
	S준비(uint32, btc.T가격_구분)
	S일일_결산()
	G투자_성과_계산() (float64, float64, float64) // CAGR/MDD/Sharpe
}

type S데이터_처리기_백테스트

type S데이터_처리기_백테스트 struct {
	M일자   uint32
	M가격구분 btc.T가격_구분
	// contains filtered or unexported fields
}

S데이터_처리기_백테스트 : 백테스트용 I데이터_처리기 구현체. 실제 매매의 경우에는 API를 통해서 증권사 서버에 질의하게 될 기능을 가상으로 구현.

func (*S데이터_처리기_백테스트) ETF_ETN_종목_여부

func (s *S데이터_처리기_백테스트) ETF_ETN_종목_여부(종목코드 string) bool

func (*S데이터_처리기_백테스트) G가격

func (s *S데이터_처리기_백테스트) G가격(기준일 uint32, 가격구분 btc.T가격_구분, 종목코드 string) float64

func (*S데이터_처리기_백테스트) G가격_맵

func (s *S데이터_처리기_백테스트) G가격_맵(기준일 uint32, 가격구분 btc.T가격_구분, 종목코드_모음 []string) (가격_맵 map[string]float64)

func (*S데이터_처리기_백테스트) G기준일_시가_종가_평균

func (s *S데이터_처리기_백테스트) G기준일_시가_종가_평균(기준일 uint32, 종목코드 string) float64

func (*S데이터_처리기_백테스트) G기준일_이전_전종목_가격정보_맵

func (s *S데이터_처리기_백테스트) G기준일_이전_전종목_가격정보_맵(기준일 uint32) (추출본 map[string]*dd.S종목별_일일_가격정보_모음)

func (*S데이터_처리기_백테스트) G영업일_모음

func (s *S데이터_처리기_백테스트) G영업일_모음() []uint32

func (*S데이터_처리기_백테스트) G일자

func (*S데이터_처리기_백테스트) G제외_종목_여부

func (s *S데이터_처리기_백테스트) G제외_종목_여부(종목코드 string) bool

func (*S데이터_처리기_백테스트) G현재가

func (s *S데이터_처리기_백테스트) G현재가(종목코드 string) float64

func (*S데이터_처리기_백테스트) G현재가_맵

func (s *S데이터_처리기_백테스트) G현재가_맵(종목코드_모음 []string) (현재가_맵 map[string]float64)

func (*S데이터_처리기_백테스트) S상장_주식_수량_확인

func (s *S데이터_처리기_백테스트) S상장_주식_수량_확인(종목코드_모음 []string) []string

func (*S데이터_처리기_백테스트) S준비

func (s *S데이터_처리기_백테스트) S준비(일자_정수값 uint32, 가격구분 btc.T가격_구분)

type S리밸런싱

type S리밸런싱 struct {
	M일자 uint32
	M주식 map[string]int64
}

type S매매

type S매매 struct {
	M종목코드     string
	M일자       uint32
	M가격       float64
	M매도_매수_구분 lib.T매도_매수_구분
	M수량       int64
	M매매_상세_구분 T매매_상세_구분
}

주문 내는 동시에 100% 체결된다고 가정해서 단순화.

func (S매매) G금액

func (s S매매) G금액() float64

func (S매매) G금액_절대값

func (s S매매) G금액_절대값() float64

func (S매매) G수량

func (s S매매) G수량() int64

func (S매매) G수량_절대값

func (s S매매) G수량_절대값() int64

type S일일_평가액

type S일일_평가액 struct {
	M일자  uint32
	M평가액 float64
}

type S일자별_자산_현황

type S일자별_자산_현황 struct {
	M일자 uint32
	M현금 float64
	M주식 map[string]int64
}

func (*S일자별_자산_현황) G복사본

func (*S일자별_자산_현황) G일일_결산_평가액

func (s *S일자별_자산_현황) G일일_결산_평가액(데이터_처리기 I데이터_처리기) (평가액 float64)

func (*S일자별_자산_현황) G종목코드_모음

func (s *S일자별_자산_현황) G종목코드_모음() (종목코드_모음 []string)

func (*S일자별_자산_현황) G평가액

func (s *S일자별_자산_현황) G평가액(가격구분 btc.T가격_구분, 데이터_처리기 I데이터_처리기) (평가액 float64)

func (*S일자별_자산_현황) S주문_체결

func (s *S일자별_자산_현황) S주문_체결(주문_체결 *S매매)

type S재무_FG

type S재무_FG struct {
	S재무_정보_식별
}

type S재무_정보_식별

type S재무_정보_식별 struct {
	M종목코드 string
	M연도   uint16
	M분기   uint8
}

func (S재무_정보_식별) G분기

func (s S재무_정보_식별) G분기() uint8

func (S재무_정보_식별) G연도

func (s S재무_정보_식별) G연도() uint16

func (S재무_정보_식별) G종목코드

func (s S재무_정보_식별) G종목코드() string

func (S재무_정보_식별) G키

func (s S재무_정보_식별) G키() string

type S재무_정보_저장소

type S재무_정보_저장소[T T재무_데이터] struct {
	M저장소 map[string]T
}

func (*S재무_정보_저장소[T]) G값

func (s *S재무_정보_저장소[T]) G값(종목코드 string, 연도 uint16, 분기 uint8) T

func (*S재무_정보_저장소[T]) G기준일_전년_동분기_정보

func (s *S재무_정보_저장소[T]) G기준일_전년_동분기_정보(종목코드 string, 기준일 uint32) T

func (*S재무_정보_저장소[T]) G기준일_차최신_분기_정보

func (s *S재무_정보_저장소[T]) G기준일_차최신_분기_정보(종목코드 string, 기준일 uint32) T

func (*S재무_정보_저장소[T]) G기준일_차최신_연도_정보

func (s *S재무_정보_저장소[T]) G기준일_차최신_연도_정보(종목코드 string, 기준일 uint32) T

func (*S재무_정보_저장소[T]) G기준일_최신_분기_정보

func (s *S재무_정보_저장소[T]) G기준일_최신_분기_정보(종목코드 string, 기준일 uint32) T

func (*S재무_정보_저장소[T]) G기준일_최신_연도_정보

func (s *S재무_정보_저장소[T]) G기준일_최신_연도_정보(종목코드 string, 기준일 uint32) T

func (*S재무_정보_저장소[T]) G기준일_추출

func (s *S재무_정보_저장소[T]) G기준일_추출(기준일 uint32) (추출본 *S재무_정보_저장소[T])

func (*S재무_정보_저장소[T]) G연도별_값

func (s *S재무_정보_저장소[T]) G연도별_값(종목코드 string, 연도 uint16) T

func (*S재무_정보_저장소[T]) G종목별_차차최신_연도_정보

func (s *S재무_정보_저장소[T]) G종목별_차차최신_연도_정보(종목코드 string, 기준일 uint32) T

type S전략_실행기

type S전략_실행기[T팩터 T팩터_데이터, T재무 T재무_데이터] struct {
	I전략_인수[T팩터, T재무]
}

다음의 경우에 수정 없이 재사용하는 것을 목표로 함. 1. 'I전략_인수'에서 '데이터_처리기'와 '포트폴리오'만 교체해 주면, 백테스트에서 검증된 전략 소스 코드를 그대로 '실제 매매'에 적용. 2. 'I전략_인수'에서 '복합_등급_계산_함수'만 교체하면 여러가지 전략에 적용. 3. 데이터 공급자를 교체해도 큰 수정 없이 사용. 향후 손절/익절 규칙 또한 인수에서 교체할 수 있도록 하는 것을 고려해야 할 듯.

func (*S전략_실행기[T팩터, T재무]) G실행

func (s *S전략_실행기[T팩터, T재무]) G실행() (에러 error)

type S전략_인수

type S전략_인수[T팩터 T팩터_데이터, T재무 T재무_데이터] struct {
	M전략명         string
	M계좌번호        string
	M리밸런싱_주기     lib.T리밸런싱_주기
	M종목_수량       int
	M주식_비중_퍼센트   float64
	M복합_등급_계산_함수 func(*S필터_정렬_처리기[T팩터])
	M급등_종목_제외    bool
	M급락_종목_제외    bool
	M버퍼_퍼센트      float64
	M데이터_처리기     I데이터_처리기
	M팩터_데이터_처리기  I팩터_데이터_처리기[T팩터, T재무]
	M포트폴리오       I포트폴리오
}

func (S전략_인수[T팩터, T재무]) G계좌번호

func (s S전략_인수[T팩터, T재무]) G계좌번호() string

func (S전략_인수[T팩터, T재무]) G급등_종목_제외

func (s S전략_인수[T팩터, T재무]) G급등_종목_제외() bool

func (S전략_인수[T팩터, T재무]) G급락_종목_제외

func (s S전략_인수[T팩터, T재무]) G급락_종목_제외() bool

func (S전략_인수[T팩터, T재무]) G데이터_처리기

func (s S전략_인수[T팩터, T재무]) G데이터_처리기() I데이터_처리기

func (S전략_인수[T팩터, T재무]) G리밸런싱_주기

func (s S전략_인수[T팩터, T재무]) G리밸런싱_주기() lib.T리밸런싱_주기

func (S전략_인수[T팩터, T재무]) G버퍼_퍼센트

func (s S전략_인수[T팩터, T재무]) G버퍼_퍼센트() float64

func (S전략_인수[T팩터, T재무]) G복합_등급_계산_함수

func (s S전략_인수[T팩터, T재무]) G복합_등급_계산_함수() func(*S필터_정렬_처리기[T팩터])

func (S전략_인수[T팩터, T재무]) G전략_식별_문자열

func (s S전략_인수[T팩터, T재무]) G전략_식별_문자열() string

func (S전략_인수[T팩터, T재무]) G전략명

func (s S전략_인수[T팩터, T재무]) G전략명() string

func (S전략_인수[T팩터, T재무]) G종목_수량

func (s S전략_인수[T팩터, T재무]) G종목_수량() int

func (S전략_인수[T팩터, T재무]) G팩터_데이터_처리기

func (s S전략_인수[T팩터, T재무]) G팩터_데이터_처리기() I팩터_데이터_처리기[T팩터, T재무]

func (S전략_인수[T팩터, T재무]) G포트폴리오

func (s S전략_인수[T팩터, T재무]) G포트폴리오() I포트폴리오

type S팩터_FG

type S팩터_FG struct {
	M종목코드 string
	M종목명  string
	*S재무_FG
	M전분기_재무_정보    *S재무_FG
	M전년_동분기_재무_정보 *S재무_FG
	M최신_연도_재무_정보  *S재무_FG
	M차최신_연도_재무_정보 *S재무_FG
	// TODO
	M최근_급등 bool
	M최근_급락 bool
	M복합_등급 float64
}

func New종목_데이터_FG

func New종목_데이터_FG(종목코드 string, 기준일 uint32,
	일일_가격정보_모음 *dd.S종목별_일일_가격정보_모음,
	재무_정보_저장소 *S재무_정보_저장소[*S재무_FG]) (s *S팩터_FG)

func (S팩터_FG) G복합_등급

func (s S팩터_FG) G복합_등급() float64

func (S팩터_FG) G최근_급등

func (s S팩터_FG) G최근_급등() bool

func (S팩터_FG) G최근_급락

func (s S팩터_FG) G최근_급락() bool

type S팩터_데이터_처리기

type S팩터_데이터_처리기[T팩터 T팩터_데이터, T재무 T재무_데이터] struct {
	M재무정보_저장소_원본 *S재무_정보_저장소[T재무]
	M데이터_처리기     I데이터_처리기
}

func (*S팩터_데이터_처리기[T팩터, T재무]) G필터_정렬_처리기

func (s *S팩터_데이터_처리기[T팩터, T재무]) G필터_정렬_처리기() (필터_정렬_처리기 *S필터_정렬_처리기[T팩터])

type S팩터_세종

type S팩터_세종 struct {
	M종목명 string
	*bfc.S재무_세종
	M전년_재무_정보 *bfc.S재무_세종
	// --- 비재무 정보 ---
	M상장주식수량 float64
	M전일_거래량 float64
	M기준가    float64
	// --- 사이즈 팩터 ---
	M시가총액    float64
	M시가총액_등급 float64
	// --- 가치 팩터 ---
	PSR   float64
	PSR등급 float64
	POR   float64
	POR등급 float64
	PER   float64
	PER등급 float64
	PBR   float64
	PBR등급 float64
	PEG   float64
	PEG등급 float64
	// --- 성장성 팩터 ---
	M매출액_성장율      float64
	M매출액_성장율_등급   float64
	M영업이익_성장율     float64
	M영업이익_성장율_등급  float64
	M당기순이익_성장율    float64
	M당기순이익_성장율_등급 float64
	// --- 수익성 팩터 --
	M자산회전율    float64 // 자산회전율 = 매출액 / 자산
	M자산회전율_등급 float64
	M자본회전율    float64 // 자본회전율 = 매출액 / 자본
	M자본회전율_등급 float64
	OPA       float64 // 영업이익 / 자산
	OPA등급     float64
	OPE       float64 // 영업이익 / 자본
	OPE등급     float64
	OPM       float64 // 영업이익 / 매출액
	OPM등급     float64
	ROA       float64 // 순이익 / 자산
	ROA등급     float64
	ROE       float64 // 순이익 / 자본
	ROE등급     float64
	NPM       float64 // 순이익 / 매출액
	NPM등급     float64
	// --- 추세 팩터 ---
	M3개월_모멘텀           float64
	M3개월_모멘텀_등급        float64
	M6개월_모멘텀           float64
	M6개월_모멘텀_등급        float64
	M9개월_모멘텀           float64
	M9개월_모멘텀_등급        float64
	M12개월_모멘텀          float64
	M12개월_모멘텀_등급       float64
	M12개월_고점_대비_하락율    float64
	M12개월_고점_대비_하락율_등급 float64
	// --- 퀄리티 팩터 ---
	M부채_비율        float64
	M부채_비율_등급     float64
	M부채_증가율       float64
	M부채_증가율_등급    float64
	M자본_증가율       float64
	M자본_증가율_등급    float64
	M자산_증가율       float64
	M자산_증가율_등급    float64
	M거래_금액_중간값_억  float64 // 1개월 거래 금액 중간값
	M거래_금액_중간값_등급 float64
	M가격_변동성       float64 // 6개월 일일 수익율 표준 편차
	M가격_변동성_등급    float64
	M거래금액_변동성     float64 // 6개월 거래 금액 변동율 표준 편차.
	M거래금액_변동성_등급  float64
	// --- 급등락 ---
	M최근_급등  bool
	M최근_급등일 uint32
	M최근_급락  bool
	M최근_급락일 uint32
	// --- 팩터 카테고리별 점수 ---
	M가치_점수  float64
	M가치_등급  float64
	M성장성_점수 float64
	M성장성_등급 float64
	M수익성_점수 float64
	M수익성_등급 float64
	M추세_점수  float64
	M추세_등급  float64
	M퀄리티_점수 float64
	M퀄리티_등급 float64
	// --- 최종 종합 점수 ---
	M복합_점수 float64
	M복합_등급 float64
}

func New팩터_세종

func New팩터_세종(종목코드 string, 기준일 uint32,
	일일_가격정보_모음 *dd.S종목별_일일_가격정보_모음,
	재무_정보_저장소 *S재무_정보_저장소[*bfc.S재무_세종]) (s *S팩터_세종)

func (S팩터_세종) G복합_등급

func (s S팩터_세종) G복합_등급() float64

func (S팩터_세종) G최근_급등

func (s S팩터_세종) G최근_급등() bool

func (S팩터_세종) G최근_급락

func (s S팩터_세종) G최근_급락() bool

type S포트폴리오

type S포트폴리오 struct {
	M일자        uint32
	M가격구분      btc.T가격_구분
	M보유_현황     *S일자별_자산_현황
	M자산_현황_기록  []*S일자별_자산_현황
	M주문_체결_기록  []*S매매
	M리밸런싱_기록   []*S리밸런싱
	M일일_평가액_기록 []*S일일_평가액
	M데이터_처리기   I데이터_처리기
}

func (*S포트폴리오) G리밸런싱_기준_가격

func (s *S포트폴리오) G리밸런싱_기준_가격(종목코드 string) float64

func (*S포트폴리오) G리밸런싱_기준_수량

func (s *S포트폴리오) G리밸런싱_기준_수량(종목코드 string) int64

func (*S포트폴리오) G리밸런싱_필요

func (s *S포트폴리오) G리밸런싱_필요(계좌번호 string, 리밸런싱_주기 lib.T리밸런싱_주기) bool

func (*S포트폴리오) G보유_수량_맵

func (s *S포트폴리오) G보유_수량_맵() (map[string]int64, error)

func (*S포트폴리오) G보유_종목_코드_모음

func (s *S포트폴리오) G보유_종목_코드_모음() []string

func (*S포트폴리오) G투자_성과_계산

func (s *S포트폴리오) G투자_성과_계산() (복리_수익율 float64, 최대_낙폭 float64, 샤프_지수 float64)

func (*S포트폴리오) S리밸런싱_실행

func (s *S포트폴리오) S리밸런싱_실행(종목코드_모음 []string) error

func (*S포트폴리오) S부분_익절

func (s *S포트폴리오) S부분_익절(종목코드 string, 비율 float64)

func (*S포트폴리오) S손절

func (s *S포트폴리오) S손절(종목코드 string)

func (*S포트폴리오) S익절

func (s *S포트폴리오) S익절(종목코드 string)

func (*S포트폴리오) S일일_결산

func (s *S포트폴리오) S일일_결산()

func (*S포트폴리오) S전체_손절

func (s *S포트폴리오) S전체_손절()

func (*S포트폴리오) S주문_체결

func (s *S포트폴리오) S주문_체결(주문 *S매매)

func (*S포트폴리오) S준비

func (s *S포트폴리오) S준비(일자 uint32, 가격구분 btc.T가격_구분)

type S필터_정렬_처리기

type S필터_정렬_처리기[T T팩터_데이터] struct {
	M저장소   []T
	Less함수 func(*S필터_정렬_처리기[T], int, int) bool
}

func (*S필터_정렬_처리기[T]) G종목코드_모음

func (s *S필터_정렬_처리기[T]) G종목코드_모음() []string

func (*S필터_정렬_처리기[T]) Len

func (s *S필터_정렬_처리기[T]) Len() int

sort.Sort()에 필요.

func (*S필터_정렬_처리기[T]) Less

func (s *S필터_정렬_처리기[T]) Less(i, j int) bool

sort.Sort()에 필요.

func (*S필터_정렬_처리기[T]) Swap

func (s *S필터_정렬_처리기[T]) Swap(i, j int)

sort.Sort()에 필요.

func (*S필터_정렬_처리기[T]) S등급_산출

func (s *S필터_정렬_처리기[T]) S등급_산출() *S필터_정렬_처리기[T]

func (*S필터_정렬_처리기[T]) S상위_N개

func (s *S필터_정렬_처리기[T]) S상위_N개(수량 int) *S필터_정렬_처리기[T]

func (*S필터_정렬_처리기[T]) S전처리

func (s *S필터_정렬_처리기[T]) S전처리(데이터_처리기 I데이터_처리기) *S필터_정렬_처리기[T]

func (*S필터_정렬_처리기[T]) S정렬

func (s *S필터_정렬_처리기[T]) S정렬(Less함수 func(*S필터_정렬_처리기[T], int, int) bool) *S필터_정렬_처리기[T]

func (*S필터_정렬_처리기[T]) S필터

func (s *S필터_정렬_처리기[T]) S필터(필터_함수 func(팩터_데이터 T) bool) *S필터_정렬_처리기[T]

type T매매_상세_구분

type T매매_상세_구분 int8
const (
	P리밸런싱_매수 T매매_상세_구분 = iota
	P리밸런싱_매도
	P손절
	P전체_손절
	P익절
	P부분_익절
)

func (T매매_상세_구분) String

func (v T매매_상세_구분) String() string

type T재무_데이터

type T재무_데이터 interface {
	*bfc.S재무_세종 | *S재무_FG
	G종목코드() string
	G연도() uint16
	G분기() uint8
	G키() string
}

type T팩터_데이터

type T팩터_데이터 interface {
	*S팩터_세종 | *S팩터_FG
	G종목코드() string
	G최근_급등() bool
	G최근_급락() bool
	G복합_등급() float64
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL