커뮤니티
문의드립니다.
/*
스윙 고/저점을 이용한 자동 추세선 생성 + 추세선 돌파 매수·매도 시스템
*/
input : len(1);
var : sh1(0), sh2(0), shBar1(0), shBar2(0);
var : sl1(0), sl2(0), slBar1(0), slBar2(0);
var : TL_HighVal1(0), TL_HighVal2(0);
var : TL_LowVal1(0), TL_LowVal2(0);
var : highTrend(0), lowTrend(0);
// 최근 두 스윙고점
sh1 = SwingHigh(1, H, len, len, 100);
sh2 = SwingHigh(2, H, len, len, 100);
shBar1 = SwingHighBar(1, H, len, len, 100);
shBar2 = SwingHighBar(2, H, len, len, 100);
// 최근 두 스윙저점
sl1 = SwingLow(1, L, len, len, 100);
sl2 = SwingLow(2, L, len, len, 100);
slBar1 = SwingLowBar(1, L, len, len, 100);
slBar2 = SwingLowBar(2, L, len, len, 100);
// ① 하락추세선 공식 : 두 스윙고점을 연결한 직선의 현재봉 y값
if shBar2 > shBar1 and sh1 > 0 and sh2 > 0 then
{
TL_HighVal1 = H[shBar2];
TL_HighVal2 = H[shBar1];
highTrend = TL_HighVal2 +
(TL_HighVal1 - TL_HighVal2) * (shBar1) / (shBar2 - shBar1);
}
// ② 상승추세선 공식 : 두 스윙저점을 연결한 직선의 현재봉 y값
if slBar2 > slBar1 and sl1 > 0 and sl2 > 0 then
{
TL_LowVal1 = L[slBar2];
TL_LowVal2 = L[slBar1];
lowTrend = TL_LowVal2 +
(TL_LowVal1 - TL_LowVal2) * (slBar1) / (slBar2 - slBar1);
}
if C > highTrend and C[1]<= highTrend[1] then
{
Buy("추세상향돌파");
}
if marketposition == 1 then
{
exitlong("롱청산",AtStop,low[1]);
}
######################################################################################################
// ? 하락추세선(스윙고점 연결)
if shBar2 > shBar1 and sh1 > 0 and sh2 > 0 then
{
TL_High = TL_New(
sdate[shBar2], stime[shBar2], H[shBar2],
sdate[shBar1], stime[shBar1], H[shBar1]
);
TL_SetColor(TL_High, Red);
TL_SetSize(TL_High, 2);
}
// ? 상승추세선(스윙저점 연결)
if slBar2 > slBar1 and sl1 > 0 and sl2 > 0 then
{
TL_Low = TL_New(
sdate[slBar2], stime[slBar2], L[slBar2],
sdate[slBar1], stime[slBar1], L[slBar1]
);
TL_SetColor(TL_Low, Green);
TL_SetSize(TL_Low, 2);
}
########################################################################
질문1. 추세선이 왜 중간에 끊어지는지 모르겠습니다. swinghigh를 연결하며 이어져야 할것 같은데 말입니다.
질문2. 진입이 왜 저기서 일어나는지 모르겠습니다. 빨간선을 크로스업했을때 진입을 의도한것인데...
질문3. 청산이 왜 2봉전 저가에서 일어나는지 모르겠습니다. 코드는 1봉전 저가인데...
항상 감사드립니다.

답변 1
예스스탁 예스스탁 답변
2025-11-18 15:41:28