INPUT:
Period(20), // 장기 이동평균 기간
Period1(5), // 단기 이동평균 기간
Period2(20), // 중기 이동평균 기간
A(0); // 이격률 기준값
VAR:
maShort(0), // 단기 이동평균
maMid(0), // 중기 이동평균
maLong(0), // 장기 이동평균
Disparity(0), // 이격률
EntryPrice(0), // 매수 가격 저장
TradeOpen(FALSE), // 포지션 보유 여부
CurrTime(0), // 현재 시간 (HHMM)
ProfitRate(0), // 현재 수익률 (%)
ProfitPreserveActive(FALSE); // 수익보존 활성화 여부
// 이동평균 계산
maShort = MA(C, Period1);
maMid = MA(C, Period2);
maLong = MA(C, Period);
// 이격률 계산
Disparity = (maShort - maMid) / C * 100;
// 현재 시간 구하기 (HHMM)
CurrTime = TIME;
// --- 매수 조건 (09:00 ~ 11:40) ---
IF (CurrTime >= 900) AND (CurrTime <= 1140) THEN
BEGIN
IF (TradeOpen = FALSE) AND
// 이동평균 조건 (골든크로스 예시)
(C > maLong) AND (C[1] <= maLong[1]) AND
(maMid > maMid[1]) AND
(maMid[1] < maMid[2])
AND
// 이격률 조건
(Disparity > A) AND (Disparity[1] <= A)
THEN
BEGIN
BUY;
EntryPrice = C; // 진입가 기록
TradeOpen = TRUE;
ProfitPreserveActive = FALSE; // 새 거래 시작 시 초기화
END;
END;
// --- 포지션 오픈 상태에서 익절 / 손절 / 수익보존 / 강제매도 체크 ---
IF TradeOpen = TRUE THEN
BEGIN
ProfitRate = (C - EntryPrice) / EntryPrice * 100;
// 익절: +5% 이상 도달 시 매도
IF ProfitRate >= 5 THEN
BEGIN
SELL;
TradeOpen = FALSE;
ProfitPreserveActive = FALSE;
END
// 손절: -3% 이하 도달 시 매도
ELSE IF ProfitRate <= -3 THEN
BEGIN
SELL;
TradeOpen = FALSE;
ProfitPreserveActive = FALSE;
END
ELSE
BEGIN
// 수익보존 활성화 조건: 수익률이 1.2% 이상 도달한 경우
IF ProfitPreserveActive = FALSE AND ProfitRate >= 1.2 THEN
BEGIN
ProfitPreserveActive = TRUE;
END;
// 수익보존 조건: 수익보존 활성화 후 수익률이 1.2% 미만으로 떨어지면 매도
IF (ProfitPreserveActive = TRUE) AND (ProfitRate < 1.2) THEN
BEGIN
SELL;
TradeOpen = FALSE;
ProfitPreserveActive = FALSE;
END;
// 강제 매도: 15:10에 무조건 매도
IF CurrTime = 1510 THEN
BEGIN
SELL;
TradeOpen = FALSE;
ProfitPreserveActive = FALSE;
END;
END;
END;
답변 1
예스스탁
예스스탁 답변
2025-08-01 10:09:03
안녕하세요
예스스탁입니다.
INPUT:
Period(20), // 장기 이동평균 기간
Period1(5), // 단기 이동평균 기간
Period2(20), // 중기 이동평균 기간
A(0); // 이격률 기준값
VAR:
maShort(0), // 단기 이동평균
maMid(0), // 중기 이동평균
maLong(0), // 장기 이동평균
Disparity(0), // 이격률
EntryPrice(0), // 매수 가격 저장
TradeOpen(FALSE), // 포지션 보유 여부
CurrTime(0), // 현재 시간 (HHMM)
ProfitRate(0), // 현재 수익률 (%)
ProfitPreserveActive(FALSE); // 수익보존 활성화 여부
// 이동평균 계산
maShort = MA(C, Period1);
maMid = MA(C, Period2);
maLong = MA(C, Period);
// 이격률 계산
Disparity = (maShort - maMid) / C * 100;
// 현재 시간 구하기 (HHMM)
CurrTime = sTime;
// --- 매수 조건 (09:00 ~ 11:40) ---
IF (CurrTime >= 90000) AND (CurrTime <= 114000) THEN
BEGIN
IF (TradeOpen == FALSE) AND
// 이동평균 조건 (골든크로스 예시)
(C > maLong) AND (C[1] <= maLong[1]) AND
(maMid > maMid[1]) AND
(maMid[1] < maMid[2])
AND
// 이격률 조건
(Disparity > A) AND (Disparity[1] <= A)
THEN
BEGIN
BUY();
EntryPrice = C; // 진입가 기록
TradeOpen = TRUE;
ProfitPreserveActive = FALSE; // 새 거래 시작 시 초기화
END;
END;
// --- 포지션 오픈 상태에서 익절 / 손절 / 수익보존 / 강제매도 체크 ---
IF TradeOpen == TRUE THEN
BEGIN
ProfitRate = (C - EntryPrice) / EntryPrice * 100;
// 익절: +5% 이상 도달 시 매도
IF ProfitRate >= 5 THEN
BEGIN
SELL();
TradeOpen = FALSE;
ProfitPreserveActive = FALSE;
END
// 손절: -3% 이하 도달 시 매도
ELSE IF ProfitRate <= -3 THEN
BEGIN
SELL();
TradeOpen = FALSE;
ProfitPreserveActive = FALSE;
END
ELSE
BEGIN
// 수익보존 활성화 조건: 수익률이 1.2% 이상 도달한 경우
IF ProfitPreserveActive == FALSE AND ProfitRate >= 1.2 THEN
BEGIN
ProfitPreserveActive = TRUE;
END;
// 수익보존 조건: 수익보존 활성화 후 수익률이 1.2% 미만으로 떨어지면 매도
IF (ProfitPreserveActive == TRUE) AND (ProfitRate < 1.2) THEN
BEGIN
SELL();
TradeOpen = FALSE;
ProfitPreserveActive = FALSE;
END;
// 강제 매도: 15:10에 무조건 매도
IF CurrTime == 151000 THEN
BEGIN
SELL();
TradeOpen = FALSE;
ProfitPreserveActive = FALSE;
END;
END;
END;
즐거운 하루되세요
> 행복사랑채 님이 쓴 글입니다.
> 제목 : 수식 완성 부탁드립니다.
> INPUT:
Period(20), // 장기 이동평균 기간
Period1(5), // 단기 이동평균 기간
Period2(20), // 중기 이동평균 기간
A(0); // 이격률 기준값
VAR:
maShort(0), // 단기 이동평균
maMid(0), // 중기 이동평균
maLong(0), // 장기 이동평균
Disparity(0), // 이격률
EntryPrice(0), // 매수 가격 저장
TradeOpen(FALSE), // 포지션 보유 여부
CurrTime(0), // 현재 시간 (HHMM)
ProfitRate(0), // 현재 수익률 (%)
ProfitPreserveActive(FALSE); // 수익보존 활성화 여부
// 이동평균 계산
maShort = MA(C, Period1);
maMid = MA(C, Period2);
maLong = MA(C, Period);
// 이격률 계산
Disparity = (maShort - maMid) / C * 100;
// 현재 시간 구하기 (HHMM)
CurrTime = TIME;
// --- 매수 조건 (09:00 ~ 11:40) ---
IF (CurrTime >= 900) AND (CurrTime <= 1140) THEN
BEGIN
IF (TradeOpen = FALSE) AND
// 이동평균 조건 (골든크로스 예시)
(C > maLong) AND (C[1] <= maLong[1]) AND
(maMid > maMid[1]) AND
(maMid[1] < maMid[2])
AND
// 이격률 조건
(Disparity > A) AND (Disparity[1] <= A)
THEN
BEGIN
BUY;
EntryPrice = C; // 진입가 기록
TradeOpen = TRUE;
ProfitPreserveActive = FALSE; // 새 거래 시작 시 초기화
END;
END;
// --- 포지션 오픈 상태에서 익절 / 손절 / 수익보존 / 강제매도 체크 ---
IF TradeOpen = TRUE THEN
BEGIN
ProfitRate = (C - EntryPrice) / EntryPrice * 100;
// 익절: +5% 이상 도달 시 매도
IF ProfitRate >= 5 THEN
BEGIN
SELL;
TradeOpen = FALSE;
ProfitPreserveActive = FALSE;
END
// 손절: -3% 이하 도달 시 매도
ELSE IF ProfitRate <= -3 THEN
BEGIN
SELL;
TradeOpen = FALSE;
ProfitPreserveActive = FALSE;
END
ELSE
BEGIN
// 수익보존 활성화 조건: 수익률이 1.2% 이상 도달한 경우
IF ProfitPreserveActive = FALSE AND ProfitRate >= 1.2 THEN
BEGIN
ProfitPreserveActive = TRUE;
END;
// 수익보존 조건: 수익보존 활성화 후 수익률이 1.2% 미만으로 떨어지면 매도
IF (ProfitPreserveActive = TRUE) AND (ProfitRate < 1.2) THEN
BEGIN
SELL;
TradeOpen = FALSE;
ProfitPreserveActive = FALSE;
END;
// 강제 매도: 15:10에 무조건 매도
IF CurrTime = 1510 THEN
BEGIN
SELL;
TradeOpen = FALSE;
ProfitPreserveActive = FALSE;
END;
END;
END;