커뮤니티
질문 있습니다.
질문의 요점: 1분봉 차트에서 시간대별(진입 기준) 순수익 계산이 정확하지 않습니다
안녕하세요
저번주에 답변 주신 글번호 227224 NetProfit 차이 방식으로 시간대별 손익을 계산하고 있는데, 1분봉 차트에서 결과가 정확하지 않아 다시 문의드립니다.
=== 현재 사용 중인 코드 ===
Input : StartHour(8), EndHour(18);
var : NP(0), NP1(0), dayPL(0);
NP = NetProfit;
// 8시 직전까지의 총손익 저장
if CurrentHour == StartHour and CurrentHour != CurrentHour[1] Then {
NP1 = NP[1];
}
// 8시~18시 사이 당일손익 계산
if CurrentHour >= StartHour and CurrentHour <= EndHour Then {
dayPL = (NP - NP1) / PriceScale;
}
Else {
dayPL = dayPL[1]; // 거래 시간 외 이전 값 유지
}
// 19시 출력
if CurrentHour == (EndHour + 1) and CurrentHour != CurrentHour[1] Then {
Text_New(sDate, sTime, H + 2.0, NumToStr(dayPL, 0) + "T");
}
```
>>문제 상황 1번
계산 오류 있습니다.
차트는 1분봉 입니다.
실제로 8-18시 진입 거래를 하면
- 6회 진입: -31, +58, -37, +245, -43, +22 = +214틱로 계산 됩니다.
(차트에 표시된 진입/청산 시 수익/손실 표시를 수동 계산했음)
그러나 시스템 표시 결과를 보면 혼란스럽니다.
- 19시 표시는 -299틱 으로 나왔고 순수익 +214 표시가 잘 되지 않습니다.
NetProfit 흐름은 아래와 같습니다.
- 8시 이전: -201틱
- 19시 전체: -500틱
- 계산: -500 - (-201) = -299틱로 이렇게 표시 된 것 같습니다.
문제는 실제 8-18시 진입 거래는 +214틱인데 -299틱으로 표시되어서 그렇습니다..
----------------------------------------------------------------------------
>>문제 상황 2번
18시 이전 진입 → 19시 이후 청산 케이스인데
더 복잡한 문제가 있습니다:
예를 들면
```
17:55 매수 진입 (8-18시 거래 시간 내)
18:00 거래 시간 종료 그러나 청산 조건 때문에 18:00 넘어 포지션 홀딩한 경우임
19:15 청산 +50틱 (19시 이후)
```
질문입니다.
- 진입은 8-18시 내, 청산은 19시 이후인 경우
- 이 +50틱을 8-18시 손익에 포함해야 할까요?
제 의도는 아래와 같습니다.
- "8-18시 사이에 진입한 모든 거래의 최종 손익"을 계산하고 싶습니다
- 청산 시간은 무관하게, 진입 시간 기준 으로 추적하고
- 해당 거래들이 모두 청산 완료된 후 에 최종 손익 표시하고 싶습니다.
=== 원하는 동작 ===
1. 8-18시 사이 진입한 거래만 추적
2. 해당 거래들이 모두 청산될 때까지 대기
3. 마지막 거래 청산 완료 시점에 → "8-18시(진입기준) 최종: +XXX틱" 표시
=== 핵심 질문 ===
1. 1분봉에서 "18시 마지막 봉" 구분 방법
```
18:00, 18:01, 18:02 ... 18:59 봉들이 모두 CurrentHour = 18인데,
18시 구간의 마지막 봉(18:59)을 어떻게 정확히 잡나요?
```
2. 18시 이후 거래 제외 방법
- 18시 이후(18-24시)에도 거래가 계속되는데, 18시까지의 NP만 저장하려면?
- `if CurrentHour == 19 and CurrentHour[1] == 18` 조건으로 18:59의 NP[1]을 읽어야 하나요?
3. 진입 시간 기준 손익 계산 방법
```
예시 코드:
var : InTime_Entry(0); // 시간대 내 진입 플래그
var : InTime_Count(0); // 시간대 내 진입한 미결제 건수
// 진입 시 기록
if Buy신호 and CurrentHour >= 8 and CurrentHour <= 18 Then {
InTime_Entry = 1;
InTime_Count = InTime_Count + 1;
}
// 청산 시 카운트 감소
if 청산 and InTime_Entry == 1 Then {
InTime_Count = InTime_Count - 1;
}
// 모든 포지션 청산 완료 후 표시
if CurrentHour > 18 and InTime_Count == 0 and 미표시 Then {
Text_New(..., "8-18시 최종: +XXX틱");
}
이런 방식이 가능한가요?
4. 1분봉 차트에서 시간대별 손익 계산 시 주의사항이 있을까요?
요약 하자면 아래와 같습니다.
문제 1: 기본 NetProfit 차이 계산이 부정확 (-299 vs +214)
문제 2: 18시 전 진입 → 19시 후 청산 케이스 처리 방법
원하는 결과: 진입 시간 기준으로 모든 거래 청산 후 최종 손익 표시 희망
구체적인 코드 예시와 함께 답변 부탁드립니다. ㅠㅠ
감사합니다!!!!
답변 1
예스스탁 예스스탁 답변
2025-10-27 16:29:18