머신 러닝을 사용하여 Quantiacs에 대한 시장 예측 : 능선 회귀 예제

새로운 Quantiacs 플랫폼을 통해 quants는 재무 데이터를 무료로 다운로드 할 수 있습니다. 시장에 대한 예측은 오프라인으로 수행하거나 Quantiacs 백 테스터를 로컬로 다운로드하거나 클라우드를 무료로 사용하여 온라인으로 수행 할 수 있습니다. 이 기사에서는 Ridge 회귀를 기반으로 한지도 학습 예제를 설명합니다.

Quantiacs를 구축 할 때 우리는 퀀트가 더 많은 기술적 세부 사항을 놓치지 않고 현실적인 거래 시뮬레이션을 수행 할 수있는 플랫폼에 집중했습니다. 우리는 글로벌 금융 시장을위한 고품질 거래 시스템이 퀀트 헤지 펀드 산업에 속하지 않는 재능있는 연구 과학자, 소프트웨어 개발자 및 학생들이 개발할 수 있다고 믿습니다.

현재 시스템에 대한 수수료를 받고있는 최고의 사용자 중에는 실제로 UC Santa Barbara의 물리학 박사 학생 인 Alex와 같은 기술 학부의 학생들이 Quantiacs 콘테스트에서 우승했을 때 1 백만 달러를 할당 받았습니다. 메카트로닉스 엔지니어이자 프로 파이 트레이더로 2 개의 대회에서 우승하면서 2 백만 달러를 할당 받았습니다. 더 많은 자료는 웹 페이지 에서 찾을 수 있습니다 .

당신은 양적 거래에 뛰어 들고 싶은 데이터 과학자입니까, 아니면 어떤 아이디어가 효과가 있는지 테스트하고 싶습니까? 그렇다면 Quantiacs를 사용해보십시오.

Unsplash에 Matthew Henry의 사진

Quantiacs 사용

Quantiacs에 가입하는 것은 쉽습니다.

  • 플랫폼에 등록 하십시오. 당사는 사용자의 개인 정보를 소중히 여기므로 사용자 이름과 비밀번호를 제공해야합니다. 원하는 경우 GitHub, Google 또는 Facebook 자격 증명으로 로그인 할 수도 있습니다.
  • 개발 섹션이 있는 개인 사용자 영역을 처리 할 수 ​​있습니다 . 여기에서 제공된 예제 중 하나를 선택하고 복제 버튼을 클릭 할 수 있습니다. 나중에 클라우드에서 Jupyter Notebook 또는 JupyterLab을 사용하여 내 전략 섹션에서 코드를 편집 할 수 있습니다. 8G RAM 및 1 Xeon E5–1650 코어를 사용하여 클라우드에서 각 전략을 실행할 수 있으며 당사가 제공하는 모든 재무 데이터에 온라인으로 액세스 할 수 있습니다.
  • 워크 스테이션에서 로컬로 작업하려는 경우 모든 재무 데이터와 백 테스터를 로컬로 다운로드 할 수 있습니다. 로컬 설치의 경우 conda를 사용 하고 당사 페이지에서 제공 하는 자세한 지침 을 읽는 것이 좋습니다 .
  • 코드에 만족하면 사용자 영역에서 제출 버튼을 클릭하고 라이브 평가를 위해 서버에 제출할 수 있습니다. 우리는 현재 2 개의 콘테스트 (15 번째 클래식 Quantiacs Futures 콘테스트와 1 번째 Bitcoin Futures 콘테스트)를 진행하고 있으며, 시스템의 라이브 Sharpe 비율에 따라 순위가 매겨진 각 콘테스트의 최고 7 개 퀀트가 4 개의 보장 할당에 참여합니다. 백만 달러. 그러나 제출 된 모든 시스템은 흥미로운 라이브 트랙 기록을 개발하는 경우 할당 대상으로 간주됩니다.

