커뮤니티

문의드립니다.

프로필 이미지
시고르시고르
2025-11-17 19:18:04
60
글번호 228129
답변완료


/* 스윙 고/저점을 이용한 자동 추세선 생성 + 추세선 돌파 매수·매도 시스템 */ 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

안녕하세요 예스스탁입니다. 1 기존 작성하신 내용의 값은 아래와 같이 지표식으로 출력해 그려보시면 됩니다. 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); var : TL_High(0),TL_lOW(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); } Plot1(highTrend); Plot2(LowTrend); 2 exitlong("롱청산",AtStop,low[1]); atstop이나 atlimit은 봉완성시 지정한 값을 셋팅하고 다음봉의 현재가와 비교해 신호가 발생합니다. 그러므로 위 내용은 봉완성시 전봉의 저가를 셋팅하고 다음봉의 현재가와 비교하므로 신호 발생기준으로 2봉전이 됩니다. 아래와 같이 지정하시면 됩니다. 봉완성시 저가셋팅하고 다음봉 현재가가 해당값 이하이면 청산 exitlong("롱청산",AtStop,low); 3
추세선등 수정한 식입니다.
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); var : shdiff(0),TL_High(0),sldiff(0),TL_lOW(0); // 최근 두 스윙고점 if SwingHigh(1,H,len,len,len*2+1) != -1 Then { sh1 = h[len]; sh2 = sh1[1]; shBar1 = Index[len]; shBar2 = shBar1[1]; shdiff = (sh1-sh2)/(shbar1-shbar2); TL_High = TL_New(sDate[Index-Shbar2],sTime[Index-shbar2],sh2,sDate,sTime,sh1); TL_SetColor(TL_high,Red); } Else { highTrend = sh2+shdiff*(Index-shbar2); TL_SetEnd(TL_high,sDate,sTime,highTrend); } // 최근 두 스윙고점 if Swinglow(1,L,len,len,len*2+1) != -1 Then { sl1 = L[len]; sl2 = sl1[1]; slBar1 = Index[len]; slBar2 = slBar1[1]; sldiff = (sl1-sl2)/(slbar1-slbar2); TL_Low = TL_New(sDate[Index-Slbar2],sTime[Index-slbar2],sl2,sDate,sTime,sl1); TL_SetColor(TL_low,Blue); } Else { lowTrend =sl2+sldiff*(Index-slbar2); TL_SetEnd(TL_low,sDate,sTime,lowTrend); } if C > highTrend and C[1]<= highTrend[1] and index <= shBar2+200 then { Buy("추세상향돌파"); } if marketposition == 1 then { exitlong("롱청산",AtStop,low); } 즐거운 하루되세요