커뮤니티

수식 작성 관련 문의 드립니다.

프로필 이미지
유정란
2024-12-10 13:39:23
641
글번호 186119
답변완료
안녕하세요. 예스트레이더의 선물 관련 수식을 만들어 보고 있습니다. 간단하게 말씀 드려보면, 3분봉 차트상 고점이 나오면 그 고점에서 볼린저밴드 0 시작하고 그후 고점이 있는 봉 저점을 볼밴의 0.236 지점으로 설정하여 1 위치가 표시 되도록 만들어 보고 있습니다. Input : left(3), right(3); var : hh(0), ll(0); var : down1_236(0); var : up1_236(0); // 전고점 감지 if SwingHigh(1,h,Left,right,left+right+1) != -1 Then { hh = h[right]; // a의 고가 // a의 고가(0)와 저가 기준 down1_236 = hh - ((hh - L[right]) * (1-0.236)/0.236); } // 전저점 감지 if SwingLow(1,l,Left,right,left+right+1) != -1 Then { ll = l[right]; // a의 저가 // a의 저가(0)와 고가 기준 up1_236 = ll + ((H[right] - ll) * (1-0.236)/0.236); } // 평행이동 조건으로 플롯 if abs(down1_236 - down1_236[1]) < 0.3 Then Plot1(down1_236, "하락1_236", Magenta); if abs(up1_236 - up1_236[1]) < 0.3 Then Plot2(up1_236, "상승1_236", Red); 여기서 질문이 있습니다. 1. 스크립트 짤때 새로운 변수 만드는것을 트레이딩뷰에서는 아래에 별도로 만들 수 있는데, 예스렝귀지에서는 맨위 변수 설정부터 시작해서 쭉 만들어야 하나요? 각각 별도로 만들면 에러 걸리더라구요. 2. 지금의 스크립트를 적용하면 일목균형표의 스텝 라인 처럼 표시가 됩니다. 그래서 복잡한데, 수직 상승, 하락이 아니라 딱 횡보 즉 평행한 값으로 고정 될때만 차트에 표시되게 만들고 싶습니다. 가능할가요? 3. 일정 범위 안에 들어올때 저 평행한 라인이 그려지면 좋겠습니다. 차트 현재 가격의 1.5 이내로 들어올때 표시되게 할 수 있을가요? 4. 차트상 고점 저점을 인식하게 만드는 방법이 약간 어설프더라구요. 그냥 지속적으로 고저점 인식해서 차트를 쭉 만들어버려서 상승할때 똑같이 상승하고 그러던데, 차트상 전고점 확인되면 그것을 유지하고, 그후 다시 나오는 전고점이 이전 전고점보다 낮으면 안나오거나 혹은 일정 시간 지난 후의 고점을 새로운 고점으로 인식해서 차트 나오게 하고. 이런식으로 전고점 인식도 만들어보고 싶은데 가능할가요? 그럼 잘 부탁드립니다.
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-12-10 14:19:18

