예비 정량화 - "기초부터 실전까지 파이썬과 정량적 투자" - 최적의 채굴 전략

기초부터 실전까지 파이썬과 정량적 투자 - 초기 전략

정량적 데이터 수집

우수한 광산 ​​소개

URL 링크: https://uqer.datayes.com/
여기에 이미지 설명 삽입

여기에 이미지 설명 삽입

사용하는 방법

회원가입 및 로그인 후 [리서치 시작] - [새로 만들기]를 클릭하여 글쓰기 전략을 위한 새로운 노트를 생성합니다.
이 페이지에는 빠르게 시작하는 데 도움이 되는 초보자 가이드가 있습니다.
여기에 이미지 설명 삽입
먼저 데이터를 가져와서 [연구 데이터]를 클릭하여 직접 찾거나 위의 키워드를 직접 검색할 수 있습니다.
여기에 이미지 설명 삽입
데이터를 클릭하면 함수 사용 코드가 나타나며 노트북에 복사하여 실행할 수 있습니다. 아래의 기능 설명에 따라 코드를 변경하여 필요한 데이터를 얻으십시오.
여기에 이미지 설명 삽입

일일 시장 데이터

2015년 5월 13일 Ping An Bank와 Shanghai Pudong Development Bank의 종가와 총 시가총액을 확인하세요.

DataAPI.MktEqudGet(tradeDate=u'20150513',secID=u"",ticker=["000001","600000"],field=u'secID,ticker,secShortName,tradeDate,preClosePrice,marketValue',pandas="1")

여기에 이미지 설명 삽입
시간 경과에 따른 데이터:

DataAPI.MktEqudGet(tradeDate=u'',secID=u"",ticker=["000001","600000"],beginDate=u"20180117",endDate=u"20180119",field=u'secID,ticker,secShortName,tradeDate,preClosePrice,marketValue',pandas="1")

여기에 이미지 설명 삽입

요인 데이터

필요에 따라 기능을 선택하십시오
여기에 이미지 설명 삽입

DataAPI.MktStockFactorsDateRangeGet(secID=u"",ticker=["000001","600000"],beginDate=u"20170612",endDate=u"20170616",field=u"secID,ticker,tradeDate,PS,PB,NetProfitGrowRate",pandas="1")

여기에 이미지 설명 삽입
일반적으로 사용되는 재무 데이터 외에도 Youkuang 데이터 모듈에는 재무 보고서 데이터, 이벤트 데이터 및 선물 데이터도 포함되어 있습니다.

데이터 처리

데이터 병합

종가와 이동 평균 데이터의 조합

df_quotation=DataAPI.MktEqudGet(tradeDate=u'',secID=u"",ticker=["000001","600000"],beginDate=u"20180101",endDate=u"20180121",field=u'secID,ticker,tradeDate,closePrice',pandas="1")

df_factor=DataAPI.MktStockFactorsDateRangeGet(secID=u"",ticker=["000001","600000"],beginDate=u"20180101",endDate=u"20180121",field=u"secID,ticker,tradeDate,MA10,MA5",pandas="1")
df_quotation.merge(df_factor,on=['ticker','tradeDate'])

여기에 이미지 설명 삽입

피벗

매일 주식의 시가 총액 합계를 찾으십시오.

df_quotation=DataAPI.MktEqudGet(tradeDate=u'',secID=u"",ticker=["000001","600000"],beginDate=u"20180101",endDate=u"20180121",field=u'secID,ticker,tradeDate,closePrice,marketValue',pandas="1")
df_quotation=df_quotation.pivot_table(index='tradeDate',columns='secID',values='marketValue')
df_quotation

여기에 이미지 설명 삽입

데이터 필터링

PE>0인 데이터 선택

df=DataAPI.MktStockFactorsOneDayGet(tradeDate=u"20180119",secID=set_universe('A'),ticker=u"",field=u"secID,tradeDate,PE",pandas="1")
df[df.PE>0].head(10)

여기에 이미지 설명 삽입

데이터 수집 및 구성

히스토그램 및 상자 그림

df=DataAPI.MktStockFactorsOneDayGet(tradeDate=u"20180119",secID=set_universe('A'),ticker=u"",field=u"secID,tradeDate,ROE",pandas="1")
df.plot.hist(bins=100)

여기에 이미지 설명 삽입

_=df.boxplot(sym='rs')

여기에 이미지 설명 삽입
데이터가 극단적이지 않고 처리 후 요인 모델링이 더 안정적이며 데이터 마이닝에서 자주 언급되는 "차단 방법"입니다.