Quantiacs 플랫폼의 새 버전을 작성할 때 우리는 기계 학습 방법을 사용하기에 적합한 환경을 제공하는 데 특별한주의를 기울였습니다. 이 기사에서는 비트 코인 선물 계약을 거래하고 Ridge 회귀 (또는 Tikhonov 정규화 의보다 일반적인 개념)를 기반으로하는 시스템의 구현에 대해 설명합니다 .

전체 코드

전체 코드는 매우 간결하며 노트북의 셀에 복사 할 수 있습니다.

import xarray as xr
import numpy as np
import logging
import qnt.data as qndata
import qnt.backtester as qnbt
def load_data(period):
    return qndata.cryptofutures.load_data(tail=period)
def predict_weights(market_data):
def get_ml_model():
    from sklearn.linear_model import RidgeClassifier
    model = RidgeClassifier(random_state=18)
    return model
def get_features(data):

    def preprocess_data(raw_prices):
      log_prices = raw_prices.copy(True)
      assets = log_prices.columns
      for asset in assets:
        log_prices[asset] = np.log(log_prices[asset])
      return log_prices
prices = data.sel(field="close").\
             ffill("time").bfill("time").fillna(0)
    prices_df = prices.to_pandas()
    features = preprocess_data(prices_df)
    return features
def get_target_classes(data):
price_current = data.sel(field="close").dropna("time")
    price_future = price_current.shift(time=-1).dropna("time")
class_positive = 1
    class_negative = 0
target_up = xr.where(price_future > price_current,\
                class_positive, class_negative)
    return target_up.to_pandas()
data = market_data.copy(True)
asset_names = data.coords["asset"].values
  features = get_features(data)
  target = get_target_classes(data)
prediction_df = data.sel(field="close").isel(time=-1).to_pandas()
for asset_name in asset_names:
    target_asset = target[asset_name]
    features_asset = features[asset_name][:-1]
target_asset, features_asset = \
      target_asset.align(features_asset, axis=0, join="inner")
model = get_ml_model()
    try:
      model.fit(features_asset.values.reshape(-1, 1), target_asset)
features_asset_predict = features[asset_name][-1:]
prediction_asset = \
        model.predict(features_asset_predict.values.reshape(-1, 1))
      prediction_df[asset_name] = prediction_asset
    except:
      logging.exception("model failed")
      return xr.zeros_like(data.isel(field=0, time=0))
return prediction_df.to_xarray()
weights = qnbt.backtest(
    competition_type = "cryptofutures",
    load_data = load_data,
    lookback_period = 18,
    start_date = "2014-01-01",
    strategy = predict_weights,
    analyze = True,
    build_plots = True
)

블록별로 분석해 보겠습니다. 처음에는 기본적인 범용 라이브러리와 Quantiacs 라이브러리에서 필요한 모듈을 가져옵니다.

import xarray as xr
import numpy as np
import logging
import qnt.data as qndata
import qnt.backtester as qnbt

비트 코인 선물 데이터를로드하는 기능은 다음과 같이 간단하게 정의됩니다.

def load_data(period):
    return qndata.cryptofutures.load_data(tail=period)

전략이 정의 된 코드의 핵심은 블록에 포함됩니다.

def predict_weights(market_data):
def get_ml_model():
    from sklearn.linear_model import RidgeClassifier
    model = RidgeClassifier(random_state=18)
    return model
def get_features(data):

    def preprocess_data(raw_prices):
      log_prices = raw_prices.copy(True)
      assets = log_prices.columns
      for asset in assets:
        log_prices[asset] = np.log(log_prices[asset])
      return log_prices
prices = data.sel(field="close").\
             ffill("time").bfill("time").fillna(0)
    prices_df = prices.to_pandas()
    features = preprocess_data(prices_df)
    return features
def get_target_classes(data):
price_current = data.sel(field="close").dropna("time")
    price_future = price_current.shift(time=-1).dropna("time")
class_positive = 1
    class_negative = 0
target_up = xr.where(price_future > price_current,\
                class_positive, class_negative)
    return target_up.to_pandas()
data = market_data.copy(True)
asset_names = data.coords["asset"].values
  features = get_features(data)
  target = get_target_classes(data)
