답변완료
문의드립니다
오류가 많습니다 수정부탁드립니다Inputs: Left(2), Right(2), MinBarsGap(3), // 이전 피벗과 최소 바수 간격 MinTickGap(8), // 이전 피벗과 최소 틱 간격 (ES tick=0.25 → 8=2pt) WarmupBars(20), UseVWAPFilter(1), // 1/0 UseMAFilter(1), MALen(60), UseATR(1), ATRlen(14), SLmult(1.2), TPmult(2.0);Vars: hi1P(0), hi1Bar(0), hi2P(0), hi2Bar(0), lo1P(0), lo1Bar(0), lo2P(0), lo2Bar(0), T(0), isPH(0), isPL(0), tick(0.25), SumPV(0), SumV(0), VW(0), ma(0), atr(0), entryP(0);If CurrentBar == 1 Then Begin SumPV = Close * Volume; SumV = Volume;EndElse Begin SumPV = SumPV[1] + Close * Volume; SumV = SumV[1] + Volume;End;If SumV > 0 Then VW = SumPV / SumV;Else VW = Close;ma = Average(Close, MALen);atr = Average(TrueRange, ATRlen);isPH = 0; isPL = 0;If CurrentBar > Left + Right Then Begin If Highest(High, Left + Right + 1)[Right] = High[Right] Then isPH = 1; If Lowest (Low , Left + Right + 1)[Right] = Low [Right] Then isPL = 1;End;If isPH = 1 Then Begin If hi1Bar > 0 Then Begin If (CurrentBar - Right - hi1Bar) < MinBarsGap Then isPH = 0; If AbsValue((High[Right] - hi1P) / tick) < MinTickGap Then isPH = 0; End;End;If isPL = 1 Then Begin If lo1Bar > 0 Then Begin If (CurrentBar - Right - lo1Bar) < MinBarsGap Then isPL = 0; If AbsValue((lo1P - Low[Right]) / tick) < MinTickGap Then isPL = 0; End;End;If isPH = 1 Then Begin hi2P = hi1P; hi2Bar = hi1Bar; hi1P = High[Right]; hi1Bar = CurrentBar - Right; T = 1;End;If isPL = 1 Then Begin lo2P = lo1P; lo2Bar = lo1Bar; lo1P = Low[Right]; lo1Bar = CurrentBar - Right; T = -1;End;If CurrentBar < WarmupBars Then T = T[1];If (T = 1) and (T[1] <> 1) Then Begin If ( (UseVWAPFilter = 0) or (Close >= VW) ) and ( (UseMAFilter = 0) or (Close >= ma) ) Then Begin Buy next bar at market; If UseATR = 1 Then Begin entryP = EntryPrice; Sell next bar at entryP + TPmult * atr limit; Sell next bar at entryP - SLmult * atr stop; End; End;End;If (T = -1) and (T[1] <> -1) Then Begin If ( (UseVWAPFilter = 0) or (Close <= VW) ) and ( (UseMAFilter = 0) or (Close <= ma) ) Then Begin Sell Short next bar at market; If UseATR = 1 Then Begin entryP = EntryPrice; Buy to Cover next bar at entryP - TPmult * atr limit; Buy to Cover next bar at entryP + SLmult * atr stop; End; End;End;
2025-11-11
166
글번호 227870
시스템
답변완료
질문 있습니다.
질문 요점: 청산 후 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=ONInput : 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 체크 방식이 맞나요?- 변수 초기화나 사용 방법에 문제가 있을까요?- 다른 접근 방법이 필요할까요?ㅜㅜ감사합니다!
2025-11-10
295
글번호 227863
시스템