AIPilotSmarteasy 사용 사례 – AI 알고리즘 트레이딩으로 코인 거래하기 5
run_agent.py
이 Python 스크립트는 암호화폐 거래 환경 시뮬레이션을 위한 복잡한 실험 코드입니다. 주요 특징들을 상세히 설명드리겠습니다:
- 주요 목적:
- 암호화폐(이더리움, 비트코인, 솔라나) 거래 환경을 시뮬레이션
- GPT 모델을 활용한 의사결정 및 학습 메커니즘 테스트
- 다양한 데이터 소스(기술적 신호, 트랜잭션 통계, 뉴스)를 통합한 거래 전략 분석
- 주요 기능:
- 커맨드라인 옵션을 통한 세부 실험 설정
- 멀티 트라이얼 실행 지원
- 메모리 기반 학습
- 상세한 로깅 및 실험 추적 시스템
- 핵심 매개변수:
- 데이터셋 선택 (ETH, BTC, SOL)
- 사용할 AI 모델 (GPT-3.5, GPT-4)
- 시뮬레이션 날짜 범위
- 기술적 신호, 트랜잭션 통계, 뉴스, 리플렉션 사용 여부
- 실행 워크플로우:
- 로깅 디렉토리 생성
- 여러 환경에서 트라이얼 실행
- 각 트라이얼 간 메모리 업데이트
- 결과 및 환경 구성 JSON 로깅
코드를 세부적으로 분석해드리겠습니다. 함수와 모듈별로 상세히 설명드리겠습니다.
1. 모듈 임포트
1 2 3 4 5 6 |
import os import json import argparse from eth_trial import run_trial from generate_reflections import update_memory from typing import Any, List, Dict |
os
: 운영체제 관련 기능 (디렉토리/파일 작업)json
: JSON 데이터 처리argparse
: 커맨드라인 인자 파싱eth_trial
: 이더리움 트라이얼 실행 모듈generate_reflections
: 메모리 업데이트 모듈typing
: 타입 힌트 제공
2. get_parser()
함수
1 2 3 4 5 6 |
def get_parser(): parser = argparse.ArgumentParser() parser.add_argument("--dataset", type=str, default='eth', help="[eth, btc, sol]") parser.add_argument("--model", type=str, default='gpt-3.5-turbo', help="[gpt-3.5-turbo, gpt-4o, gpt-4-turbo]") parser.add_argument("--to_print", type=int, default=1, help="Print debug info") # ... (여러 인자 추가) |
- 실험 설정을 위한 다양한 커맨드라인 인자 정의
- 주요 인자:
dataset
: 사용할 암호화폐 데이터셋model
: 사용할 AI 모델starting_date
,ending_date
: 시뮬레이션 날짜 범위use_memory
: 메모리 사용 여부use_tech
,use_txnstat
,use_news
: 다양한 데이터 소스 사용 설정num_trials
,num_envs
: 트라이얼 및 환경 수
3. main()
함수 주요 로직
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
def main(args) -> None: # 이전 실행 재개 또는 새 실행 설정 if args.is_resume: # 기존 실행 디렉토리에서 환경 설정 로드 logging_dir = args.resume_dir env_configs = load_previous_configs() else: # 새로운 실행 디렉토리 생성 logging_dir = args.run_name env_configs = initialize_environment_configs() # 세계 로그 파일 경로 설정 world_log_path = os.path.join(logging_dir, 'world.log') # 트라이얼 반복 실행 trial_idx = args.start_trial_num while trial_idx < args.num_trials: # 트라이얼 로그 파일 준비 trial_log_path = os.path.join(args.run_name, f'trial_{trial_idx}.log') trial_env_configs_log_path = os.path.join(args.run_name, f'env_results_trial_{trial_idx}.json') # 트라이얼 실행 run_trial(trial_log_path, world_log_path, trial_idx, env_configs, args=args) # 메모리 업데이트 (옵션) if args.use_memory: env_configs = update_memory(trial_log_path, env_configs) # 환경 설정 및 세계 상태 로깅 log_trial_results(trial_env_configs_log_path, env_configs) trial_idx += 1 |
4. 주요 특징
- 실험 재개 지원
is_resume
플래그로 이전 실행 상태 복원 가능- 기존 환경 설정, 로그 파일 로드 가능
- 다중 트라이얼 실행
- 여러 개의 독립적인 트라이얼 반복 실행
- 각 트라이얼마다 별도의 로그 파일 생성
- 메모리 기반 학습
use_memory
옵션으로 트라이얼 간 학습 메커니즘 활성화update_memory()
함수로 이전 트라이얼 경험 반영
- 상세한 로깅 시스템
- 세계 로그 파일: 전체 실행 과정 추적
- 트라이얼 로그 파일: 각 트라이얼 상세 정보
- 환경 설정 JSON: 트라이얼 간 환경 상태 기록
5. 실행 시나리오
python script.py --dataset eth --model gpt-4o --num_trials 5 --use_memory --use_tech 1
- 이더리움 데이터로 5개 트라이얼 실행
- GPT-4o 모델 사용
- 메모리 및 기술적 신호 활성화
이 스크립트는 AI 기반 암호화폐 거래 전략을 체계적이고 반복 가능한 방식으로 실험하고 평가하기 위한 정교한 프레임워크입니다.
이 코드 블록은 Python 스크립트의 메인 진입점(entry point)을 정의합니다. 자세히 설명드리겠습니다:
1 2 3 4 |
if __name__ == '__main__': parser = get_parser() args = parser.parse_args() main(args) |
argparse
는 Python의 표준 라이브러리로, 커맨드라인 인터페이스(CLI)를 쉽게 만들 수 있게 해주는 모듈입니다. 사용자가 스크립트를 실행할 때 다양한 옵션과 인자를 전달할 수 있도록 지원합니다.
1. 기본 구조
1 2 3 4 5 6 7 8 9 10 |
import argparse # ArgumentParser 객체 생성 parser = argparse.ArgumentParser(description='프로그램에 대한 설명') # 인자 추가 parser.add_argument('인자명', 도움말, 타입 등) # 인자 파싱 args = parser.parse_args() |
2. 주요 메서드와 기능
add_argument()
주요 매개변수
1 2 3 4 5 6 |
parser.add_argument( '--dataset', # 인자 이름 type=str, # 데이터 타입 default='eth', # 기본값 help='데이터셋 선택' # 도움말 ) |
인자 유형
- 위치 인자
-
1parser.add_argument('filename') # python script.py input.txt
-
- 옵션 인자
1 |
parser.add_argument('--verbose', action='store_true') # 플래그성 인자 |
- 액션(Action) 타입
store
: 기본값, 값 저장store_true/store_false
: 부울 값 저장count
: 플래그 횟수 카운트
-
- 고급 기능 예시
-
12345678910111213141516171819202122232425262728293031parser = argparse.ArgumentParser(description='암호화폐 트레이딩 시뮬레이션')# 문자열 선택 제한parser.add_argument('--model',type=str,choices=['gpt-3.5-turbo', 'gpt-4', 'gpt-4o'],default='gpt-3.5-turbo',help='사용할 AI 모델 선택')# 숫자 범위 제한parser.add_argument('--num_trials',type=int,default=1,help='실행할 트라이얼 수',choices=range(1, 11) # 1~10 사이)# 부울 플래그parser.add_argument('--use_memory',action='store_true',help='메모리 기반 학습 활성화')# 날짜 타입 인자from datetime import datetimeparser.add_argument('--start_date',type=lambda d: datetime.strptime(d, '%Y-%m-%d'),default='2023-01-01',help='시뮬레이션 시작 날짜 (YYYY-MM-DD)')
-
- 도움말 자동 생성
- # 도움말 출력
python script.py -h 또는 –help
- # 도움말 출력
- 오류 처리
- 잘못된 인자 입력 시 자동으로 사용법과 오류 메시지 출력
- 타입 미스매치, 선택 범위 벗어난 값 등 검증
- 고급 사용법
-
12345678910111213# 상호 배타적 그룹group = parser.add_mutually_exclusive_group()group.add_argument('--verbose', action='store_true')group.add_argument('--quiet', action='store_true')# 사용자 정의 검증def positive_int(value):ivalue = int(value)if ivalue <= 0:raise argparse.ArgumentTypeError(f"{value}는 양수여야 합니다.")return ivalueparser.add_argument('--trials', type=positive_int)
-
-
주요 장점
- 표준 라이브러리에 내장
- 자동 도움말 생성
- 타입 검증
- 기본값 설정
- 플래그 및 옵션 쉽게 정의
- 실전 팁
- 명확하고 간결한 인자명 사용
- 상세한 도움말 제공
- 직관적인 기본값 설정
- 오류 처리를 고려한 설계
argparse
는 CLI 애플리케이션 개발 시 필수적인 모듈로, 사용자 인터페이스의 유연성과 강력한 기능을 제공합니다.
실제 사용 예시를 몇 가지 시나리오로 작성해드리겠습니다.
간단한 계산기 프로그램
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
import argparse def calculate(args): if args.operation == 'add': print(f"덧셈 결과: {args.num1 + args.num2}") elif args.operation == 'subtract': print(f"뺄셈 결과: {args.num1 - args.num2}") elif args.operation == 'multiply': print(f"곱셈 결과: {args.num1 * args.num2}") elif args.operation == 'divide': if args.num2 == 0: print("0으로 나눌 수 없습니다.") else: print(f"나눗셈 결과: {args.num1 / args.num2}") def main(): # ArgumentParser 생성 parser = argparse.ArgumentParser(description='간단한 계산기 프로그램') # 필수 인자 추가 parser.add_argument('num1', type=float, help='첫 번째 숫자') parser.add_argument('num2', type=float, help='두 번째 숫자') # 선택 인자 추가 parser.add_argument( '--operation', type=str, choices=['add', 'subtract', 'multiply', 'divide'], default='add', help='수행할 연산' ) # 추가 옵션 parser.add_argument( '--verbose', action='store_true', help='상세 출력 모드' ) # 인자 파싱 args = parser.parse_args() # 상세 모드 출력 if args.verbose: print(f"연산 모드: {args.operation}") print(f"첫 번째 숫자: {args.num1}") print(f"두 번째 숫자: {args.num2}") # 계산 수행 calculate(args) if __name__ == '__main__': main() |
실행 예시
1 2 3 4 5 6 7 8 9 10 11 |
# 기본 덧셈 python calculator.py 10 5 # 곱셈 연산 python calculator.py 10 5 --operation multiply # 상세 모드 python calculator.py 10 5 --verbose # 나눗셈 연산 python calculator.py 10 5 --operation divide |