오랜만에 등장했습니다!
요즘 시장이 안좋은지 매일 손해만 보는 저의 매크로를 위해 'n회 연속 손실이 발생한 경우 거래를 일시 중단하는 방어 코드'를 만들어보려 합니다.
1. portfolio 업데이트
기존 portfolio에 consecutive_losses라는 항목을 추가합니다.
# --- 가상 자산 초기화 함수 ---
def initialize_vportfolio():
print("새로운 포트폴리오를 초기화합니다...")
return {
"cash": 1000000.0, # 초기 가상 현금 100만원
"coins_owned": [], # 보유 코인 목록 (비어있음)
"strategy_params": {
"profit_take_percentage": 0.07, # 수익실현 +7%
"stop_loss_percentage": 0.035, # 손절매 -3.5%
},
"hodl_list": [], # 예외 항목
"consecutive_losses": 0, # 연속 손실 제한
}
2. 카운트 증감
main_trader.py에서 매도 후 손익에 따라 초기화 또는 카운트 증가를 진행합니다.
# --- 3. 매도 계획이 세워졌다면, 최종적으로 딱 한 번만 실행한다 ---
if should_sell:
profit = (current_price - avg_buy_price) * quantity_to_sell
# --- 👇 연속 손실 횟수 업데이트 로직 추가! 👇 ---
if profit >= 0: # 수익이거나 본전일 때
# 수익이 나면 연속 손실 횟수를 0으로 리셋
my_vportfolio["consecutive_losses"] = 0
print(f"-> 👍 수익 발생. 연속 손실 횟수가 0으로 초기화됩니다.")
else: # 손실일 때
# 손실이 나면 연속 손실 횟수를 1 증가
my_vportfolio["consecutive_losses"] += 1
print(f"-> 👎 손실 발생. 연속 손실 횟수 +1 (현재: {my_vportfolio['consecutive_losses']}회)")
3. 거래 제한
위에서 설정한 consecutive_losses값에 따라 거래를 진행할지 멈출지 컨트롤 합니다.
1). 변수 설정
consecutive_loss_limit = 5 # 연속 손실 한도
cooldown_hours = 6 # 거래 중지 시간 (hour)
2). 쿨다운 설정
위 손실일 때 카운트 증가시켜주는 부분에 아래와 같이 쿨다운을 추가합니다.
my_vportfolio["consecutive_losses"] += 1
print(f"-> 👎 손실 발생. 연속 손실 횟수 +1 (현재: {my_vportfolio['consecutive_losses']}회)")
# --- 연속 손실 한도 도달 시 쿨다운 설정! ---
if my_vportfolio["consecutive_losses"] >= consecutive_loss_limit:
cooldown_end_time = time.time() + cooldown_hours * 3600 # hour
my_vportfolio["cooldown_until"] = cooldown_end_time
print(f"🔥🔥🔥 연속 손실 한도({consecutive_loss_limit}회) 도달! {cooldown_hours}시간 동안 거래를 중지합니다.")
print(f"-> 거래 재개 예정 시각: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(cooldown_end_time))}")
3) 거래 제한
분석 대상 선정 전에 쿨다운 상태를 확인하고 건너띄는 내용을 추가합니다.
# --- 쿨다운(거래 중지) 상태인지 먼저 확인! ---
cooldown_until = my_vportfolio.get("cooldown_until", 0)
if time.time() < cooldown_until:
resume_time_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(cooldown_until))
print(f"\n[{time.strftime('%Y-%m-%d %H:%M:%S')}] ❄️ 거래 중지(쿨다운) 상태입니다. ({resume_time_str} 까지)")
continue
elif cooldown_until > 0:
# 쿨다운 시간이 지났다면, 상태를 초기화
print(f"\n[{time.strftime('%Y-%m-%d %H:%M:%S')}] ✅ 쿨다운 기간이 종료되었습니다. 거래를 재개합니다.")
my_vportfolio["consecutive_losses"] = 0
my_vportfolio["cooldown_until"] = 0
virtual_portfolio_manager.save_vportfolio(my_vportfolio) # 상태 초기화 후 저장
# 1. 분석 대상 선정
끝!
'프로젝트 > 코인 투자 매크로' 카테고리의 다른 글
| 2025-06-25 [10] [v1.7] 현실 자산 거래 (3) | 2025.06.26 |
|---|---|
| 2025-06-09 [9] [v1.2] 예외 종목(HODL LIST) 선택 및 수익실현/손절매 (1) | 2025.06.11 |
| 2025-06-09 [9] 종목 선택 (0) | 2025.06.10 |
| 2025-06-08 [8] [v1.0.0 완료] 캔들스틱, 단순 이동 평균(SMA), 골든/데드 크로스 (3) | 2025.06.08 |
| 2025-06-08 [7] 가상 매수/매도 함수 구현 (1) | 2025.06.08 |