커뮤니티

질문 있습니다.

프로필 이미지
스오어스
2025-11-08 22:10:56
59
글번호 227784
답변완료

질문 요점: 일일 손실 제한 로직 추가 후 시스템 매매 결과가 사라집니다
안녕하세요. 기존에 잘 작동하던 시스템 매매에 일일 손실 제한 기능을 추가했는데, 해당 기능을 켜면(UseDailyStop=1) 매매 신호와 평가표가 모두 사라지는 문제가 발생합니다.
=========================================== 증상 =========================================== 1. UseDailyStop(0) 설정 시: 정상 작동 2. UseDailyStop(1) 설정 시: - 차트는 보임 - 매매 신호 없음 - 평가표 결과 없음 - 오류 메시지 없음
=========================================== 구현하려는 기능 =========================================== 매일 아침 로그인 시 Input으로 수익/손실을 입력하여 일일 손실 한도를 관리하는 시스템입니다. 예시: - 첫째 주 결과: +310만원 - 둘째 주 월요일 Input: ├─ TodayStartProfit(310) └─ MaxDailyLoss(-120) → 오늘 -120만원 추가 손실 시 강제 청산 + 그날 진입 중단 or - 첫째 주 결과: -60만원 - 둘째 주 월요일 Input: ├─ TodayStartProfit(-60) └─ MaxDailyLoss(-100) → 오늘 -100만원 추가 손실 시 강제 청산 + 그날 진입 중단
이렇게 구현을 하고 싶은데요.
=========================================== 추가한 코드 =========================================== // === Input === Input : UseDailyStop(0); // 0=OFF, 1=ON Input : TodayStartProfit(0); // 오늘 시작 수익 Input : MaxDailyLoss(-100); // 최대 허용 손실 // === 변수 === Var : TodayProfit(0); Var : DailyTradingAllowed(1); // === 손실 제한 체크 === if UseDailyStop == 0 or (TodayStartProfit == 0 and MaxDailyLoss == 0) Then DailyTradingAllowed = 1; Else { TodayProfit = NetProfit - TodayStartProfit; if TodayProfit <= MaxDailyLoss Then DailyTradingAllowed = 0; Else DailyTradingAllowed = 1; } // === 강제 청산 === if DailyTradingAllowed == 0 and MarketPosition != 0 Then { if MarketPosition == 1 Then { ExitLong("DayL-"); LastExitDate = sDate; LastExitTime = CurrentTime; WaitMinutes = 300; InWaitPeriod = 1; } if MarketPosition == -1 Then { ExitShort("DayS-"); LastExitDate = sDate; LastExitTime = CurrentTime; WaitMinutes = 300; InWaitPeriod = 1; } } // === 진입 조건에 추가 === if MarketPosition == 0 and ... and DailyTradingAllowed == 1 Then { Buy("L", ...); }
=========================================== 시도한 해결 방법 =========================================== 1. 청산 로직을 조건문 밖으로 분리 → 실패 2. 변수명 중복 확인 → 없음 3. ExitLong/Short 이름 변경 (DayL-, DayS-) → 실패 4. Else 블록 추가하여 DailyTradingAllowed 재설정 → 실패 =========================================== 질문 =========================================== 1. NetProfit를 이런 식으로 사용하는 게 문제가 될까요? 2. Exit 명령 위치나 조건에 제약사항이 있을까요? 3. 이런 일일 손실 제한 기능을 구현할 다른 방법이 있을까요? 4. 혹시 변수 초기화나 스코프 문제일 가능성이 있을까요?
도움 부탁드립니다!
감사합니다! ㅠㅠ

시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-11-10 10:53:52

안녕하세요 예스스탁입니다. 문의하신 내용은 UseDailyStop을 1로 지정하면 진입이 발생할수 없게 막는 경우입니다. 진입이 발생하지 않으므로 리포트도 적히지 않고 해당 부분은 올리신 수식 내용만으로 판단이 되지 않습니다. 아래와 같이 진입신호 위에 MessageLog에 진입수식에 사용하는 값을 편집기 디버깅창에 출력해서 값을 확인하셔서 직입식에서 사용하는 값이 원하는 값인지 확인하시고 원하지 않는 값이면 해당 변수에 값저장을 추적해서 수정해 보셔야 합니다. MessageLog("%.f",DailyTradingAllowed); if MarketPosition == 0 and /*... and */DailyTradingAllowed == 1 Then { Buy("L"); } 즐거운 하루되세요