Fixstars Amplify SDK를 사용하여 닛케이 225개 품목 중 조합 최적화

개시하다
양자 컴퓨팅 by NRI Advent Calendar 2021, 22일.지금까지 업계의 움직임, 공식, 그림 등은 어려운 일이 많았다.
나는 이 글에서 어려운 공식을 쓰지 말고 자신이 했던 일을 써 보려고 한다.
이번에 우리는 픽스타즈가 제공한 이은웅신(양자퇴화기 포함)을 대상으로 하는 라이브러리 픽스타즈 암플리파이 SDK, 픽스타 암플리파이의 대부분 온라인 시연을 참고하여 일본 주식의 투자조합을 최적화시켰다.
이 기사로 쓰다
  • Fixstars Amplify SDK
  • 일본 주식의 투자조합 최적화
  • Fixstars Amplify SDK 정보
    Fixstars Amplify SDK는 주식회사 퍼시픽스타가 개발해 제공한 시그마신을 위한 중간부품 라이브러리다.팝업을 사용하는 응용 프로그램과 하드웨어의 중간층으로서 다양한 기능을 제공하여 곰신을 교사하는 편의성을 높이고 응용 소프트웨어의 효율적인 개발을 향상시킬 수 있다.공식 문서 .
    Fixstars Amplify SDK는 기능뿐 아니라 많은 기술 자원을 제공해 양자컴퓨터의 학습에 매우 유익한 정보를 제공한다.음식을 먹지 말고 잘 읽어보는 것도 좋을 것 같아요.(^ω^)

    https://amplify.fixstars.com/ja/techresources/
    SDK 활용 방법을 참고할 수 있는 온라인 프레젠테이션도 많이 준비됐다.샘플 코드를 선택한 후 Jupter Notebook이 시작하여 문제의 설명, 공식화, 실시에 대해 상세하게 설명하였다.0부터 모두 시도하는 것을 추천합니다.

    https://amplify.fixstars.com/ja/demo
    기타 자세한 정보를 알고 싶으신 분들은 공식 사이트문서를 보십시오.
    Fixstars Amplify SDK를 사용하여 일본 포트폴리오 최적화
    조합 최적화 프레젠테이션 정보
    픽스타 앰플리파이 SDK의 온라인 퍼레이드조합 최적화에서 약 100개 미국 주식의 수십일간 가격 변동을 토대로 예상 수익률 최대화와 위험 최소화의 예를 보여줬다.

    https://amplify.fixstars.com/ja/demo?demo_id=13
    온라인 프레젠테이션의 공식과 코드를 순서대로 진행하고 마지막으로 이은웅신의 구해기에 모형을 넣고 조합 최적화된 답을 얻습니다!!

    ( ^ω^)・・・
    나는 미국 주식에 대해 그리 익숙하지 않아서 아무런 느낌도 없다...
    (゜д하하그렇다면 이 글의 목적은 일본 주식으로 해보려는 것이다.
    단계 실행 정보
    준비된 데이터로 조합 최적화를 위해서는 온라인 데모 대신 로컬 환경에서 SDK 실행 환경을 준비해야 한다.
    이번에는 Windows 환경에서 실행되었기 때문에 WSL을 설치하여 규정된 Ubuntu에서 기본적인pytohon3 환경 구축을 진행하였다.
    wsl --install
    
    실행 후 다시 시작하고 사용자 이름과 비밀번호의 등록이 필요하기 때문에 적절하게 설정합니다.
     
    필요한 패키지를 설치합니다.
    sudo apt update
    sudo apt upgrade
    sudo apt install python3-pip
    sudo apt install jupyter-notebook
    pip install amplify #自動でnumpyも入る
    pip install pandas
    pip install matplotlib
    
    환경에 따라 /etc/resolv.conf에 잘못된 DNS를 등록하거나 apt의proxy를 설정해야 합니다.
    또 WSL이 C형 드라이브에 놓여 다소 방해가 되므로 D형 드라이브로 이동하는 것도 좋다.
    Windows에서 적합한 디렉터리에 설정할 수 있는 온라인 프레젠테이션의 jupter notebook을 다운로드하십시오.

    WSL에서는 C 드라이브와 D 드라이브가 /mnt/ 아래에 설치되어 있기 때문에 방금 설치한 notebook을 확인할 수 있습니다.

    notebook이 설치된 디렉터리에서 jupter notebook을 시작하면 디렉터리를 설정하지 않아도 jupter에서 확인할 수 있습니다.
    jupyter notebook
    

    이후 Amplify 웹사이트에서 후술한 데이터 취득과 카탈로그 정보 재작성, Amplify AE 토큰을 받아 토큰 정보를 적으면 이동이 가능하다.

    참고 가치가 있는 사이트
  • WSL 설치
  • Proxy 환경에서 "appt update" 를 실행할 수 없을 때의 노트
  • WSL의 Linux를 C 드라이브에서 이동
  • Windows를 사용하여 환경을 최대한 오염시키지 않고 파이톤을 시작하는 방법(WSL은 Windows 10version 1607 이후 한정)
  • 초보자를 위한 Jupter Notebook에서 비밀번호나 토큰이 요구될 때의 대응 방법
  • 데이터 준비
    동증의 일부분이 매우 많은데 이번에 우리는 2021/-2021/12/17의 데이터(225개 품종, 235일)를 수집하여 일경 225개 품종에 집중하였다.
     pip install pandas-datareader
     pip install yahoo_finance_api2
     pip install yfinance
    
    내가 조사해 보니 대략 이 세 단어는 일본 주식의 데이터를 수집하는 데 쓰인다.(다른 건 많은데 이번엔 생략)
    도구의 웹 사이트와 Yahooo!금융 도움말에서 보듯이 덮어쓰기를 금지하고 도구와 처리 데이터를 사용할 때 주의해야 한다.
    CSV 파일을 통해 원하는 브랜드 코드를 만들고 pandas를 통해 읽습니다.
    import pandas as pd
    shares225 = pd.read_csv("./share_code_jp.csv", encoding="ms932", sep=",", header=0)
    print(shares225)
    

    다음 임의의 방법으로 각 증권 코드의 주가 정보를 얻어 증권 코드를 파일 이름의 CSV 파일로 저장한다.
    yahoo_finance_api2의 예
    from yahoo_finance_api2 import share
    from yahoo_finance_api2.exceptions import YahooFinanceError
    
    for code in shares225["code"]:
        my_share = share.Share(str(code) + ".T")
        symbol_data = None
    
        try:
            symbol_data = my_share.get_historical(share.PERIOD_TYPE_DAY,60,share.FREQUENCY_TYPE_DAY,1)
            df = pd.DataFrame(symbol_data.values(), index=symbol_data.keys()).T
            df.timestamp = pd.to_datetime(df.timestamp, unit='ms')
            df.index = pd.DatetimeIndex(df.timestamp, name='timestamp').tz_localize('UTC').tz_convert('Asia/Tokyo')
            df.to_csv("<dir>"+ str(code) + ".csv", index=False)
        except YahooFinanceError as e:
            print(e.message)
    
    ※ 아마yahoo_finance_api2라면 최근 두 달 분량 밖에 안 되는 것 같아요.
     
    예제
    import yfinance as yf
    from pandas_datareader import data as pdr
    import yfinance as yf
    yf.pdr_override()
    
    for code in shares225["code"]:
        share_code = str(code) + ".T"
        df = pdr.get_data_yahoo(share_code, start="2021-01-01", end="2021-12-17")
        df.to_csv("<dir>"+ str(code) + ".csv")
    
    
     
    이어 디렉터리 아래의 데이터를 읽기 위해 코드 수정<dir>을 진행한다.이번에 나는 data 디렉터리를 만들고 파일을 저장했기 때문에 그 디렉터리를 지정했다.
    # <dir>以下のデータの読み込み
    asset, names = read_csv_data_yahoo(root="<dir>")
    num_brand, num_date = asset.shape
    
    # ヒストリカルデータ方式による期待収益率とリスク分散の計算
    expected_rate_of_return, variance_rate_of_return = histrical_data_method(asset, D)
    
    기계의 운행에 관하여
    데이터를 수집한 후 온라인 데모와 같이 진행됩니다.조합된 코드를 최적화하려면 Amplify 데모를 확인하십시오.
    브랜드 수와 일수가 온라인 퍼레이드보다 많아 시간 안에 반납할지 궁금하다
     
    결국, 무사히 돌아왔다!!(゜゜)(목적 함수와 제약조건을 결합한 QUBO 모델의 내용을 출력할 때 공식이 길어져 jupter notebook이out of memory에 표시되지 않는다.)

    ( ^ω^)・・・
    ( ^ω^)좋아!
    ( ^ω^) (브랜드 이름을 제시하지 마세요)
    포트폴리오가 채택한 브랜드별 약 1년간 가격 변동을 도표로 만들면 이런 느낌이다.

    주가 도표화 예시
    import pandas_datareader.data as web
    import matplotlib.pyplot as plt
    SYMBOLS = ["2914.T", "5214.T", "9434.T", "9020.T", "2802.T", "5232.T", "5201.T", "3382.T", "4689.T"]
    df = web.DataReader(SYMBOLS, data_source='yahoo', start='2021-01-01')
    df["Close"].plot(figsize=(20,10))
    
    ( ^ω^)・・・
    ( ^ω^)(브랜드 간 연관성이 낮고 이윤을 높일 수 있는 조합이 아닐까...연관성이 얼마나 있는지...)
    최후
    시위 행진과 마찬가지로 우리는 일본 주식으로 투자조합의 최적화를 시도했다.신경 쓰이는 부분에 코드를 추가해 내부 데이터와 처리에 대한 이해를 높였다.
    다음으로, 목적 함수로부터 직접 설계한 다른 문제를 찾아내 Amplify SDK를 사용해 보려고 합니다.
    이번에는 일본 주식의 포트폴리오 최적화가 이뤄졌지만 개발 목적의 활용을 위한 것일 뿐 실제 투자에는 활용되지 않았다.여러분도 허가증과 허가증을 충분히 주의하여 참고해 주십시오.m(__)m
    https://amplify.fixstars.com/ja/termsofuse
    https://pypi.org/project/yfinance/
    https://support.yahoo-net.jp/PccFinance/s/article/H000011276

    좋은 웹페이지 즐겨찾기