df_=df.copy()
df_.loc[df.ROE-df.ROE.mean()<-3*df.ROE.std(),'ROE']=df.ROE.mean()-3*df.ROE.std()
df_.loc[df.ROE-df.ROE.mean()>3*df.ROE.std(),'ROE']=df.ROE.mean()+3*df.ROE.std()
df_.plot.hist(bins=100)

여기에 이미지 설명 삽입

데이터 변환: 표준화된 더미 변수

표준화된
최소-최대 정규화 값은 0-1과 동일하며 z-점수 정규화 평균은 0, 분산은 1입니다.

((df_['ROE']-df_['ROE'].min())/(df_['ROE'].max()-df_['ROE'].min())).plot.hist(bins=100)

여기에 이미지 설명 삽입

((df_['ROE']-df_['ROE'].mean())/df_['ROE'].std()).plot.hist(bins=100)

여기에 이미지 설명 삽입
대체 가능한 임시 변수

import pandas as pd
df_industry=DataAPI.EquIndustryGet(secID=df_['secID'].tolist(),ticker=u"",industryVersionCD=u"010303",industry=u"",intoDate=u"20180101",
                                   field=u"secID,industryName1",pandas="1")
industry_list=df_industry['industryName1'].drop_duplicates().tolist()
df_industry
def get(x):
    ind_s=pd.Series([0]*len(industry_list),index=industry_list)
    if len(df_industry[df_industry['secID']==x])>0:
        ind=df_industry[df_industry['secID']==x]['industryName1'].values[0]
        ind_s.loc[ind]=1
    return ind_s    
df_[industry_list]=df_['secID'].apply(lambda x:get(x))
df_.head()

여기에 이미지 설명 삽입

연락처 데이터 백테스트

[연구 시작], [만들기]에서 [전략]을 선택하면 다음과 같은 정책 템플릿이 나타납니다.
여기에 이미지 설명 삽입

백테스팅 플랫폼 기능 및 매개변수 설정

기능에 대한 일반적인 설명은 책 "Python and Quantitative Investment from basics to Practical Combat"을 읽어보세요.

백테스트 매개변수 설정

시작 및 종료(백테스트 간격 설정) : 백테스트
유니버스(증권 풀) 의 시작 날짜를 나타냅니다. : 전략 백테스트의 증권 풀, 즉 전략 논리가 작동하는 도메인을 나타냅니다. 주문 배치 및 이력 데이터 인수는 유니버스 증권으로 제한됩니다. 유니버스는 유통 시장에서 거래할 수 있는 모든 A주와 모든 ETF 및 LOF를 지원합니다. .XSHE', '600000.XSHG']. 이 매개변수의 설정은 주로 백테스트 플랫폼이 관련 데이터를 미리 로드하여 백테스트 속도를 높일 수 있도록 하는 것입니다.
set_universe(정적 증권 풀) : 증권 코드의 미리 설정된 목록을 반환하는 데 사용되며, 산업 구성 주식 및 지수 구성 주식을 지원합니다. 자산 풀이 특정 목록으로 지정된 경우 정책 프레임워크는 해당 목록의 내용만 반환합니다.
DynamicUniverse(동적 보안 풀)는 Dynamic Universe 인스턴스를 반환하는 데 사용됩니다. 부문 구성종목, 지수 구성종목 또는 산업 구성종목을 전략의 거래 대상으로 사용할 때 전략 프레임워크는 실제 상황에 따라 그날의 종목 풀 내용을 조정합니다.
apply_filter는 동적 증권 풀의 각 거래일의 증권 풀에 필터링 조건을 적용하여 전략 대상의 범위를 더욱 좁히는 데 사용됩니다. 현재 최적 마이닝 팩터 라이브러리의 모든 팩터를 지원하여 증권 풀을 선별합니다.
Benchmark(레퍼런스 벤치마크) 는 전략의 참고 기준, 즉 퀀트 전략의 백테스트 결과에 대한 비교 기준으로, 비교를 통해 전략이 좋은지 나쁜지를 대략적으로 알 수 있는 str 타입이다. 알파 및 베타와 같은 전략의 일부 위험 지표도 벤치마크를 통해 계산됩니다.

freq 및 refresh_rate(전략 실행 빈도) 전략 백테스팅은 본질적으로 과거 시장 가격 및 기타 종속 데이터를 사용하여 전략 논리의 과거 재생을 수행합니다. freq와 refresh_rate 두 함수는 백테스트에 사용되는 데이터와 리밸런싱의 빈도를 공동으로 결정하는데, 그 중 freq는 사용되는 데이터가 일간 시장 데이터 또는 str 유형의 미닛 라인 시장 데이터를 의미하며, refresh_rate는 그 사이의 시간을 나타냅니다. 재조정 간격, 각 트리거 handle_data 간격에 대한 int 또는 (a, b) 구조입니다.

