커뮤니티
질문 있습니다.
질문 요점: 청산 후 NetProfit 체크 방식으로도 진입 차단 문제 발생
안녕하세요.
이전 질문에 대한 답변 감사합니다. (글번호 227784)
"매 틱마다 체크하지 말고 청산 후에만 체크하라"는
조언을 참고하여 코드를 수정했는데, 여전히 같은 문제가 발생합니다.ㅜㅜ
===========================================
구현하려는 기능
===========================================
주간 손실 제한 시스템:
- 지난주 수익: 금요일 종가 까지 +200틱 벌었고
- 이번주 월요일 시작하면서 최대 손실 허용: -200틱 입력 합니다.
- 이번주 월~금 중에 누적 손실이 -200 도달 시: 강제 청산 + 이번 주 매매 종료
예시:
월요일 NetProfit: 200 → 210 → 160 → 90
수요일 NetProfit: 90 → 0
→ WeeklyProfit = 0 - 200 = -200
→ 강제 청산 + 이번 주 매매 종료
===========================================
문제 상황
===========================================
UseWeeklyStop=0: 정상 작동 되지만...
UseWeeklyStop=1: 차트 신호 전부 사라집니다. ㅠㅠ 차트에 아무것도 없습니다.
===========================================
핵심 코드
===========================================
// === Input ===
Input : UseWeeklyStop(0); // 0=OFF, 1=ON
Input : WeekStartProfit(0); // 이번 주 시작 수익 (틱)
Input : MaxWeekLoss(-200); // 최대 허용 손실 (틱, 음수)
// === 변수 ===
Var : WeeklyProfit(0); // 이번 주 누적 수익
Var : WeekStopTriggered(0); // 주간 손실 도달 플래그
// === 진입 조건 (기존 조건 + WeekStopTriggered 체크) ===
if MarketPosition == 0 and
InWaitPeriod == 0 and
(기타 진입 조건들...) and
WeekStopTriggered == 0 Then {
Buy("L", OnClose, Def, 1);
// 진입 후 초기화...
}
// === 청산 후 주간 손실 체크 (손절 예시) ===
if MarketPosition == 1 Then {
// 손절 조건
if C <= StopPrice Then {
ExitLong("U-");
LastExitDate = sDate;
LastExitTime = CurrentTime;
WaitMinutes = 1200;
InWaitPeriod = 1;
// 청산 직후 주간 손실 체크
if UseWeeklyStop == 1 and WeekStopTriggered == 0 Then {
WeeklyProfit = NetProfit - WeekStartProfit;
if WeeklyProfit <= MaxWeekLoss Then {
WeekStopTriggered = 1;
InWaitPeriod = 1;
WaitMinutes = 99999; // 긴 대기시간으로 차단
}
}
}
// 익절 조건
if H >= UpperBand Then {
ExitLong("U+");
LastExitDate = sDate;
LastExitTime = CurrentTime;
WaitMinutes = 300;
InWaitPeriod = 1;
// 청산 직후 주간 손실 체크
if UseWeeklyStop == 1 and WeekStopTriggered == 0 Then {
WeeklyProfit = NetProfit - WeekStartProfit;
if WeeklyProfit <= MaxWeekLoss Then {
WeekStopTriggered = 1;
InWaitPeriod = 1;
WaitMinutes = 99999;
}
}
}
}
// 매도 포지션도 동일한 방식으로 구현
===========================================
디버깅 시도
===========================================
1. UseWeeklyStop=0으로 설정 했는데 정상 작동이 됩니다.
2. UseWeeklyStop=1, WeekStartProfit=0, MaxWeekLoss=-200 로 했더니 백테스트 시작부터 차트에 진입 신호 없고 아무것도 없습니다.
3. 백테스트 초기 상태는 아래와 같습니다.
- NetProfit = 0
- WeekStartProfit = 0
- MaxWeekLoss = -200
- WeekStopTriggered = 0
- WeeklyProfit = 0 - 0 = 0
- 0 <= -200? → False (정상)
이론상 문제없어 보이는데 실제로는 진입 안됨
4. WeekStopTriggered 관련 코드 전부 주석 처리 하니 정상 작동 됨
→ WeekStopTriggered 변수 자체에 문제일가요?
===========================================
질문
===========================================
1. 청산 후에만 NetProfit를 체크하는데도
백테스트 초기에 진입이 차단되는 이유가 뭘까요?
2. WeekStopTriggered 초기값이 0인데
진입 조건에서 WeekStopTriggered == 0 체크만으로
진입이 안 되는 이유가 있을까요?
3. 변수 초기화 시점이나 스코프 문제일까요?
- Var : WeekStopTriggered(0); 선언만으로 충분한가요?
- 추가 초기화가 필요한가요?
4. 이런 방식 대신 다른 방법을 사용해야 하나요?
- NetProfit 대신 다른 함수?
- 플래그 변수 대신 다른 방식?
===========================================
도움 요청
===========================================
주간 손실 제한 기능을 올바르게 구현하는 방법을
알려주시면 감사하겠습니다!
- 청산 후 NetProfit 체크 방식이 맞나요?
- 변수 초기화나 사용 방법에 문제가 있을까요?
- 다른 접근 방법이 필요할까요?
ㅜㅜ
감사합니다!
답변 1
예스스탁 예스스탁 답변
2025-11-11 15:26:52