커뮤니티

로직 문의

프로필 이미지
공급자
2026-06-23 23:59:01
41
글번호 232555
답변완료

첨부 이미지

안녕하세요.


현재 예스스탁 자동매매를 실계좌에서 운용 중인데 포지션 표시와 관련하여 몇 가지 문의드립니다.


1. 현재 사용 중인 전략은 롱 전용 전략입니다.

진입은 아래 코드만 사용하고 있습니다.


Buy("LONG_ENTRY");


그리고 청산은


ExitLong(...)

SetStopLoss(...)

SetStopProfitTarget(...)


만 사용하고 있으며,


SellShort(...)

Sell(...)

ExitShort(...)


와 같은 숏 진입 코드는 전혀 사용하지 않고 있습니다.


2. 그런데 실시간 계좌 화면에서는


* 구분 : 매도

* 수량 : 1

* 선물매도 1계약 보유


와 같이 표시되고 있습니다.


질문 1)

위 코드 구조에서 예스스탁이 자동으로 신규 매도(숏) 포지션을 생성할 가능성이 있나요?


질문 2)

ExitLong, SetStopLoss, SetStopProfitTarget에 의해 청산 주문이 나갈 때,

일부 상황에서 신규 매도 포지션으로 반전 진입될 가능성이 있나요?


질문 3)

실계좌 포지션과 MarketPosition 값이 서로 다르게 표시될 수 있나요?


예를 들어,


실계좌 = 매도 1

MarketPosition = 1 또는 0


과 같이 동기화가 어긋나는 경우가 있는지 궁금합니다.


질문 4)

재접속이나 서버 재시작 이후에

기존 포지션이 Long에서 Short로 잘못 인식되거나,

차트 신호 기준으로 MarketPosition이 재설정되는 경우가 있는지도 확인 부탁드립니다.


현재 사용 중인 전략은 롱 전용이므로,

실시간 계좌에 "매도 1"이 표시되는 이유가 궁금합니다.



제 로직 입니다

// =====================================================

// 롱 전용 개선본 v2

// - 손절 단순화 (SetStopLoss 단독 사용)

// - 진입 조건 완화 (1.005 → 1.002)

// - 횡보장 필터 추가 (변동폭 확대)

// - ExitLong 중복 제거

// - MDD 감소 목표

// =====================================================


Input : 단기(20), 장기(60);

Input : 손절(2.5), 익절(3.7);

Input : 최소일변동폭(3.0);

Input : 최소수익(3.2);

Input : 수익감소(2.0);

Input : MFE1(3.0), Lock1(1.2);

Input : MFE2(5.0), Lock2(3.3);


Input : 시작시간(090000);

Input : 종료시간(110000);


// [추가] 횡보장 필터용

Input : 국면완화(0.995); // 일봉 국면 완화값

Input : MA승수(1.000); // 분봉 MA 진입 승수 (기존 1.005 → 완화)

Input : 변동폭승수(1.6); // 최소변동폭 승수 (1.0 = 기존 유지)


Var : 단기평(0), 장기평(0);

Var : Tcond(false);

Var : AvgRange(0);

Var : bh(0);

Var : 일봉단기평(0);

Var : 일봉장기평(0);

Var : 상승국면(false);

Var : 현재MFE율(0);

Var : 트레일선(0);

Var : 잠금선(0);

Var : 최종청산선(0);


// =====================================================

// 1. 분봉 이동평균

// =====================================================

단기평 = ma(C, 단기);

장기평 = ma(C, 장기);


// =====================================================

// 2. 일봉 이동평균

// =====================================================

일봉단기평 =

(

DayClose(1) + DayClose(2) + DayClose(3) + DayClose(4) +

DayClose(5) + DayClose(6) + DayClose(7) + DayClose(8) +

DayClose(9) + DayClose(10) + DayClose(11) + DayClose(12) +

DayClose(13) + DayClose(14) + DayClose(15) + DayClose(16) +

DayClose(17) + DayClose(18) + DayClose(19) + DayClose(20)

) / 20;


일봉장기평 =

(

DayClose(1) + DayClose(2) + DayClose(3) + DayClose(4) +

DayClose(5) + DayClose(6) + DayClose(7) + DayClose(8) +

DayClose(9) + DayClose(10) + DayClose(11) + DayClose(12) +

DayClose(13) + DayClose(14) + DayClose(15) + DayClose(16) +

DayClose(17) + DayClose(18) + DayClose(19) + DayClose(20) +

DayClose(21) + DayClose(22) + DayClose(23) + DayClose(24) +

DayClose(25) + DayClose(26) + DayClose(27) + DayClose(28) +

DayClose(29) + DayClose(30) + DayClose(31) + DayClose(32) +

DayClose(33) + DayClose(34) + DayClose(35) + DayClose(36) +

DayClose(37) + DayClose(38) + DayClose(39) + DayClose(40) +

DayClose(41) + DayClose(42) + DayClose(43) + DayClose(44) +

DayClose(45) + DayClose(46) + DayClose(47) + DayClose(48) +

DayClose(49) + DayClose(50) + DayClose(51) + DayClose(52) +

DayClose(53) + DayClose(54) + DayClose(55) + DayClose(56) +

DayClose(57) + DayClose(58) + DayClose(59) + DayClose(60)

) / 60;