계정 계정 구성

Umine 백테스트 프레임워크의 거래 계정 구성 기능입니다.Umine의 최신 프레임워크는 다양한 거래 유형을 지원하며 동시에 여러 거래 계정을 백테스트할 수 있습니다.

AccountConfig(계정 구성) 는 단일 거래 계정을 구성하는 데 사용되며 전략 초기화 시 계정 구성에 따라 해당 거래 계정이 생성됩니다.
account_type(계정 유형 설정)은 str 유형인 거래 계정 유형을 설정하는 데 사용되며 보안 주식 및 온사이트 펀드, 선물 선물, otc_fund 오프 사이트 펀드(화폐 자금 제외) 및 인덱스를 지원합니다.
capital_base (초기자본 설정)
position_bas (초기포지션 설정)
cost_base (초기비용 설정)
fee (취급수수료 설정)
slippage (슬리피지 설정)
margin_rate (마진비율 설정)
Divide_method (펀드 배당방식 설정)

초기화(정책 초기화 환경)

initialize()는 정책을 실행하는 환경의 context 객체의 속성을 설정하거나 각종 변수를 커스터마이즈하기 위해 사용하는 정책 초기화 함수로, 정책 실행 주기에서 한 번만 실행된다. 컨텍스트를 통해 새 속성을 추가하거나 다양한 변수를 사용자 지정할 수 있습니다. 보여주다

handle_data(전략 연산 로직)

handle_data()는 전략 알고리즘 함수로, 전략이 실행 중일 때(백테스팅 또는 모의 거래) 초기에 구성된 전략 알고리즘 실행 빈도에 따라 호출됩니다. 전략 알고리즘은 컨텍스트를 통해 러닝 마켓 데이터, K-라인 차트, 팩터 데이터, 오더북 및 기타 데이터를 얻을 수 있으며, 분석 결과에 따라 거래 계좌를 통해 주문을 맡길 수 있습니다.

컨텍스트(정책 실행 환경)

컨텍스트는 실행 시간, 시장 데이터 등 전략 실행 환경을 나타내며
저장 전략에서 생성된 임시 데이터를 저장하는 데 사용할 수도 있습니다.

now(전략이 실행되는 현재 시점)
current_date(현재 백테스트 날짜)
previous_date(백테스트 날짜의 이전 거래일)
current_minute(현재 작업의 분 값)
current_price(거래 가격 가져오기)
get_account(가져오기 거래 계좌)
get_universe(현재 거래일에 증권 풀 가져오기)
transfer_cash(계좌 간 자금 이체)

스톡 템플릿 예

완전한 주식 전략 예시:

지난 60거래일 동안 누적수익률이 가장 높은 60개 종목을 선별해 매수하는 전략적인 아이디어로 스왑 주기는 60일이다.
전략의 최종 성과는 지수보다 약간 나은 평균임을 알 수 있습니다.

import pandas as pd 
start = '2014-11-01'                       # 回测起始时间
end = '2018-01-01'                         # 回测结束时间
benchmark = 'HS300'                        # 比较基准沪深300指数
universe = DynamicUniverse('HS300')        # 股票池是动态沪深300成分股
refresh_rate=60    #调仓频率是每60个交易日调仓一次,默认频率参数是“d”天
max_history_window=60 #默认对日线数据支持30个交易日,对分钟线支持240条K线数据 
#cintext的history方法调用要确保必须max_history_window大于调用历史数据窗口

accounts = {
    
    
    'fantasy_account': AccountConfig(account_type='security', capital_base=10000000,commission=Commission(buycost=0.001,sellcost=0.002,unit='perValue'),slippage=Slippage(value=0.0,unit='perValue'))
}
#account_type='security', capital_base=10000000股票策略 初始资金1000万元
#commission参数用于设置手续费,而 slippage 参数用于设置滑点,它们接收的是特定的Commission和Slippage实例

def initialize(context):
    pass

def handle_data(context):   
    account = context.get_account('fantasy_account') #获取我们在前面设定好的股票账户
    universe = context.get_universe(exclude_halt=True)
    #context自带了一些日期属性及价量信息、股票池处理等功能。 
    #context的get_universe方法的参数exclude_halt被设置成了True,意思是获取我们当前的股票池并且剔除停牌的股票。
    #因为我们只能交易非停牌的股票,所以要把停牌的股票去掉。
    history = context.history(universe,'closePrice',60)
    #获取了各只股票在历史上 60 个交易日的前复权收盘价,格式是一个字典,键为股票代码,值是一个索引为时间、列为前复权收盘价的DataFrame。
    
    momentum = {
    
    'symbol':[],'c_ret':[]}
    for stk in history.keys():
        momentum['symbol'].append(stk)
        momentum['c_ret'].append(history[stk]['closePrice'][-1]/history[stk]['closePrice'][0])
        # 按照过去60日收益率排序,并且选择前60只的股票作为买入候选
        
