SetStopLoss 손절 정확도 관련 문의 (PriceScale 사용법 포함)
안녕하세요.
해외선물 시스템매매에서 SetStopLoss를 사용한 손절이 설정값보다 큰 손실로 청산되는 문제로 문의드립니다.
현재 상황:
SetStopLoss(1.5, PointStop)로 1.5포인트 손절 설정했는데
실제 청산은 1.8~2.5포인트에서 발생, 이유를 알고보니 1.5 손절 도달 했지만 종가 끝나고 다음 캔들에서 바로 청산함
OnClose 방식으로 진입 후 손절 설정
현재 사용 중인 코드:
Buy("BreakUp", OnClose, Def, 1);
SetStopLoss(StopTicks, PointStop); // StopTicks = 1.5
Sell("BreakDown", OnClose, Def, 1);
SetStopLoss(StopTicks, PointStop);
문제점:
1.5포인트 손절 설정했으나 실제로는 1.5 넘었다는 캔들 종가 확인 후 1.8~2.5포인트에서 청산(캔들 높낮이 상황에 다름)
종가 진입 후 다음 봉에서 손절 체결되면서 변동성 큰 구간에서 손절가를 크게 뚫고 청산하니 손해가 막심합니다.
추가 발견사항:
다른 질문 답변에서 예스스탁이 제공한 코드를 보니:
SetStopLoss(PriceScale*손절틱수,PointStop);
SetStopProfittarget(PriceScale*익절틱수,PointStop);
이렇게 PriceScale을 곱해서 사용하고 있더라고요.
질문사항:
OnClose 진입 시 SetStopLoss의 정확한 실행 타이밍은 언제인가요?
SetStopLoss 설정 시 PriceScale을 곱해야 하는지, 아니면 포인트값을 직접 입력해야 하는지 궁금합니다.
제가 현재 SetStopLoss(1.5, PointStop)로 설정한 것이 맞는 방법인가요? 아니면 SetStopLoss(1.5*PriceScale, PointStop)로 해야 하나요?
설정한 손절가에 최대한 가깝게 청산하는 권장 방법이 있나요?
실시간 손절 방식과 SetStopLoss 방식 중 어떤 것이 더 정확한가요?
진입과 동시에 손절 주문을 OCO 방식으로 설정하는 방법이 있나요?
실시간 손절 대안 코드:
if MarketPosition == 1 and L <= AvgEntryPrice - StopTicks then
ExitLong("Stop_L", AtMarket);
if MarketPosition == -1 and H >= AvgEntryPrice + StopTicks then
ExitShort("Stop_S", AtMarket);
해외선물에서 정확한 손절을 위한 최적의 방법과 PriceScale 사용법에 대한 조언 부탁드립니다.
추가할 질문:
OCO 주문 관련:
진입과 동시에 손절/익절 주문을 미리 걸어두는 OCO(One Cancels Other) 주문이나 브래킷 주문이 지원되나요?
예) 3700.0 매도 진입 시 동시에 3701.5 손절 매수주문, 3697.0 익절 매수주문을 대기시키는 방법
현재 SetStopLoss 대신 자동으로 지정가 손절 주문을 거는 방법이 있나요?
Buy("entry") 후 즉시 Sell("stop", AtStop, EntryPrice + StopTicks) 이런 방식으로요
실무적 질문:
1분봉 기준 매매에서 틱 단위 실시간 손절 체크가 시스템 성능에 부담을 주나요?
SetStopLoss의 정확한 작동 로그나 디버깅 정보를 확인할 수 있는 방법이 있나요?
감사합니다.
답변 1
예스스탁
예스스탁 답변
2025-09-19 10:33:28.0
안녕하세요
예스스탁입니다.
1
시스템 트레이딩 설정창의 강제청산탭에서
청산시점 설정을 확인하시기 바랍니다.
청산시점은 조건만족즉시와 봉완성시 2가지가 있는데
수식안에서 강제청산함수를 사용하거나 설정창에서 지정하면 해당 설정이 적용됩니다.
조건만족 즉시로 설정하시면 손절값 도달 즉시 청산이 발생합니다.
봉완성시로 설정하면 봉 종가로 판단합니다.
2
SetStopLoss(PriceScale*손절틱수,PointStop);
SetStopProfittarget(PriceScale*익절틱수,PointStop)
PriceScale은 각 종목의 1틱입니다.
강제청산을 몇틱으로 지정할 경우 위와 같이 PriceScale에 틱수를 곱해 포인트로 환산해 지정합니다.
예를 들어 국내지수선물은 1틱이 0.05인데
30틱으로 손절/익절을 지정하면
SetStopLoss(PriceScale*30,PointStop);
SetStopProfittarget(PriceScale*30,PointStop)
1.5포인트로 지정하면 아래와 같이 지정하시면 됩니다.
SetStopLoss(1.5,PointStop);
SetStopProfittarget(1.5,PointStop)
해당 부분은 사용자분 기호에 따라 설정하시면 됩니다.
3
랭귀지는 OCO주문이나 브래킷 주문 제공하지 않습니다.
진입신호가 발생하면 강제청산에 도달하는 현재가가 발생하면 그때 청산신호가 발생합니다.
미리 특정가격에 주문을 내는 기능은 없습니다.
Sell("stop", AtStop, EntryPrice + StopTicks)
와 같은 내용도 미리 특정가격에 주문을 내는 것이 아닙니다.
진입가+StopTicks에 도달하는 현재가가 발생하면 신호가 발생하고 주문이 집행됩니다.
4
실시간 손절체크가 더 성능에 부담을 주거나 하지는 않습니다.
즐거운 하루되세요
> 스오어스 님이 쓴 글입니다.
> 제목 : 안녕하세요 질문 있습니다.
> SetStopLoss 손절 정확도 관련 문의 (PriceScale 사용법 포함)
안녕하세요.
해외선물 시스템매매에서 SetStopLoss를 사용한 손절이 설정값보다 큰 손실로 청산되는 문제로 문의드립니다.
현재 상황:
SetStopLoss(1.5, PointStop)로 1.5포인트 손절 설정했는데
실제 청산은 1.8~2.5포인트에서 발생, 이유를 알고보니 1.5 손절 도달 했지만 종가 끝나고 다음 캔들에서 바로 청산함
OnClose 방식으로 진입 후 손절 설정
현재 사용 중인 코드:
Buy("BreakUp", OnClose, Def, 1);
SetStopLoss(StopTicks, PointStop); // StopTicks = 1.5
Sell("BreakDown", OnClose, Def, 1);
SetStopLoss(StopTicks, PointStop);
문제점:
1.5포인트 손절 설정했으나 실제로는 1.5 넘었다는 캔들 종가 확인 후 1.8~2.5포인트에서 청산(캔들 높낮이 상황에 다름)
종가 진입 후 다음 봉에서 손절 체결되면서 변동성 큰 구간에서 손절가를 크게 뚫고 청산하니 손해가 막심합니다.
추가 발견사항:
다른 질문 답변에서 예스스탁이 제공한 코드를 보니:
SetStopLoss(PriceScale*손절틱수,PointStop);
SetStopProfittarget(PriceScale*익절틱수,PointStop);
이렇게 PriceScale을 곱해서 사용하고 있더라고요.
질문사항:
OnClose 진입 시 SetStopLoss의 정확한 실행 타이밍은 언제인가요?
SetStopLoss 설정 시 PriceScale을 곱해야 하는지, 아니면 포인트값을 직접 입력해야 하는지 궁금합니다.
제가 현재 SetStopLoss(1.5, PointStop)로 설정한 것이 맞는 방법인가요? 아니면 SetStopLoss(1.5*PriceScale, PointStop)로 해야 하나요?
설정한 손절가에 최대한 가깝게 청산하는 권장 방법이 있나요?
실시간 손절 방식과 SetStopLoss 방식 중 어떤 것이 더 정확한가요?
진입과 동시에 손절 주문을 OCO 방식으로 설정하는 방법이 있나요?
실시간 손절 대안 코드:
if MarketPosition == 1 and L <= AvgEntryPrice - StopTicks then
ExitLong("Stop_L", AtMarket);
if MarketPosition == -1 and H >= AvgEntryPrice + StopTicks then
ExitShort("Stop_S", AtMarket);
해외선물에서 정확한 손절을 위한 최적의 방법과 PriceScale 사용법에 대한 조언 부탁드립니다.
추가할 질문:
OCO 주문 관련:
진입과 동시에 손절/익절 주문을 미리 걸어두는 OCO(One Cancels Other) 주문이나 브래킷 주문이 지원되나요?
예) 3700.0 매도 진입 시 동시에 3701.5 손절 매수주문, 3697.0 익절 매수주문을 대기시키는 방법
현재 SetStopLoss 대신 자동으로 지정가 손절 주문을 거는 방법이 있나요?
Buy("entry") 후 즉시 Sell("stop", AtStop, EntryPrice + StopTicks) 이런 방식으로요
실무적 질문:
1분봉 기준 매매에서 틱 단위 실시간 손절 체크가 시스템 성능에 부담을 주나요?
SetStopLoss의 정확한 작동 로그나 디버깅 정보를 확인할 수 있는 방법이 있나요?
감사합니다.