커뮤니티

안녕하세요 질문 있습니다.

프로필 이미지
스오어스
2025-09-16 07:05:48.0
56
글번호 194035
답변완료
질문) OnClose 손절 시 슬리피지 문제 및 정확한 손절 방법 문의 안녕하세요 해외선물 시스템 매매에서 손절 로직 관련 문의드립니다. 현재 OnClose 방식으로 손절을 구현했는데, 설정한 손절가보다 훨씬 큰 손실로 청산되는 문제가 발생하고 있습니다. ㅠ 현재 코드: easylanguageInput : StopTicks(1.5); // 1.5포인트 손절 설정 if MarketPosition == 1 Then { if C <= AvgEntryPrice - StopTicks then { ExitLong("Stop_L"); } } 문제점: 1.5포인트 손절 설정했으나 실제로는 2.0~3.0포인트에서 청산 변동성 큰 구간에서 슬리피지가 심함 갭 발생 시 손실이 예상보다 커짐 질문사항: SetStopLoss 함수를 사용하면 정확한 손절이 가능한지요? easylanguage SetStopLoss(StopTicks*PriceScale, PointStop); 진입과 동시에 손절 주문을 설정하는 방법이 있나요? 바로 손절 해줘야 하는데 종가 확인 후 손절하다 보니 1.5 포인트 보다 훨씬 초과 되면서 손절을 하더라고요. ㅠ OnClose 대신 실시간으로 손절가 터치 시 즉시 청산하는 방법은 없나요? easylanguage if MarketPosition == 1 and L <= AvgEntryPrice - StopTicks then ExitLong("Stop_L", AtMarket); 해외선물에서 정확한 손절을 위한 권장 방법이 있다면 알려주심 감사하겠습니다. 슬리피지를 최소화하면서 설정한 손절가에 최대한 가깝게 청산할 수 있는 방법 부탁드립니다. ------------------------------ 질문) 제목: 60분 주기별 강제청산 및 시간 만료 청산 방법 문의 해외선물 시스템 매매에서 60분 주기 관리 및 강제청산 로직 관련 문의드립니다. 시스템 구조: 매시 정각에 60분 주기 시작 (예: 8:00, 9:00, 10:00...) 첫 5분간 고가/저가 수집하여 상하단선 설정 5분 후부터 상하단선 돌파 시 진입 해당 60분 주기 종료 시 강제청산 필요 현재 시도한 코드: easylanguagevar : hour60StartTime(0), minutesFromStart(0); if TimeToMinutes(stime) % 60 == 0 Then { hour60StartTime = TimeToMinutes(stime); // 레인지 초기화 } minutesFromStart = TimeToMinutes(stime) - hour60StartTime; // 60분 만료 강제청산 시도 if MarketPosition != 0 and minutesFromStart >= 59 Then { if MarketPosition == 1 then ExitLong("Time_L"); else ExitShort("Time_S"); } 문제점: 60분 주기 종료 시점에 정확한 강제청산이 안됨 다음 주기로 포지션이 넘어가는 경우 발생 시간 계산이 정확하지 않음 질문사항: 매시 정각 기준으로 60분 후 정확한 강제청산 방법이 있나요? TimeToMinutes 함수를 사용한 시간 계산이 올바른 방법인가요? 60분 주기 관리를 위한 더 정확한 시간 체크 로직은 뭐죠? 해외선물에서 특정 시간 경과 후 강제청산하는 권장 방법이 있나요? 예를 들어 8:00에 시작한 주기는 8:59에, 9:00에 시작한 주기는 9:59에 반드시 청산되어야 합니다. 올바른 60분 주기 관리 및 강제청산 방법 부탁드립니다. ---------------------------------- 질문) 혼합 청산 방법 궁금합니다. 손절은 SetStopLoss로 즉시 처리하고 익절은 OnClose로 종가 확인 후 처리하는 방식이 가능한지? 진입과 손절 주문의 타이밍: easylanguage Buy("BreakUp", OnClose, Def, 1); SetStopLoss(StopTicks*PriceScale, PointStop); 이렇게 진입 주문과 손절 주문을 동시에 설정할 때 실행 순서는 뭐죠? CurrentBar 변수의 정확성: 해외선물에서 CurrentBar를 이용한 재진입 방지가 안정적인가요? 24시간 거래에서 봉 번호가 정확히 증가하는지요? 시간 함수 관련: TimeToMinutes(stime) % 60 == 0 조건이 해외선물에서 정확히 작동할까요? 서머타임 적용 시에도 문제없는지요? --------------------- 질문) 변수 초기화 및 메모리 관리 문의 easylanguage// 60분 주기 초기화 시 if TimeToMinutes(stime) % 60 == 0 Then { EntryCount = 0; FirstEntryResult = 0; LastExitBar = 0; // 기타 변수들 초기화 } 질문사항: 매시 정각마다 변수를 초기화할 때, 이전 주기의 포지션 정보가 올바르게 유지되는지요? AvgEntryPrice, MarketPosition 같은 내장 변수들은 자동으로 관리되는지요? 변수 초기화와 포지션 청산의 순서가 중요한지요? 장시간 운영 시 메모리 누수나 변수 오류 방지를 위한 권장사항이 있는지요? 답변 잘 부탁합니다. 감사합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-09-16 13:33:25.0