안녕하세요 예스스탁입니다. 1 변수선언은 수식 중간에 넣으셔도 됩니다. 변수선이 변수사용하는 곳보다 앞에 위치하기만 하면 됩니다. input : p1(5); var : a(0); a = ma(C,p1); if c > a Then { input : P2(20); var : b(0); b = ma(C,P2); } input : P3(20); var : x(0); if crossup(c,b) then x = h; Plot1(a); plot2(b); plot3(x); 2 Input : left(3), right(3); var : hh(0), ll(0); var : down1_236(0); var : up1_236(0); // 전고점 감지 if SwingHigh(1,h,Left,right,left+right+1) != -1 Then { hh = h[right]; // a의 고가 // a의 고가(0)와 저가 기준 down1_236 = hh - ((hh - L[right]) * (1-0.236)/0.236); } // 전저점 감지 if SwingLow(1,l,Left,right,left+right+1) != -1 Then { ll = l[right]; // a의 저가 // a의 저가(0)와 고가 기준 up1_236 = ll + ((H[right] - ll) * (1-0.236)/0.236); } // 평행이동 조건으로 플롯 if abs(down1_236 - down1_236[1]) < 0.3 Then value1 = down1_236; if value1 == value1[1] Then Plot1(value1, "하락1_236", Magenta); Else NoPlot(1); if abs(up1_236 - up1_236[1]) < 0.3 Then Value2 = up1_236; if Value2 == Value2[1] Then Plot2(Value2, "상승1_236", Red); Else NoPlot(2); 3 Input : left(3), right(3); var : hh(0), ll(0); var : down1_236(0); var : up1_236(0); // 전고점 감지 if SwingHigh(1,h,Left,right,left+right+1) != -1 Then { hh = h[right]; // a의 고가 // a의 고가(0)와 저가 기준 down1_236 = hh - ((hh - L[right]) * (1-0.236)/0.236); } // 전저점 감지 if SwingLow(1,l,Left,right,left+right+1) != -1 Then { ll = l[right]; // a의 저가 // a의 저가(0)와 고가 기준 up1_236 = ll + ((H[right] - ll) * (1-0.236)/0.236); } // 평행이동 조건으로 플롯 if abs(down1_236 - down1_236[1]) < 0.3 Then value1 = down1_236; if value1 == value1[1] and abs(C-value1) <= 1.5 Then Plot1(value1, "하락1_236", Magenta); Else NoPlot(1); if abs(up1_236 - up1_236[1]) < 0.3 Then Value2 = up1_236; if Value2 == Value2[1] and abs(C-value2) <= 1.5 Then Plot2(Value2, "상승1_236", Red); Else NoPlot(2); 4 아래 내용 참고하시기 바랍니다. 20봉 이내에 스윙하이/스윙로우가 발생하면 직전보다 고점값이 클때/저점값이 작을때만 인정하고 20봉 이후에 발생하면 고점값과 저점값을 변경하게 됩니다. Input : left(3), right(3),N(20); var : hh(0), ll(0); var : down1_236(0); var : up1_236(0); // 전고점 감지 if SwingHigh(1,h,Left,right,left+right+1) != -1 and (hh == 0 or (hh > 0 and H[right] > hh)) Then { hh = h[right]; // a의 고가 // a의 고가(0)와 저가 기준 down1_236 = hh - ((hh - L[right]) * (1-0.236)/0.236); var1 = Index; } if hh > 0 and Index >= var1+N Then hh = 0; // 전저점 감지 if SwingLow(1,l,Left,right,left+right+1) != -1 and (ll == 0 or (ll > 0 and L[right] < hh)) Then { ll = l[right]; // a의 저가 // a의 저가(0)와 고가 기준 up1_236 = ll + ((H[right] - ll) * (1-0.236)/0.236); var2 = Index; } if ll > 0 and Index >= var1+N Then ll = 0; // 평행이동 조건으로 플롯 if abs(down1_236 - down1_236[1]) < 0.3 Then value1 = down1_236; if value1 == value1[1] and abs(C-value1) <= 1.5 Then Plot1(value1, "하락1_236", Magenta); Else NoPlot(1); if abs(up1_236 - up1_236[1]) < 0.3 Then Value2 = up1_236; if Value2 == Value2[1] and abs(C-value2) <= 1.5 Then Plot2(Value2, "상승1_236", Red); Else NoPlot(2); 즐거운 하루되세요 > 유정란 님이 쓴 글입니다. > 제목 : 수식 작성 관련 문의 드립니다. > 안녕하세요. 예스트레이더의 선물 관련 수식을 만들어 보고 있습니다. 간단하게 말씀 드려보면, 3분봉 차트상 고점이 나오면 그 고점에서 볼린저밴드 0 시작하고 그후 고점이 있는 봉 저점을 볼밴의 0.236 지점으로 설정하여 1 위치가 표시 되도록 만들어 보고 있습니다. Input : left(3), right(3); var : hh(0), ll(0); var : down1_236(0); var : up1_236(0); // 전고점 감지 if SwingHigh(1,h,Left,right,left+right+1) != -1 Then { hh = h[right]; // a의 고가 // a의 고가(0)와 저가 기준 down1_236 = hh - ((hh - L[right]) * (1-0.236)/0.236); } // 전저점 감지 if SwingLow(1,l,Left,right,left+right+1) != -1 Then { ll = l[right]; // a의 저가 // a의 저가(0)와 고가 기준 up1_236 = ll + ((H[right] - ll) * (1-0.236)/0.236); } // 평행이동 조건으로 플롯 if abs(down1_236 - down1_236[1]) < 0.3 Then Plot1(down1_236, "하락1_236", Magenta); if abs(up1_236 - up1_236[1]) < 0.3 Then Plot2(up1_236, "상승1_236", Red); 여기서 질문이 있습니다. 1. 스크립트 짤때 새로운 변수 만드는것을 트레이딩뷰에서는 아래에 별도로 만들 수 있는데, 예스렝귀지에서는 맨위 변수 설정부터 시작해서 쭉 만들어야 하나요? 각각 별도로 만들면 에러 걸리더라구요. 2. 지금의 스크립트를 적용하면 일목균형표의 스텝 라인 처럼 표시가 됩니다. 그래서 복잡한데, 수직 상승, 하락이 아니라 딱 횡보 즉 평행한 값으로 고정 될때만 차트에 표시되게 만들고 싶습니다. 가능할가요? 3. 일정 범위 안에 들어올때 저 평행한 라인이 그려지면 좋겠습니다. 차트 현재 가격의 1.5 이내로 들어올때 표시되게 할 수 있을가요? 4. 차트상 고점 저점을 인식하게 만드는 방법이 약간 어설프더라구요. 그냥 지속적으로 고저점 인식해서 차트를 쭉 만들어버려서 상승할때 똑같이 상승하고 그러던데, 차트상 전고점 확인되면 그것을 유지하고, 그후 다시 나오는 전고점이 이전 전고점보다 낮으면 안나오거나 혹은 일정 시간 지난 후의 고점을 새로운 고점으로 인식해서 차트 나오게 하고. 이런식으로 전고점 인식도 만들어보고 싶은데 가능할가요? 그럼 잘 부탁드립니다.