답변완료
연장 4개 좀 부탁 드림니다.
ㅇ 아래 그림 처럼 4개선 좀 요청 드림니다. 기준 : 08시 이후 생긴 고저점 사용 24시 까지만 연장선 사용 이전 차트 사용 안함 당일만 사용 A선 : 상단수평선 07시 ~ 24시 까지만 표시 오른쪽연장 B선: 하단 수평선 07시 ~ 24시 까지만 표시 오른쪽연장 D선 : 상단 수평선 다음 상단 수평선 연결 하는 수직선 07시 ~24시 까지만 오른쪽연장 C선 : 하단 수평선 다음 하단 수평선 연결 하는 수직선 07시 ~ 24시 까지만 오른쪽연장 ## 아래 수식 ##==================================================================================================##==================================================================================================Input : length(10),종가사용여부(0),굵기(0),텍스트크기(12);Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""), TL(0),Text1(0),TL1(0),TL2(0),TL11(0),TL21(0);Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTimevar : TL3(0),TL4(0),TX3(0),TX4(0);#==========================================#HH = IFF(종가사용여부==1,C,H);LL = IFF(종가사용여부==1,C,L);If Index == 0 Then{ 고[1,1] = HH; 저[1,1] = LL;}Condition1 = Highest(HH,length) == HH and 최종고가 <> HH;Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL;처리구분 = "";If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생{ If 최종꼭지점 == "저점" Then { If 저[1,1] > LL Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If 고[1,1] < HH Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } }Else If Condition1 Then 처리구분 = "고점처리";Else If Condition2 Then 처리구분 = "저점처리";#==========================================#If 처리구분 == "고점처리" Then{ 최종고가 = HH; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); TL1 = TL_New(고[1,3],고[1,4],고[1,1],NextBarSdate,NextBarStime,고[1,1]); // TL11 = TL1[1]; TL_SetSize(TL,굵기); TL_SetColor(TL,Red); TL_SetSize(TL1,굵기); TL_SetColor(TL1,Red); TL_SetSize(TL11,굵기); TL_SetColor(TL11,Red); // Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2)); Text_SetStyle(Text1, 2, 1); Text_SetSize(text1,텍스트크기); // TL3 = TL_New(저[1,3],저[1,4],(고[1,1]+저[1,1])/2,고[1,3],고[1,4],(고[1,1]+저[1,1])/2); TL_SetSize(TL3,5); TL_SetColor(TL3,Red); Condition3 = False; /* if 고[1,1] > 고[2,1] Then { TX3 = Text_New(고[1,3],고[1,4],고[1,1],"상돌파"+NewLine); Text_SetStyle(TX3,2,1); Condition3 = true; }*/ } Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL,고[1,3],고[1,4],고[1,1]); TL_SetEnd(TL11,고[1,3],고[1,4],고[2,1]); TL_SetBegin(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); TL_SetBegin(TL3,저[1,3],저[1,4],(고[1,1]+저[1,1])/2); TL_SetEnd(TL3,고[1,3],고[1,4],(고[1,1]+저[1,1])/2); if Condition3 == False Then { if 고[1,1] > 고[2,1] Then { // TX3 = Text_New(고[1,3],고[1,4],고[1,1],"상돌파"+NewLine);// Text_SetStyle(TX3,2,1);// Condition3 = true; } } Else { Text_SetLocation(TX3,고[1,3],고[1,4],고[1,1]); } } 최종꼭지점 = "고점";}#==========================================#If 처리구분 == "저점처리" Then{ 최종저가 = LL; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL2 = TL_New(저[1,3],저[1,4],저[1,1],NextBarSdate,NextBarStime,저[1,1]); // TL21 = TL2[1]; TL_SetEnd(TL21,저[2,3],저[2,4],저[2,1]); TL_SetSize(TL,굵기); TL_SetColor(TL,Blue); TL_SetSize(TL2,굵기); TL_SetColor(TL2,Blue); TL_SetSize(TL21,굵기); TL_SetColor(TL21,Blue); // Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); Text_SetSize(text1,텍스트크기); // TL4 = TL_New(고[1,3],고[1,4],(고[1,1]+저[1,1])/2,저[1,3],저[1,4],(고[1,1]+저[1,1])/2); TL_SetSize(TL4,5); TL_SetColor(TL4,Blue); Condition4 = False; if 저[1,1] < 저[2,1] Then { // TX4 = Text_New(저[1,3],저[1,4],저[1,1],NewLine+"하돌파");// Text_SetStyle(TX4,2,0);// Condition4 = true; } } Else If 저[1,1] > LL then { 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL_SetEnd(TL,저[1,3],저[1,4],저[1,1]); TL_SetEnd(TL21,저[1,3],저[1,4],저[2,1]); TL_SetBegin(TL2,저[1,3],저[1,4],저[1,1]); Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]); //Text_SetString(Text1,NumToStr(저[1,1],2)); TL_SetBegin(TL4,고[1,3],고[1,4],(고[1,1]+저[1,1])/2); TL_SetEnd(TL4,저[1,3],저[1,4],(고[1,1]+저[1,1])/2); if Condition4 == False Then { if 저[1,1] < 저[2,1] Then { // TX4 = Text_New(저[1,3],저[1,4],저[1,1],NewLine+"하돌파");// Text_SetStyle(TX4,2,0);// Condition4 = true; } } Else { Text_SetLocation(TX4,저[1,3],저[1,4],저[1,1]); } } 최종꼭지점 = "저점";}TL_SetEnd(TL1,NextBarSdate,NextBarStime,고[1,1]);TL_SetEnd(TL2,NextBarSdate,NextBarStime,저[1,1]);
답변완료
수식 부탁드립니다.
수식 변환 부탁드립니다. 미리 감사 드립니다.//@version=6indicator("Breakout Boxes [ChartPrime]", overlay = true, max_boxes_count = 500, max_labels_count = 500, calc_bars_count = 5000)type pivot float val int indextype Box box body box sell box buyvar Highs = pivot.new()var Lows = pivot.new()var upperBox = Box.new()var lowerBox = Box.new()// --------------------------------------------------------------------------------------------------------------------}// 📌 𝙐𝙎𝙀𝙍 𝙄𝙉𝙋𝙐𝙏𝙎// --------------------------------------------------------------------------------------------------------------------{pivotLen = input.int(5, "Pivot Detection Length")boxWidth1 = input.int(5, "Upper Box Width", inline = "up")/10, boxUpCol = input.color(#ce1c7b, "", inline = "up")boxWidth2 = input.int(5, "Lower Box Width", inline = "lw")/10, boxDnCol = input.color(#1ed87e, "", inline = "lw")// --------------------------------------------------------------------------------------------------------------------}// 📌 𝙄𝙉𝘿𝙄𝘾𝘼𝙏𝙊𝙍 𝘾𝘼𝙇𝘾𝙐𝙇𝘼𝙏𝙄𝙊𝙉𝙎// --------------------------------------------------------------------------------------------------------------------{ph = ta.pivothigh(pivotLen, pivotLen)pl = ta.pivotlow(pivotLen, pivotLen)aTr = ta.atr(200)atr0 = aTr * 0.2atr1 = aTr * boxWidth1atr2 = aTr * boxWidth2// Upper Box Detectionif not na(ph) if math.abs(Highs.val-ph) < atr0 if upperBox.body.get_right() > bar_index-pivotLen upperBox.buy.set_right(upperBox.body.get_left()) upperBox.buy.set_border_color(color(na)) upperBox.sell.set_right(upperBox.body.get_left()) upperBox.sell.set_border_color(color(na)) upperBox.body.set_right(upperBox.body.get_left()) upperBox.body.set_border_color(color(na)) upperBox.body := box.new(Highs.index, Highs.val+atr1, bar_index, Highs.val, bgcolor = color(na), border_color = boxUpCol, text_halign = text.align_right, border_width = 2) upperBox.buy := box.new(Highs.index, math.avg(Highs.val+atr1, Highs.val), Highs.index, Highs.val, border_color = boxUpCol, bgcolor = color.new(boxUpCol, 90), text_halign = text.align_left) upperBox.sell := box.new(Highs.index, math.avg(Highs.val+atr1, Highs.val), Highs.index, Highs.val+atr1, border_color = boxUpCol, bgcolor = color.new(boxUpCol, 90), text_halign = text.align_left) Highs.val := ph Highs.index :=bar_index[pivotLen]// Lower Box Detectionif not na(pl) if math.abs(Lows.val-pl) < atr0 if lowerBox.body.get_right() > bar_index-pivotLen lowerBox.buy.set_right(lowerBox.body.get_left()) lowerBox.buy.set_border_color(color(na)) lowerBox.sell.set_right(lowerBox.body.get_left()) lowerBox.sell.set_border_color(color(na)) lowerBox.body.set_right(lowerBox.body.get_left()) lowerBox.body.set_border_color(color(na)) lowerBox.body := box.new(Lows.index, Lows.val, bar_index, Lows.val-atr2, bgcolor = color(na), border_color = boxDnCol, text_halign = text.align_right, border_width = 2) lowerBox.buy := box.new(Lows.index, math.avg(Lows.val-atr2, Lows.val), Lows.index, Lows.val-atr2, border_color = boxDnCol, bgcolor = color.new(boxDnCol, 90), text_halign = text.align_left) lowerBox.sell := box.new(Lows.index, math.avg(Lows.val-atr2, Lows.val), Lows.index, Lows.val, border_color = boxDnCol, bgcolor = color.new(boxDnCol, 90), text_halign = text.align_left) Lows.val := pl Lows.index :=bar_index[pivotLen]// --------------------------------------------------------------------------------------------------------------------}// 📌 𝙑𝙄𝙎𝙐𝘼𝙇𝙄𝙕𝘼𝙏𝙄𝙊𝙉// --------------------------------------------------------------------------------------------------------------------{// Upeer Boxif not na(upperBox.body) Buy = 0. Sell = 0. upperBox.body.set_right(bar_index) for i = 0 to bar_index - (upperBox.body.get_left() - 5) if close[i] > open[i] Buy += volume[i] else Sell += volume[i] tot = Buy + Sell upperBox.body.set_text("Total " + str.tostring(tot, format.volume)) size = int((upperBox.body.get_right() - upperBox.body.get_left())) mid = math.avg(upperBox.body.get_bottom(), upperBox.body.get_top()) upperBox.buy.set_right(upperBox.body.get_left()+int(size*(Buy/tot))) upperBox.buy.set_text("+Volume " + str.tostring(Buy/tot*100, format.percent) ) upperBox.sell.set_right(upperBox.body.get_left()+int(size*(Sell/tot))) upperBox.sell.set_text("-Volume " + str.tostring(Sell/tot*100, format.percent) )// Lower Boxif not na(lowerBox.body) Buy = 0. Sell = 0. lowerBox.body.set_right(bar_index) for i = 0 to bar_index - (lowerBox.body.get_left() - 5) if close[i] > open[i] Buy += volume[i] else Sell += volume[i] tot = Buy + Sell lowerBox.body.set_text("Total " + str.tostring(tot, format.volume)) size = int((lowerBox.body.get_right() - lowerBox.body.get_left())) mid = math.avg(lowerBox.body.get_bottom(), lowerBox.body.get_top()) lowerBox.buy.set_right(lowerBox.body.get_left()+int(size*(Buy/tot))) lowerBox.buy.set_text("+Volume " + str.tostring(Buy/tot*100, format.percent) ) lowerBox.sell.set_right(lowerBox.body.get_left()+int(size*(Sell/tot))) lowerBox.sell.set_text("-Volume " + str.tostring(Sell/tot*100, format.percent) )// Breakout signalsif barstate.isconfirmed if ta.crossover(close, upperBox.body.get_top()) upperBox := Box.new(na, na, na) label.new(bar_index, low-aTr, "⯁\nBreakUp", textcolor = boxUpCol, style = label.style_label_up, color = color.new(boxUpCol, 80)) if ta.crossunder(close, lowerBox.body.get_bottom()) lowerBox := Box.new(na, na, na) label.new(bar_index, high+aTr, "BreakDn\n⯁", textcolor = boxDnCol, style = label.style_label_down, color = color.new(boxDnCol, 80))// --------------------------------------------------------------------------------------------------------------------}