안녕하세요 예스스탁입니다. 1 강제청산함수를 이용하셔야 합니다. StopTick가 내용상 틱수가 아닌 포인트이므로 아래와 같이 지정하시면 됩니다. SetStopLoss(StopTicks, PointStop); 2 input : ntime1(60); var : S1(0),D1(0),TM(0),TF(0); if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; TF = TM%ntime1; if Bdate != Bdate[1] or (Bdate == Bdate[1] and ntime1 > 1 and TF < TF[1]) or (Bdate == Bdate[1] and ntime1 > 1 and TM >= TM[1]+ntime1) or (Bdate == Bdate[1] and ntime1 == 1 and TM > TM[1]) Then { var1 = H; var2 = L; } Else { //5분봉 주기 첫봉이후 마지막봉 전봉까지 if TF < 55 Then { if CrossUp(C,var1) Then Buy(); if CrossDown(C,var1) Then Sell(); } if TF >= 55 Then//5분봉 주기 마지막봉 { ExitLong("sx"); ExitShort("bx"); } } } 3 손절은 강제청산 함수로 지정하고 익절은 if문으로 처리하시면 됩니다. if MarketPosition == 1 and C >= EntryPrice+익절포인트 Then ExitLong(); if MarketPosition == 1 and C <= EntryPrice-익절포인트 Then ExitShort(); SetStopLoss(StopTicks*PriceScale, PointStop); 강제청산은 값을 지정해서 손절이나 익절등을 셋팅하는 것입니다. 매수가 발생하면 지정한 값으로 셋팅이 됩니다. CurrentBar를 이용한 재진입 방지가 어떤 내용인지 알수 없습니다. CurrentBar는 봉갯수입니다. 봉갯수는 오류없지 리턴됩니다. TimeToMinutes(stime)은 0시 이후 경과한 시간입니다. 봉의 시간을 0시 이후의 경과한 분으로 변경해 리턴할 뿐입니다. 60분봉 단위는 TimeToMinutes(stime)%60을 사용하셔도 됩니다. 다만 60분봉이 아니면 영엽일 변경시간 기준으로 경과한 시간을 계산해야 하므로 국내종목과 해외 모두 2번과 같은 수식으로 특정분주기로 나누어 계산합니다. 4 예 문제 없습니다. 즐거운 하루되세요 > 스오어스 님이 쓴 글입니다. > 제목 : 안녕하세요 질문 있습니다. > 질문) OnClose 손절 시 슬리피지 문제 및 정확한 손절 방법 문의 안녕하세요 해외선물 시스템 매매에서 손절 로직 관련 문의드립니다. 현재 OnClose 방식으로 손절을 구현했는데, 설정한 손절가보다 훨씬 큰 손실로 청산되는 문제가 발생하고 있습니다. ㅠ 현재 코드: easylanguageInput : StopTicks(1.5); // 1.5포인트 손절 설정 if MarketPosition == 1 Then { if C <= AvgEntryPrice - StopTicks then { ExitLong("Stop_L"); } } 문제점: 1.5포인트 손절 설정했으나 실제로는 2.0~3.0포인트에서 청산 변동성 큰 구간에서 슬리피지가 심함 갭 발생 시 손실이 예상보다 커짐 질문사항: SetStopLoss 함수를 사용하면 정확한 손절이 가능한지요? easylanguage SetStopLoss(StopTicks*PriceScale, PointStop); 진입과 동시에 손절 주문을 설정하는 방법이 있나요? 바로 손절 해줘야 하는데 종가 확인 후 손절하다 보니 1.5 포인트 보다 훨씬 초과 되면서 손절을 하더라고요. ㅠ OnClose 대신 실시간으로 손절가 터치 시 즉시 청산하는 방법은 없나요? easylanguage if MarketPosition == 1 and L <= AvgEntryPrice - StopTicks then ExitLong("Stop_L", AtMarket); 해외선물에서 정확한 손절을 위한 권장 방법이 있다면 알려주심 감사하겠습니다. 슬리피지를 최소화하면서 설정한 손절가에 최대한 가깝게 청산할 수 있는 방법 부탁드립니다. ------------------------------ 질문) 제목: 60분 주기별 강제청산 및 시간 만료 청산 방법 문의 해외선물 시스템 매매에서 60분 주기 관리 및 강제청산 로직 관련 문의드립니다. 시스템 구조: 매시 정각에 60분 주기 시작 (예: 8:00, 9:00, 10:00...) 첫 5분간 고가/저가 수집하여 상하단선 설정 5분 후부터 상하단선 돌파 시 진입 해당 60분 주기 종료 시 강제청산 필요 현재 시도한 코드: easylanguagevar : hour60StartTime(0), minutesFromStart(0); if TimeToMinutes(stime) % 60 == 0 Then { hour60StartTime = TimeToMinutes(stime); // 레인지 초기화 } minutesFromStart = TimeToMinutes(stime) - hour60StartTime; // 60분 만료 강제청산 시도 if MarketPosition != 0 and minutesFromStart >= 59 Then { if MarketPosition == 1 then ExitLong("Time_L"); else ExitShort("Time_S"); } 문제점: 60분 주기 종료 시점에 정확한 강제청산이 안됨 다음 주기로 포지션이 넘어가는 경우 발생 시간 계산이 정확하지 않음 질문사항: 매시 정각 기준으로 60분 후 정확한 강제청산 방법이 있나요? TimeToMinutes 함수를 사용한 시간 계산이 올바른 방법인가요? 60분 주기 관리를 위한 더 정확한 시간 체크 로직은 뭐죠? 해외선물에서 특정 시간 경과 후 강제청산하는 권장 방법이 있나요? 예를 들어 8:00에 시작한 주기는 8:59에, 9:00에 시작한 주기는 9:59에 반드시 청산되어야 합니다. 올바른 60분 주기 관리 및 강제청산 방법 부탁드립니다. ---------------------------------- 질문) 혼합 청산 방법 궁금합니다. 손절은 SetStopLoss로 즉시 처리하고 익절은 OnClose로 종가 확인 후 처리하는 방식이 가능한지? 진입과 손절 주문의 타이밍: easylanguage Buy("BreakUp", OnClose, Def, 1); SetStopLoss(StopTicks*PriceScale, PointStop); 이렇게 진입 주문과 손절 주문을 동시에 설정할 때 실행 순서는 뭐죠? CurrentBar 변수의 정확성: 해외선물에서 CurrentBar를 이용한 재진입 방지가 안정적인가요? 24시간 거래에서 봉 번호가 정확히 증가하는지요? 시간 함수 관련: TimeToMinutes(stime) % 60 == 0 조건이 해외선물에서 정확히 작동할까요? 서머타임 적용 시에도 문제없는지요? --------------------- 질문) 변수 초기화 및 메모리 관리 문의 easylanguage// 60분 주기 초기화 시 if TimeToMinutes(stime) % 60 == 0 Then { EntryCount = 0; FirstEntryResult = 0; LastExitBar = 0; // 기타 변수들 초기화 } 질문사항: 매시 정각마다 변수를 초기화할 때, 이전 주기의 포지션 정보가 올바르게 유지되는지요? AvgEntryPrice, MarketPosition 같은 내장 변수들은 자동으로 관리되는지요? 변수 초기화와 포지션 청산의 순서가 중요한지요? 장시간 운영 시 메모리 누수나 변수 오류 방지를 위한 권장사항이 있는지요? 답변 잘 부탁합니다. 감사합니다.