#字典初始化,对每只股票进行循环,用最近的前复权价格除以60个交易日之前的前复权价格,得到累积净值。
#然后对股票按累计净值进行排序,选取前60只股票作为待买股票池。
    momentum = pd.DataFrame(momentum).sort(columns='c_ret',ascending=False).reset_index()
    #print(momentum)
    momentum=momentum[:60] 
    buylist=momentum['symbol'].tolist()
 
 #于获取策略当前的所有持仓,具体返回的是一个字典,键为股票代码,值为持仓股票数量。
#对持仓的股票进行遍历,若它不在我们的待买股票池里,就做一个order_to(stk,0)操作,意思是将该股票清仓
    for stk in account.get_positions(): 
        if stk not in buylist:
            order_to(stk,0)
      
 #把在持仓里但不在待买股票池里的股票卖出,接着也是通过account的方法account.portfolio_value获取组合的市值,然后运用 order_pct_to 方法将所有待买股票买入或卖出到等权。
#需要注意的是,通常我们都会将卖出操作写在买入操作的前面,因为只有卖出股票腾出现金,我们才可以买入其他股票
    #等权重买入所选股票
    protfolio_value=account.portfolio_value
    for stk in buylist:
        order_pct_to(stk,1.0/len(buylist))

여기에 이미지 설명 삽입

역사 방법

캔들스틱 차트와 같은 시계열 데이터를 얻는 데 사용됩니다. 그 매개변수는 다음과 같이 설명됩니다.

(1) 기호 : 취득해야 할 유가증권의 목록을 말하며 단일 유가증권 또는 유가증권 목록을 지원한다.
(2) 속성: 획득해야 하는 속성을 말하며 단일 값 또는 속성 목록을 지원합니다. 옵션 범위는 다음과 같습니다.
◎ openPrice: 이전 복원의 시가입니다.
◎ highPrice: 복구 전 최고가.
◎ lowPrice: 회수 전 최저가.
◎ closePrice: 회복 전 종가.
◎preClosePrice: 복구 전 종가.
◎ turnoverVol: 회복 전 회전율.
◎ turnoverValue: 회복 전 회전율 값.
(3) time_range: freq 속성에 해당하는 추적해야 하는 과거 K-라인 차트의 수를 나타냅니다.
(4) freq: K-line 차트 주기를 말하며 '1d', '1m', '5m', '15m', '30m', '60m' 등의 주기를 지원합니다. '1d'는 일일 라인을 의미하고 '1m'은 1분 라인을 의미합니다. 분 K-라인 차트는 분 빈도 백테스팅에서만 사용할 수 있습니다.
(5) 스타일: 데이터 반환 유형을 말하며 'ast', 'sat' 또는 'tas'의 세 가지 유형을 선택할 수 있습니다. 여기서 'a'는 '속성'을 의미하고 's'는 기호를 의미하고 't'는 세 가지 옵션은 세 가지 차원이 표시되는 순서에 해당합니다.예를 들어 'ast'는 반환된 사전의 키가 속성이고 해당 값이 열이 기호 및 행 시간인 DataFrame임을 의미합니다. 곧.
(6) rtype: 반환 값의 데이터 유형을 나타냅니다. '프레임'과 '배열'의 두 가지 유형을 선택할 수 있습니다.

order(기호,금액,가격=0.,otype='시장')

지정된 매개변수에 따라 주문을 위탁하는 것을 말합니다. 주문 방식은 시장가 주문 또는 지정가 주문이 가능하며, 지정가 주문의 경우 otype을 "limit"로 설정하고 주문가를 설정해야 합니다.
그 매개변수는 다음과 같이 설명됩니다.

◎ 심볼일 경우 매매되는 증권의 코드를 의미하며 접미사를 반드시 .XSHG는 상해증권, .XSHE는 심천증권을 의미한다.
◎수량은 증권코드가 심볼로 거래되어야 하는 증권의 수를 말하며 양수이면 매수, 음수이면 매도 프로그램에서 자동으로 반올림 가장 가까운 정수까지.
◎가격은 지정가 주문 시 주문가를 의미합니다(장중 전략에만 해당).
◎otype일 경우 'market'(시장가 주문)과 'limit'(지정가 주문)의 두 가지 옵션 값을 의미하며, 매매 주문의 종류를 나타냅니다(일중 전략은 지정가일 경우에만 가능).

order_to (기호,금액,가격=0.,otype='시장')

