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  | 
					
