커뮤니티

시스템식에서 실 계좌 정보를 불러 오는것이 가능하나요?

프로필 이미지
강심장
2026-01-11 11:45:08
45
글번호 229702
답변완료

시스템 트레이딩에서 실계좌 포지션 동기화 방법에 대해 알고 싶습니다. 시스템식에서 사용하는 marketposition은 시스템 트레이딩에 의해 진입 청산된 경우에만 적용되는 것으로 알고 있는데.. 예를들어 시스템식에 의해 매수 진입을 했을 경우,,시스템이 자동청산으로 청산을 하지 않은 상황에서 내가 수동으로 매수청산을 한경우, marketposition은 계속 시스템에 의해 매수진입한 marketposition == 1 인 상태로 남아 있을 것인데,, 실 계좌에서는 내가 이미 수동으로 처리를 했기 때문에 실 계좌의 position은 0 을 나타내고 있읍니다. 이러케 시스템에 의한 규칙과 실계좌가 불일치할 경우, 어떠한 방식으로 포지션을 동기화 할수가 있나요? (포지션 동기화는 시스템의 marketposition을 실계좌의 포지션에 일치시켜야 됨) .. 내가 알기로는 지표식에서는 가능한 것으로 알고는 있는데,, 예를들어 if 계좌정보표시 == 1 then

begin

RealAvgPrice = GetPositionAveragePrice(SymbolCode, 실계좌번호, 0);

SellQty = GetPositionQuantity(SymbolCode, 실계좌번호, 1);

BuyQty = GetPositionQuantity(SymbolCode, 실계좌번호, 2);


// [핵심] 처음 진입했을 때(수량이 0이다가 생겼을 때)의 시간을 기록

if (SellQty > 0 or BuyQty > 0) then

begin

if EntryTime == 0 then // 아직 기록 전이라면 (진입 첫 봉)

begin

EntryTime = sTime;

EntryDate = sDate;

end;

end

else // 수량이 없으면 초기화

begin

EntryTime = 0;

EntryDate = 0;

end; 이런식으로 해서 실계좌 정보를 읽어 올수가 있는데,, 시스템식에서도 동일 명령어로 읽어온후 시스템식의 marketposition과 차이가 발생시 어떠한 방식으로 동기화 시킬수 있는지를 알고 싶습니다.

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

예스스탁 예스스탁 답변

2026-01-12 15:46:50

안녕하세요 예스스탁입니다. 포지션 관련 함수는 모두 차트 신호상 내용이며 해당 함수의 내용을 따로 부여가 가능하지 않습니다. marketposition또한 차트상 청산신호가 발생하지 않으면 0으로 변경할 방법이 없습니다. 도움을 드리지 못해 죄송합니다. 시스템으로 진입 중 수동으로 청산하셨다면 시스템을 해제하시거나 혹은 시스템 설정창을 열러 주문시작신호를 진입신호로 설정하고 다시 적용해 주셔야 합니다. 주문시작신호를 진입신호로 지정하고 적용하면 적용이후 첫 진입신호부터 주문이 집행되므로 적용이후 첫 신호가 청산신호이면 신호 표시만하고 주문은 건너뛰게 됩니다. 즐거운 하루 되세요
프로필 이미지

강심장

2026-01-13 12:14:56

어. 이거 대충 방법을 찾은거 같은데요.. 이런식으로 하면 가능할 거 같던데.. 어떤지 분석좀 해주세요.. /******************************************************************************* * [모듈 6] 통합 관리 시스템 (종목변경 + 계좌동기화) * 간소화 버전 - 로그 출력 제거 *******************************************************************************/ Input : 종목변경시즉시청산이면1(1); // 1: 즉시청산, 0: 안함 // ============================================ // 1. 변수 선언 // ============================================ var : 계좌번호("**********"); // 실제 계좌번호로 변경 필요 var : 동기화주기(5); // 동기화 주기 (분) var : 종목변경후대기시간(5); // 종목 변경 후 대기 시간 (분) var : 현재종목코드(""), 저장종목코드(""), 종목변경감지(false); var : 현재종목명(""), 저장종목명(""); var : 실제진입가(0), 대기시작분(0), 대기종료분(0), 대기중(false); var : 대기중_매수진입제한(false), 대기중_매도진입제한(false); var : 다음동기화시간(0), 계좌수량(0), 평균가(0); // ============================================ // 2. 초기화 (한 번만 실행) // ============================================ if CurrentBar == 1 then begin 현재종목코드 = Symbolcode; 현재종목명 = SymbolName; 저장종목코드 = 현재종목코드; 저장종목명 = 현재종목명; 다음동기화시간 = Time + (동기화주기 * 60); end; // ============================================ // 3. 매 바마다 실행 부분 // ============================================ // A. 종목 정보 업데이트 현재종목코드 = Symbolcode; 현재종목명 = SymbolName; // B. 종목 변경 감지 if 현재종목코드 <> 저장종목코드 then begin 종목변경감지 = true; 저장종목코드 = 현재종목코드; 저장종목명 = 현재종목명; // 대기 시간 시작 대기시작분 = TimeToMinutes(Time); 대기종료분 = 대기시작분 + 종목변경후대기시간; 대기중 = true; 대기중_매수진입제한 = true; 대기중_매도진입제한 = true; end; // C. 대기 시간 체크 if 대기중 and TimeToMinutes(Time) >= 대기종료분 then begin 대기중 = false; 대기중_매수진입제한 = false; 대기중_매도진입제한 = false; end; // D. 5분마다 계좌 동기화 if Time >= 다음동기화시간 then begin 다음동기화시간 = Time + (동기화주기 * 60); // 계좌 조회 if 콜옵션이면1 == 1 then 계좌수량 = GetPositionQuantity(SymbolCode, 계좌번호, 2); // 콜: 매수수량 else 계좌수량 = GetPositionQuantity(SymbolCode, 계좌번호, 1); // 풋: 매도수량 // 평균가 조회 if 계좌수량 > 0 then 평균가 = GetPositionAveragePrice(SymbolCode, 계좌번호, 0); // 콜옵션 처리 if 콜옵션이면1 == 1 then begin // 수동 청산 감지 if MarketPosition == 1 and 계좌수량 == 0 then begin Sell("수동청산_보정"); 실제진입가 = 0; 최근청산 = 1; end // 정상 포지션: 평균가 업데이트 else if 계좌수량 > 0 then begin 실제진입가 = 평균가; end; end // 풋옵션 처리 else begin // 수동 청산 감지 if MarketPosition == -1 and 계좌수량 == 0 then begin Buy("수동청산_보정2"); 실제진입가 = 0; 최근청산 = -1; end // 정상 포지션: 평균가 업데이트 else if 계좌수량 > 0 then begin 실제진입가 = 평균가; end; end; end; // E. 종목 변경 즉시 청산 if 종목변경시즉시청산이면1 == 1 and 종목변경감지 and MarketPosition <> 0 then begin if MarketPosition == 1 then begin Sell("종목변경_즉청"); end else if MarketPosition == -1 then begin Buy("종목변경_즉청2"); end; 종목변경감지 = false; end;

프로필 이미지

예스스탁 예스스탁 답변

2026-01-13 14:19:09

안녕하세요 예스스탁입니다. 전화로 답변드렸습니다. 즐거운 하루 되세요