주문을 하여 보유하고 있는 손의 수에 따라 특정 주식의 위치를 ​​조정하는 것을 말합니다. 전략 프레임워크는 현재 위치와 목표 위치의 차이를 자동으로 계산하고 주문합니다. handle_data가 호출될 때마다 호출되며 order_to 함수 호출은 최대 한 번만 허용되며, 그렇지 않으면 주문 수량 계산에 오류가 발생할 수 있습니다.
그 매개변수는 다음과 같이 설명됩니다.

◎ 심볼일 경우 매매되는 증권의 코드를 의미하며 접미사를 반드시 .XSHG는 상해증권, .XSHE는 심천증권을 의미한다.
◎ 금액은 종목코드가 매매가 필요한 증권의 수를 말하며 양수이면 매수, 음수이면 매도한다. 프로그램은 금액을 가장 가까운 정수로 자동 내림합니다.
◎ 가격은 지정가 주문시 주문가를 의미합니다. (장중전략만 가능)
◎ otype일 경우 매매 주문의 종류를 나타내는 'market'(시장가 주문)과 'limit'(지정가 주문)의 두 가지 옵션 값을 의미합니다(일중 전략은 지정가일 경우에만 가능).

order_pct (기호, pct)

당좌예금을 기준으로 일정한 비율로 주문하는 것을 말합니다. 예를 들어 현재 계정에 100,000위안이 있고 주문의 20%가 있는 경우 20,000위안이 최대 위탁 로트를 계산하고 주문하는 데 사용됩니다.
그 매개변수는 다음과 같이 설명됩니다.

◎ 심볼일 경우 매매되는 증권의 코드를 의미하며 접미사를 반드시 .XSHG는 상해증권, .XSHE는 심천증권을 의미한다.
◎ pct일 때 가상계좌의 현재 총액에 대한 거래가 필요한 부호가 기호인 유가증권의 비율을 말하며 범위는 0~1이며 양수이면 매수, 양수이면 매수, 음수입니다. 판매됩니다. 프로그램은 계산된 주문 수량을 가장 가까운 백 단위로 자동 내림합니다.

order_pct_to(기호, pct)

당좌예금을 기준으로 일정한 비율로 주문하는 것을 말합니다. 전략 프레임워크는 현재 위치와 목표 위치의 차이를 자동으로 계산하고 주문합니다. 예를 들어, 현재 계좌가 100,000위안이고 20% 주문을 하면 20,000위안을 사용하여 최대 위탁 로트 크기인 500주를 계산합니다.현재 300주를 보유하고 있다면 200주를 주문합니다. 주식.
그 매개변수는 다음과 같이 설명됩니다.

◎ 심볼일 경우 매매되는 증권의 코드를 의미하며 접미사를 반드시 .XSHG는 상해증권, .XSHE는 심천증권을 의미한다.
◎pct일 때 가상계좌의 현재 총액에 대한 거래가 필요한 부호가 기호인 유가증권의 비율을 말하며 범위는 0~1이며 양수이면 매수, 양수이면 매수, 음수입니다. 판매됩니다. 프로그램은 계산된 주문 수량을 가장 가까운 백 단위로 자동 내림합니다.

선물 템플릿 예시

선물 전략의 예:

매일 9시 30분 개장 시 CSI 300 선물 1랏을 매수, 9시 36분에 매도 및 청산하고 이 기간 동안 5,000위안의 손절매를 하는 것이 전략적 구상이다.

universe = ['IFM0'] #策略期货合约 指沪深300期货主力
#因为一只期货的存续时间较短,所以在进行长期回测时会涉及期货品种的切换,而在优矿的期货回测内部已经帮大家做好了这个。
#将universe设置成期货主力后,在后面的handle_data中会根据日期自动切换品种。
start = '2015-01-01'                       # 回测起始时间
end = '2015-04-07'                         # 回测结束时间
capital_base = 600000                      #初始可用资金60万元
freq = 'm'                                 # 策略频率,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
refresh_rate = 1                           # 调仓周期 调仓频率是每分钟调仓一次。
  
commission = Commission(buycost=0.0,sellcost=0.0,unit='perValue') #设置股指期货交易手续费
slippage = Slippage(value=0,unit='perValue') #设置价格滑点百分比

accounts = {
    
    
    'fantasy_account': AccountConfig(account_type='futures', capital_base=capital_base,commission=commission,slippage=slippage)
}#设置虚拟期货账户 要将‘account_type’调整为‘futures’,因为我们的账户是期货账户。这里为了简单展示,把交易费用与滑点都设置为了0。
  
def initialize(context): #初始化虚拟期货账户,一般用于设置计数器,回测辅助变量等。
    pass
  
