커뮤니티

분할 청산 문의 입니다

프로필 이미지
원챈스
2026-03-16 00:30:10
44
글번호 231079
답변완료


If MarketPosition != 0 Then Begin

SignalOpen = Open[BarsSinceEntry];

SignalClose = Close[BarsSinceEntry];

SignalHigh = High[BarsSinceEntry];

SignalLow = Low[BarsSinceEntry];

EntryBody = AbsValue(SignalOpen - SignalClose);


If BarsSinceEntry == 0 Then ScaleOrderSent = False;


// --- [STEP 1] 장대봉 목표가 설정 (익절 지점) ---

TargetPrice1 = 0;

If MarketPosition == 1 Then Begin // 매수

If EntryBody >= SignalClose * 0.0015 Then TargetPrice1 = SignalClose + (EntryBody * 0.90);

Else If EntryBody >= SignalClose * 0.0007 Then TargetPrice1 = SignalClose + (EntryBody * 0.95);

End;

If MarketPosition == -1 Then Begin // 매도

If EntryBody >= SignalClose * 0.0015 Then TargetPrice1 = SignalClose - (EntryBody * 0.90);

Else If EntryBody >= SignalClose * 0.0007 Then TargetPrice1 = SignalClose - (EntryBody * 0.95);

End;


// --- [STEP 2] 2/3 물량 분할 청산 예약 ---

If TargetPrice1 > 0 And ScaleOrderSent == False Then Begin

If MarketPosition == 1 Then ExitLong("분할_L", AtLimit, TargetPrice1, "", int(CurrentContracts * 2/3), 1);

If MarketPosition == -1 Then ExitShort("분할_S", AtLimit, TargetPrice1, "", int(CurrentContracts * 2/3), 1);

ScaleOrderSent = True;

End;


// --- [STEP 3] 조건별 청산 및 손절 로직 ---

// 1. 분할 청산이 성공했다면 나머지 물량은 그 캔들 종가에 전량 던짐

If IsExitName("분할_L", 0) Then ExitLong("나머지정리_L", OnClose);

If IsExitName("분할_S", 0) Then ExitShort("나머지정리_S", OnClose);


// 2. 가격이 목표가에 오지 않으면 다음 캔들(진입 후 1봉) 종가에 전량 청산

If BarsSinceEntry == 1 Then Begin

ExitLong("목표미달종가청산_L", OnClose);

ExitShort("목표미달종가청산_S", OnClose);

End;


// 3. 손절: 신호 캔들의 저점/고점을 종가상 음봉/양봉으로 깰 때

If MarketPosition == 1 Then Begin

If Close < SignalLow Then ExitLong("신호봉저점손절_L", OnClose);

End;

If MarketPosition == -1 Then Begin

If Close > SignalHigh Then ExitShort("신호봉고점손절_S", OnClose);

End;


End;



이코드는

예시로 롱 기준 상방 진입 했을 떄

진입한 캔들이 나름 통통 장대 양봉 일 때 (그냥 빌빌한 양봉이면 이조건 없이 그냥 다음 방식으로 가고)

2/3를 그 장대 봉 몸통 폭 90% ~95% 만큼 신호캔들 종가대비 더 시세가 나는 자리에 미리걸어두고 청산 시키고

청산되면 나머지 1/3은 종가에 던지는 것이고

시세가 크게 안나서 그 과정이 안되면 그냥 다음 조건으로 넘어 가는 것인데

시뮬레이션 신호를 걸고 봉들이 시세를 만족 하는 챠트가 나와도

분할 청산이 안됩니다 시뮬레이션 챠트에 그냥 종가에 다 던지는 것으로 나옵니다

수식이 문제인건가요?

아니면 챠트에 매매 조건 설정이 따로있는데 그것을 못한 것인가요?


감사 합니다

사용자 함수
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-03-16 13:47:17

안녕하세요 예스스탁입니다. 1 분할청산은 별도로 설정창에서 지정하셔야 하는 내용이 없습니다. 수식 내용을 살펴보셔야 합니다. 2 올리신 수식은 진입은 봉미완성시 진입을 염두에 두고 작성된 식인데 실제 진입음 봉완성시 진입인것 같습니다. If MarketPosition != 0 Then if BarsSinceEntry == 0 then 위와 같은 조건이 성립되기 위해서는 진입이 atstop이나 atlimit 신호타입을 사용해 봉미완성시에 발생하는 내용이어야 가능합니다. 만약 진입이 봉완성시라면 아래와 같이 작성하시면 됩니다. 진입봉에서 값을 계산하고 셋팅해서 다음봉에서만 TargetPrice1로 청산이 나오게 작성하셔야 합니다. if MarketPosition <= 0 and 매수조건 Then { Buy("b"); SignalOpen = Open; SignalClose = Close; SignalHigh = High; SignalLow = Low; EntryBody = AbsValue(SignalOpen - SignalClose); TargetPrice1 = 0; If MarketPosition == 1 Then Begin // 매수 If EntryBody >= SignalClose * 0.0015 Then TargetPrice1 = SignalClose + (EntryBody * 0.90); Else If EntryBody >= SignalClose * 0.0007 Then TargetPrice1 = SignalClose + (EntryBody * 0.95); End; if TargetPrice1 > 0 Then ExitLong("분할_L", AtLimit, TargetPrice1, "", int(CurrentContracts * 2/3), 1); } if MarketPosition >= 0 and 매도조건 Then { Sell("s"); SignalOpen = Open; SignalClose = Close; SignalHigh = High; SignalLow = Low; EntryBody = AbsValue(SignalOpen - SignalClose); TargetPrice1 = 0; If MarketPosition == -1 Then Begin // 매도 If EntryBody >= SignalClose * 0.0015 Then TargetPrice1 = SignalClose - (EntryBody * 0.90); Else If EntryBody >= SignalClose * 0.0007 Then TargetPrice1 = SignalClose - (EntryBody * 0.95); End; if TargetPrice1 > 0 Then ExitShort("분할_S", AtLimit, TargetPrice1, "", int(CurrentContracts * 2/3), 1); } If MarketPosition != 0 Then begin If LatestExitName(0) == "분할_L" Then ExitLong("나머지정리_L", OnClose); If LatestExitName(0) == "분할_S" Then ExitShort("나머지정리_S", OnClose); If BarsSinceEntry == 1 Then Begin ExitLong("목표미달종가청산_L", OnClose); ExitShort("목표미달종가청산_S", OnClose); End; // 3. 손절: 신호 캔들의 저점/고점을 종가상 음봉/양봉으로 깰 때 If MarketPosition == 1 Then Begin If Close < SignalLow Then ExitLong("신호봉저점손절_L", OnClose); End; If MarketPosition == -1 Then Begin If Close > SignalHigh Then ExitShort("신호봉고점손절_S", OnClose); End; End; 즐거운 하루되세요