// =====================================================

// 3. 국면 판단

// =====================================================

상승국면 = false;

if 일봉단기평 > 일봉장기평 * 국면완화 then

상승국면 = true;


// =====================================================

// 4. 최근 5일 평균 변동폭

// =====================================================

AvgRange =

(

(DayHigh(1)-DayLow(1)) +

(DayHigh(2)-DayLow(2)) +

(DayHigh(3)-DayLow(3)) +

(DayHigh(4)-DayLow(4)) +

(DayHigh(5)-DayLow(5))

) / 5;


// =====================================================

// 5. 날짜 변경 시 진입 허용

// =====================================================

if sdate != sdate[1] then

Tcond = true;


// =====================================================

// 6. LONG 진입

// [변경] MA승수 파라미터화 (1.005 → 최적화 가능)

// [변경] 변동폭 조건 승수 추가 (횡보 필터 강화 가능)

// =====================================================

if stime >= 시작시간 and stime <= 종료시간

and Tcond == true

and 상승국면 == true then

{

if AvgRange >= 최소일변동폭 * 변동폭승수 then

{

if 단기평 > 장기평 * MA승수

and C > O then

{

Buy("LONG_ENTRY");

Tcond = false;

}

}

}


// =====================================================

// 7. 포지션 보유 중 청산 로직

// [변경] ExitLong 중복 제거

// SetStopLoss 단독으로 손절 처리

// 트레일링 + 수익잠금 유지

// =====================================================

if MarketPosition == 1 then

{

bh = Highest(H, BarsSinceEntry);

현재MFE율 = (bh - EntryPrice) / EntryPrice * 100;

트레일선 = bh * (1 - 수익감소 / 100);


잠금선 = EntryPrice;

if 현재MFE율 >= MFE1 then

잠금선 = EntryPrice * (1 + Lock1 / 100);

if 현재MFE율 >= MFE2 then

잠금선 = EntryPrice * (1 + Lock2 / 100);


최종청산선 = 트레일선;

if 잠금선 > 트레일선 then

최종청산선 = 잠금선;


if bh >= EntryPrice * (1 + 최소수익 / 100) then

{

ExitLong(

"LONG_TRAIL",

AtStop,

최종청산선

);

}

}


// =====================================================

// 8. 손절 / 익절

// [변경] ExitLong AtMarket 손절 제거

// SetStopLoss 단독 사용으로 단순화

// 충돌 가능성 제거

// =====================================================

SetStopLoss(손절, PercentStop);

SetStopProfitTarget(익절, PercentStop);




//////////////////

LONG 전용 전략인데 실계좌에 매도 1계약이 잡혀 있습니다. 예스스탁에서 ExitLong이 신규 매도로 전환될 수 있는지 확인 부탁드립니다


시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-06-24 09:46:49

안녕하세요 예스스탁입니다. 올리신 내용은 미체결이 있어 발생하는 내용 같습니다. 1 Buy, Exitlong, Sell ,Exitshort은 신호함수입니다. 신호종류에 따라 구분하기 위해 4가지가 제공되지만 실제 주문은 매수주문, 매도주문입니다. Buy는 매수주문 exitlong은 매도주문 sell은 매도주문 exitshort은 매수주문 작성하신 수식은 신호상 매수포지션 거래만 하는 전략이지만 만약 매수진입이 미체결된 상태에서 매수청산신호가 발생해서 체결되면 차트에 매도포지션을 가지게 됩니다. 즉 주문에 대해 미체결이 발생하면 실제 계좌는 매수포지션을 취했다가 매도주문이 체결되서 무포지션이 되어야 하지만 매수진입 미체결되고 매수청산주문이 체결되면 포지션을 반대로 가져가게 되고 매수진입 체결되고 매수청산주문이 미체결되고 다음 매수진입이 체결되면 포지션을 두배로 가져가는 상황이 생길 수 있습니다. 2 시스템은 신호에 따라 주문만 집행을 합니다. 주문이후 체결/미체결은 수식안에서 알 수 없습니다. 이런 이유로 자동매매시 주문가격을 일반적으로 체결에 유리한 가격으로 설정을 합니다. 차트에서 신호가 발생하면 설정창에서 지정한 진입/청산가격으로 주문이 집행되는데 현재가+-5호가로 지정하면 매수주문은 현재가에 5틱 높여서, 매도주문은 현재가에 5틱 낮춰서 주문을 집행하게 해서 체결율을 높이게 됩니다. 물론 증거금증이 충분하다면 시장가를 사용하는 경우도 있습니다. 3 신호에 따른 주문이 반대로 나가거나 혹은 신호를 반대로 인식하는 경우는 없습니다. 4 MarketPosition은 차트 신호상 포지션입니다. 시스템은 차트에 적용되어 차트의 데이터를 읽어 신호를 발생합니다. 모든 포지션 관련 함수는 신호상 내역입니다. 5 [6103] 시스템모니터 화면을 보시면 현재 차트에 적용중인 전체 시스템을 모니터닝 하실 수 있고 하단에서 신호 발생내역과 주문내역에서 보실 수 있습니다 더 자세한 설명이 필요하시면 02-3453-1060으로 전화주시기 바랍니다. 즐거운 하루되세요