def handle_data(context):    #回测调仓逻辑,每个调仓周期运行一次,可在此函数内实现信号生产,生产调仓指令。
    futures_account = context.get_account('fantasy_account') #拿到期货账户
    symbol = context.get_symbol(universe[0]) #拿到目前的期货主力对应的期货品种。

#context的current_minute获取当前的分钟时刻,判断其是否是9点半,如果是,则运用期货账户的order方法买入一手沪深300期货。
#需要注意的是,期货账户的下单方法要比股票多一个参数,那就是方向。因为期货既可以做多也可以做空 
    if context.current_minute == '09:30':
        futures_account.order(symbol,1,'open')
        
    #平仓   
#们在9点36分时首先通过futures_account.get_positions()获取期货账户的持仓情况,获取期货的多头持仓数量 long_amount。
#get_positions()方法返回的虽然也是一个字典,它的键是对应的期货代码,但它的值是包含持仓信息的一个实例。
    elif context.current_minute == '09:36':
        long_position = futures_account.get_positions().get(symbol,dict()).long_amount
        if long_position > 0:
            futures_account.order(symbol,-long_position,'close')
    
    #止损
#在9点36分做的就是把持有的仓位给平了。而对于止损是在 9 点半至 9点36分之间做的.
#我们首先判断目前是否有持仓,接着判断持仓是否已经亏了5000元,如果是,则提前卖出它。
    elif context.current_minute < '09:36':
        if len(futures_account.get_positions()) > 0 and futures_account.get_positions().get(symbol).today_profit<-5000:
            long_position = futures_account.get_positions().get(symbol,dict()).long_amount
            if long_position > 0:
                futures_account.order(symbol,-long_position,'close')        

여기에 이미지 설명 삽입

get_symbol(메인 연속 계약의 매핑 계약 가져오기)

신호를 생성할 때 기본 계약 시계열을 사용할 수 있지만 주문할 때
특정 계약을 사용해야 합니다 . 그날의 주요 계약 매핑의 특정 계약 기호를 가져오려면 context.get_symbol 메서드를 사용하여 다음을 얻을 수 있습니다
. 연속 계약 및 주요 연속 계약 계약의 매핑
반환 , 선물 종류에만 적용 가능. 그 매개변수는 주 계약의 기호를 나타내는 str 유형의 smybol입니다.

mapping_changed (메인 지속 계약의 매핑 계약 전환 여부 판단)

주요 연속 계약의 매핑 계약 전환 여부를 판단하는 데 사용되며
선물 품종에만 적용되는 Boolean 값을 반환합니다. 매개변수는 기본 계약 기호를 참조하고 str 유형인 smybol입니다.
예는 다음과 같습니다.
bool context.mapping_changed(symbol)

get_rolling_tuple(메인 연속 계약 매핑 관계 변경 전후 특정 계약 가져오기)

주요 연속 계약 매핑 관계의 변경 전후에 특정 계약을 얻는 데 사용되며 선물
품종에만 적용됩니다. 매개변수는 기본 계약 기호를 참조하고 str 유형인 smybol입니다.
예제는 다음과 같습니다. context.get_rolling_tuple(symbol)
문자열 쌍 유형인 메인 스위치 전후에 해당 특정 계약을 참조하는 다음과 같이 반환됩니다.
(symbol_before,symbol_after)

switch_position(시프트 조작)

symbol_before에서 symbol_after(롱 및 숏 포지션 포함)까지 같은 수의 청산
및 개시 주문을 넣어 포지션을 이동하는 작업을 말하며 선물 상품에만 해당됩니다. 매개변수가
symbol_before인 경우 위치 이동 전 계약을 의미하는 str 유형이고, 매개변수가 symbol_after인 경우 위치 이동 후 계약인 str 유형을 의미합니다.
예는 다음과 같습니다.
futures_account.switch_position(symbol_before,symbol_after)

futures_account.order(기호,금액,offset_flag,order_type='시장',가격=0)

이 기능은 선물 주문 기능입니다. 그 매개변수는 다음과 같이 설명됩니다.

◎ 심볼일 경우 거래되는 선물코드를 의미합니다. ◎ offset_flag일 경우 포지션 오픈 또는 클로징 파라미터를 의미하며, open, close 두 파라미터는 선택 사항이며,
open은 포지션 오픈, close는 포지션 클로징을 의미합니다. ◎ 금액일 경우 선물코드가 심볼인 증권의 매매수량을 말하며
offset_flag로 양의 의미와 음의 의미를 조합해야 한다. offset_flag가 열리면 금액이
양수이면 매수로 포지션을 열고, 음수이면 매도로 포지션을 열고, offset_flag가 종가이면 양수이면 포지션을 닫습니다 매수하고 음수이면 매도로 포지션을 마감합니다.
가격은 지정가 주문시 주문가를 의미합니다. (장중전략만 가능)
otype일 경우 'market'(시장가 주문)과 'limit'(지정가 주문) 두 가지 값을 선택하여 매매 주문의 종류를 표시할 수 있습니다(지정가일 경우 일중 전략만 가능).