prediction_df = data.sel(field="close").isel(time=-1).to_pandas()
for asset_name in asset_names:
    target_asset = target[asset_name]
    features_asset = features[asset_name][:-1]
target_asset, features_asset = \
      target_asset.align(features_asset, axis=0, join="inner")
model = get_ml_model()
    try:
      model.fit(features_asset.values.reshape(-1, 1), target_asset)
features_asset_predict = features[asset_name][-1:]
prediction_asset = \
        model.predict(features_asset_predict.values.reshape(-1, 1))
      prediction_df[asset_name] = prediction_asset
    except:
      logging.exception("model failed")
      return xr.zeros_like(data.isel(field=0, time=0))
return prediction_df.to_xarray()

  • 기계 학습 모델이 정의 된 함수 "get_ml_model"입니다. scikit-learn 에서 Ridge 회귀 분류기를 선택 했지만 Python 생태계에서 사용 가능한 다른 분류기 / 라이브러리를 사용할 수 있습니다. 온라인 환경에는 필요한 라이브러리를 설치하고 conda 또는 pip를 사용하여 종속성을 해결하기위한 init Notebook이 포함되어 있습니다. 오프라인 개발의 경우 전용 Quantiacs 환경에서 작업하고 여기에 설명 된대로 패키지 설치에 conda를 사용하는 것이 좋습니다 .
  • 예측 기능이 정의 된 함수 "get_features"입니다. 여기서 우리는 다양한 자산의 종가의 로그를 단순히 기능으로 취하고 있습니다.
  • 타겟을 정의하는 함수“get_target_classes”. 우리의 선택은 매우 간단합니다. 오늘의 가격이 어제의 가격보다 크면 레이블 "1"을 할당하고 그렇지 않으면 레이블 "0"을 할당합니다. 레이블 "1"은 나중에 자산에 대한 긍정적 인 노출 (매수)을 위해 사용되며 레이블 "0"은 포지션을 취하지 않는 데 사용됩니다 (매수 포지션을 닫고 모든 것을 현금에 투자).

마지막으로 backtester 함수를 호출합니다.

weights = qnbt.backtest(
    competition_type = "cryptofutures",
    load_data = load_data,
    lookback_period = 18,
    start_date = "2014-01-01",
    strategy = predict_weights,
    analyze = True,
    build_plots = True
)

손익 및 수중 차트에서 알 수 있듯이 시스템의 성능은 상당히 우수합니다.

시스템은 1보다 큰 샘플 샤프 비율을 가지고 있으며 콘테스트에 제출할 수 있습니다. 계정의 예제 섹션 (Machine Learning-Ridge Classifier)에서 준비된 버전을 제공합니다.

제출 된 시스템에 대해 상관 관계 검사를 수행하고 템플릿 제출을 허용하지 않으므로 예제의 참조는 선택 필터를 통과하지 못합니다. 매개 변수, 기능, 대상 또는 기계 학습 모델 자체를 변경하여 시스템 수정을 시작할 수 있습니다.

GitHub 소스 코드 :https://github.com/quantiacs-io/strategy-cryptofutures-ml-ridge

질문이 있습니까? 커뮤니티 포럼 사용 :https://quantiacs.com/community/

또는 우편으로 문의 : info@quantiacs.com

Suggested posts

아마존 상품 리뷰의 감정 분석

아마존 상품 리뷰의 감정 분석

안녕하세요 여러분,이 기사에서는 Amazon Electronics 제품 리뷰에 대한 감정 분석을 안내합니다. 내용 : 감성 분석은 자연어 처리, 텍스트 분석, 통계를 이용하여 고객 감성을 분석하는 과정입니다.

🔥Keepsake🔥 — 머신 러닝을위한 버전 관리

🔥Keepsake🔥 — 머신 러닝을위한 버전 관리

머신 — 배포, 추적, 수리 및 반복이 블로그 게시물에서는 🔥 Keepsake 🔥에 대해 논의 할 것입니다. Keepsake는 머신 러닝 실험을위한 버전 관리 도구입니다.