Skip to content

Latest commit

 

History

History
129 lines (116 loc) · 6.31 KB

README.md

File metadata and controls

129 lines (116 loc) · 6.31 KB

pip 설치 리스트

pip install IPython python-dotenv jwt requests mplfinance pandas setuptools wheel
pip install -U matplotlib

시뮬레이터

실제 거래 정보를 바탕으로 시뮬레이션을 진행해야하니 가장 기본적인 기능

git clone https://github.com/msaltnet/smtm.git -b first-simulator

python3 ./setup.py install
python3 -m smtm --from_dash_to 201220.170000-201220.180000 --term 0.5 --strategy 0

Data Provider

데이터를 웹이나 파일로부터 제공받을 수 있어야함 이후 생기는 파일들은 모듈화 "_ _ init_ _ .py" 에 내부 파일 정보를 바탕으로 해당 폴더 안의 .py 파일을 모듈로 구성하는 것으로 인식 하는 것

from smtm import *
# __init__.py의 __all__에 기술된 모듈들이 로딩됨

내부에 from .(불러올때 사용할 이름) import (파일 이름)의 형식을 가지고 _ _ all _ _ = [ "", "", ]의 형식으로 모듈 어트리뷰트가 있음 여기에 정의해 둔 것으로 와일드카드

import *
# 이부분을 와일드 카드로 정의함

로 로딩할 때 사용되는 모듈을 정의해 놓은 것

추상클래스 모듈을 만든 이후 클래스를 생성하고 pass 문구를 통해 추상 클래스를 잘 만들어 놓으면 해당 클래스에 대한 개념이 분명해지고 앞서 모듈이 명확한 역할을 가져야 함. python에서 언더바 두개를 붙여서 private 메서드로 설정이 가능함 private 메서드는 외부에서 호출이 불가능하다. 하지만 완전히 막아둔 것은 아니고 dataProvider._SimulationDataProvider _ _ create_candle_info 와 같은 형태로 접근할 수 있음

해당 파일 analyzer.py -(log_manager) simulation_data_provider.py -(date_converter.py, data_provider.py, log_manager)

Strategy

데이터를 분석해서 매매 요청을 생성할 수 있어야함 거래 정보를 받아와 거래 정보에 따라 살지, 팔지 아니면 기다릴지 의사결정 부분이 있어야함

  • 초기 자산을 설정할 수 있다.
  • 데이터를 입력 받아 저장한다. (제공되는 데이터를 입력 받을 때마다 모두 저장하여 이후 분석에 사용)
  • 입력 받은 데이터와 매매 결과를 바탕으로 거래 요청 정보를 생성한다. (데이터와 결과, 자산을 바탕으로 전략에 따른 거래 요청 정보를 생성)
  • 거래 요청 정보는 1개만 유지 (이전 생성한 요청 정보가 완료하지 않을 경우 새로운 거래 요청 정보를 생성할 때 이전 요청정보의 취소 요청도 전송한다.)
  • 거래 요청의 결과를 저장 (거래 요청 결과를 모두 저장하여 이후 분석에 사용)
  • 거래 요청의 결과 정보를 통해 자산 현황을 갱신 (전략에 반영되는 자산 현황은 거래 요청 결과를 통해 갱신)

대상 파일 strategy_bnh.py - (strategy, log_manager)

Trader, Virtual Market

거래소를 대신하여 매매 요청을 처리할 수 있어야 함

  1. 가상 거래소를 초기화 한다.(기간, 횟수, 예산 등을 초기화하는 시뮬레이션에서만 필요한 기능)
  2. 거래소에 거래 요청을 전달하고 다시 결과를 받아서 전달
  3. 거래소에 계좌 정보를 요청하고 결과를 받아서 전달한다.

대상파일 Trader trader.py simulation_trader.py - (trader, virtual_market) 초기화 거래 주문 전송하기 계좌 정보 조회하기

Analyzer

거래 요청과 결과를 모두 기록하고 분석된 정보를 제공해야 함 시뮬레이터의 핵심 요구사항 - 거래 요청과 결과를 모두 기록하고 분석된 정보를 제공해야 함

  1. 매매 요청, 결과 정보를 저장, 잔고 정보를 요청하여 저장 모든 매매 결과를 저장할 때 잔고 정보를 요청하여 저장
  2. 기준 시점을 설정할 수 있음 결과 분석을 위한 기준 시점을 첫 번째 자산 정보가 기록된 시점으로 함
  3. 주기적으로 수익률을 저장할 수 있어야함 종목 수익률은 현재 보유하고 있는 항목의 구입 가치 대비 수익률을 뜻함 누적 수익률은 총 재산의 기준 시점 대비 수익률로 계산
  4. 주기적으로 가격 변동률을 저장 가격 변동률은 기준 시점 종목 가격 대비 현재 가격으로 계산
  5. 현재 기록으로 보고서를 생성 입금 자산, 최종 자산, 누적 수익률, 가격 변동률을 포함함

대상 파일 analyzer.py - log_manager

Operator

위의 기능들은 파라미터에 따라 다르게 동작할 수 있어야함

  1. 정해진 기간 내에 정해진 자산으로 시뮬레이션을 수행할 수 있다. Data Provider, Strategy, Trader, Analyzer를 연동하여 시뮬레이션을 수행
  2. 기간과 초기 자산을 설정할 수 있어야 한다.
    • 기간과 초기 자산을 설정할 수 있어야함
    • Data Provider에 기간을 설정한다.
    • 전략 초기 자산을 설정한다.
    • Trader에 기간, 초기 자산을 설정한다.
  3. 시뮬레이션을 실행하면 자동으로 수행되어 결과를 생성할 수 있어야 한다.
    • 자동으로 반복 수행된다.
    • 모든 거래 요청, 거래 결과는 Analyzer에 전달된다.
    • Trader가 시뮬레이션이 종료되었음을 결과로 제공하면 시뮬레이션을 종료한다.
    • 시뮬레이션을 종료할 때 Analyzer를 통해 보고서를 생성
    • 보고서를 화면에 출력하고 시뮬레이션을 종료한다.

대상 파일 simulation_operator.py - operator, log_manager, worker

Controller

controller는 사용자에게 입력을 받고 Operator에게 명령을 전달하여 시스템의 결과를 사용자에게 전달하는 역할을 함 _ _ main _ _ 모듈 C 언어에서 main은 어떤 프로그래므이 시작점임 프로그램을 실행한다는 것 = 메모리에 프로그램을 복사하고 main 함수를 실행하는 과정임 그래서 실행 가능한 프로그램이 만들어질 때 main함수는 반드시 하나 이상 존재하여야함 argparse를 통해서 옵션을 지정해줄 수 있음 ex) -h help 와 같은 상태를 의미

추가사항

  • Docker로 컨테이너화
  • AWS (가상 컴퓨터)에서 돌아갈 수 있도록 만들며
  • 분석 결과를 볼 수 있도록(시각화)하기