전략 백테스팅 세부사항

[백테스트 세부 정보]를 클릭하면 백테스트 플랫폼에서 제공하는 자세한 조정
위치와 위험 수익률 지표 및 기타 데이터를 볼 수 있습니다.
여기에 이미지 설명 삽입
여기에 이미지 설명 삽입
코드를 통해 백 테스트 결과를 볼 수도 있습니다.

bt

백 테스트 보고서를 참조하며 형식은 pandas.DataFrame이며 날짜, 현금 포지션, 보안 포지션, 포트폴리오 값, 참조 지수 수익률, 거래 주문 목록 및 관찰에서 사용자가 정의한 기타 열과 같은 6개의 열을 포함합니다.

bt_by_계정

백 테스트 보고서를 참조하며 형식은 pandas.DataFrame입니다. 날짜, 현금 포지션, 유가 증권 포지션, 포트폴리오 가치, 기준 지수 수익률, 거래 주문 목록 및 사용자가 관찰에서 정의한 기타 컬럼을 포함하는 6개의 컬럼을 포함합니다.

성능

백테스트 기록을 기반으로 다양한 위험 및 수익률 지표를 계산하는 것을 말하며, 형식은 사전, 키는 지표명, 값은 지표의 값으로 일부는 플로트, 일부는 리스트입니다.

전략 리스크 평가 지표

연간 수익률

투자기간 1년에 대한 기대수익률을 나타내며, 계산식은
여기에 이미지 설명 삽입
, pend는 전략의 최종 총자산, pstart는 전략의 초기 총자산, n은 백테스트 횟수를 의미한다. 거래일.

벤치마크 수익률

기준 연환산 수익률을 나타내며, 계산식은
여기에 이미지 설명 삽입
Bend는 벤치마크의 최종값, Bstar는 벤치마크의 초기값, n은 백테스트 거래일수를 나타냅니다.

알파

투자에서 직면하는 비체계적 위험을 나타냅니다. 알파는 시장 변동과 무관한 투자자가 얻은 수익으로 일반적으로 투자자의 투자 능력을 측정하는 데 사용됩니다. 예를 들어, 투자자가 12%의 수익을 올리고 그들의 벤치마크가 10%의 수익을 얻는다면 알파 또는 가치 상승은 2%입니다. 계산 공식은
여기에 이미지 설명 삽입
여기서 Pr은 전략의 연간 수익률, rf는 무위험 수익률, Br은 벤치마크의 연간 수익률입니다.

a>0, 전략이 위험
a=0에 비해 초과 수익을 얻었음, 전략이 위험 a<0에 비해 적절한 수익을 얻었음
, 전략이 위험에 비해 적은 수익을 얻었음

베타

더 넓은 시장의 변화에 ​​대한 전략의 민감도를 반영하여 투자에서 직면한 시스템적 위험을 나타냅니다. 예를 들어 전략의 베타가 1.3이면 시장이 1% 상승할 때 전략이 1.3% 상승할 수 있고 그 반대의 경우도 마찬가지이며 전략의 베타가 -1.3이면 전략이 1.3 하락할 수 있음을 의미합니다. % 시장이 1% 상승할 때 %. %,반대. 계산 공식은
여기에 이미지 설명 삽입
다음과 같습니다. 여기서 pn은 전략의 일일 수익률, Bn은 벤치마크의 일일 수익률, 벤치마크의 일일 수익률 Cov(pn, Bn)의 분산을 나타냅니다. 전략의 일일 수익률과 벤치마크 일일 수익률의 공분산을 나타냅니다.

샤프 비율

총 위험의 단위당 얼마의 초과수익이 발생할 것인지를 나타내며 전략의 이익과 위험을 동시에 종합적으로 고려할 수 있습니다. 계산식은 다음과 같다
여기에 이미지 설명 삽입
. 여기서 pr은 전략의 연환산 수익률, rf는 무위험 수익률, σp는 전략 수익률의 변동성을 의미한다.

수익률 변동성(변동성)

자산의 위험을 측정하는 데 사용되며 변동성이 클수록 전략의 위험이 커집니다. 계산 공식은
여기에 이미지 설명 삽입
다음과 같습니다. 여기서 n은 백테스트 거래일 수, pt는 전략의 일일 수익률, 여기에 이미지 설명 삽입전략의 일일 평균 수익률을 나타냅니다. 여기에 이미지 설명 삽입계산 공식은여기에 이미지 설명 삽입

정보 비율

초과 위험 단위로 인한 초과 수익을 측정하는 데 사용됩니다. 정보비율이 클수록 전략단위 추적오차로 얻는 초과수익률이 높다. 따라서 정보 비율이 큰 전략이 정보 비율이 낮은 펀드보다 성과가 좋습니다. 합리적인 투자 목표는 적당한 위험을 감수하면서 가능한 한 높은 정보 비율을 추구하는 것입니다. 그 계산 공식은
여기에 이미지 설명 삽입
여기서 pr은 전략의 연간 수익률, Br은 벤치마크의 연간 수익률, σt는 전략의 일일 수익률과 벤치마크 일일 수익률의 차이.

최대 드로다운(Max Drawdown)

전략의 최악의 상황을 기술할 때 사용하며 계산식은 다음과 같다
여기에 이미지 설명 삽입
. .

이직률


여기에 이미지 설명 삽입
전략변경의 빈도와 특정 종목 의 평균 보유시간을 기술하는데 사용되며 계산식은 다음과 같다. 가상계좌의 평균가치.

전략 거래 세부사항

백테스트 트랜잭션 매칭 메커니즘 및 주문 위탁

백테스팅 중에는 과거 실시간 시장 조건을 기반으로 한 가상 매칭인 handle_data 기능이 실행된 후 주문 매칭 프로세스가 수행됩니다. 실제 장면의 시뮬레이션이기 때문에 특정 가격으로 바로 주문이 체결되는 것이 아니라 실시간 시장의 특정 가격 및 특정 거래량과 비교하여 거래 가격 및 거래 시간이 결정됩니다.
매칭 메커니즘은 "주문이 먼저 접수되고 시가가 매칭된다"는 원칙을 따릅니다. 즉, 먼저 접수된 주문이 먼저 시도됩니다.

미끄러짐

실제 증권 거래 환경에서는 주문이 접수된 시점과 최종 거래가 이루어지는 시점 사이에 일정한 편차가 있는 경우가 많으며, 주문이 시장에 위임된 후에는 시장 추세에 일정한 영향을 미치게 됩니다. 예를 들어 매수 주문은 시장 가격을 높이고 매도 주문은 시장 가격을 낮춥니다. 이러한 충격 비용은 미끄러짐을 만듭니다. 실제 시장에서 전략의 성능을 보다 현실적으로 시뮬레이션하기 위해 Umine은 시장 충격 및 거래 가격 변동으로 인한 거래 비용의 변화를 평가하기 위해 백 테스트 중에 슬리피지 모드를 제공합니다. 슬리피지 키워드를 설정하여 특정 슬리피지 정보를 설정할 수 있으며 기본 슬리피지는 0입니다.

거래세

거래세 및 수수료에는 주로 중개수수료 및 인지세가 포함됩니다. 기본적으로 프리미엄 마이닝 백테스트는 구매 시 1/1000, 판매 시 2/1000의 세금을 채택합니다. 더 미묘한 조정이 필요한 경우 백테스트 초기화 매개변수 커미션 키워드를 설정하여 세금 정보를 사용자 정의할 수 있습니다.
◎ 중개수수료 : 현재 중국 A주식 시장에서는 중개회사가 부과하는 주문수수료가 쌍무적으로 부과되고 있으며, 수수료는 각 중개회사마다 상이합니다.
◎ 인지세 : 국가에서 부과하는 인지세로 현재는 매도인에게 일방적으로 부과되고 매수인에게는 부과되지 않으며 0.1%입니다.

정지 및 상장폐지

위탁한 주문이 일시정지, 상장폐지 등 당일 거래가 불가능할 경우 해당 주문은
무효처리되며 낭비되는 주문이 됩니다.

가격 제한

위탁한 주문이 당일 등락하여 매수 또는 매도할 수 없는 경우 해당 주문은 장 종료 시까지 지정가 주문으로 유지됩니다.

연속 선물 계약에 대한 갭 처리

연속계약은 서로 다른 계약으로 구성되어 있으며 전후 두 계약의 가격차이가 있어 연속계약의 가격차이가 확연합니다. 전면 계약과 후면 계약의 가격 차이가 상대적으로 크면 전략에 잘못된 신호가 발생하고 신호 왜곡이 발생합니다. Youkuang은 잘못된 신호의 영향을 줄이기 위해 지속적인 계약 시계열을 처리하는 가격 차이 변환 방법 및 사전 복구 방법을 제공하며 동시에 계약 지표를 기반으로 신호를 직접 생성할 수 있는 계약 지표를 제공합니다.

추천

출처blog.csdn.net/qq_47326711/article/details/126972962