커뮤니티

변환 부탁드립니다.

프로필 이미지
주식남
2025-06-09 17:42:23
282
글번호 191537
답변완료
안녕하세요? 아래 트뷰 지표를 나름 변경해 보았습니다. 예스랭귀지에서 에러는 발생하지 않는데, 화면에 아무것도 안나오네요. 제가 만든 스크립트 무시하더라도 최대한 트뷰와 비슷하게 수정부탁드립니다. == 변경 == Input: left(14), right(14), areaOpt(0); Input: showTop(True), showBtm(True); Var: ph(false), pl(false); Var: ph_top(0), ph_btm(0), ph_vol(0); Var: pl_top(0), pl_btm(0), pl_vol(0); Var: i(0); Var: ph_boxID(0), pl_boxID(0), ph_tlID(0), pl_tlID(0), ph_txtID(0), pl_txtID(0); ph = swinghigh(1, High, left, right, 0) != -1; pl = swinglow(1, Low, left, right, 0) != -1; If ph == True and showTop == True then { ph_top = High[right]; If areaOpt == 0 then ph_btm = Max(Close[right], Open[right]); else ph_btm = Low[right]; // 거래량 누적(박스범위 내) ph_vol = 0; For i = right To left + right - 1 { If (Low[i] < ph_top and High[i] > ph_btm) then ph_vol = ph_vol + Volume[i]; } // 기존 오브젝트 삭제 If ph_boxID != 0 then Box_Delete(ph_boxID); If ph_tlID != 0 then TL_Delete(ph_tlID); If ph_txtID != 0 then Text_Delete(ph_txtID); ph_boxID = Box_New( sDate[left + right - 1], sTime[left + right - 1], ph_top, sDate[right], sTime[right], ph_btm ); Box_SetColor(ph_boxID, rgb(246,79,8)); Box_SetFill(ph_boxID, True, 120, True); // 수평선(피벗 구간 전체) ph_tlID = TL_New(sDate[left + right - 1], sTime[left + right - 1], ph_top, sDate[right], sTime[right], ph_top); TL_SetColor(ph_tlID, rgb(246,79,8)); TL_SetSize(ph_tlID, 2); // 거래량 라벨(박스 좌상단에 표시) ph_txtID = Text_New(sDate[left + right - 1], sTime[left + right - 1], ph_top, "V:" + NumToStr(ph_vol, 0)); Text_SetStyle(ph_txtID, 1, rgb(246,79,8)); } If pl == True and showBtm == True then { pl_top = Iff(areaOpt == 0, Min(Close[right], Open[right]), High[right]); pl_btm = Low[right]; pl_vol = 0; For i = right To left + right - 1 { If (Low[i] < pl_top and High[i] > pl_btm) then pl_vol = pl_vol + Volume[i]; } If pl_boxID != 0 then Box_Delete(pl_boxID); If pl_tlID != 0 then TL_Delete(pl_tlID); If pl_txtID != 0 then Text_Delete(pl_txtID); pl_boxID = Box_New( sDate[left + right - 1], sTime[left + right - 1], pl_top, sDate[right], sTime[right], pl_btm ); Box_SetColor(pl_boxID, rgb(10,139,109)); Box_SetFill(pl_boxID, True, 120, True); pl_tlID = TL_New(sDate[left + right - 1], sTime[left + right - 1], pl_btm, sDate[right], sTime[right], pl_btm); TL_SetColor(pl_tlID, rgb(10,139,109)); TL_SetSize(pl_tlID, 2); pl_txtID = Text_New(sDate[left + right - 1], sTime[left + right - 1], pl_btm, "V:" + NumToStr(pl_vol, 0)); Text_SetStyle(pl_txtID, 1, rgb(10,139,109)); } == 트뷰 == //@version=5 indicator("예시" , overlay = true , max_lines_count = 500 , max_labels_count = 500 , max_boxes_count = 500) //------------------------------------------------------------------------------ //Settings //-----------------------------------------------------------------------------{ length = input(14, 'Period') area = input.string('Wick only', 'Swing Range', options = ['Wick only', 'Full Bar']) //Style showTop = input(true, '저항', inline = 'top', group = 'Style') topCss = input(#f64f08, '' , inline = 'top', group = 'Style') topAreaCss = input(#ff52525c, 'Area', inline = 'top', group = 'Style') showBtm = input(true, '지지', inline = 'btm', group = 'Style') btmCss = input(#0a8b6d, '' , inline = 'btm', group = 'Style') btmAreaCss = input(#00897b53, 'Area', inline = 'btm', group = 'Style') labelSize = input.string('Tiny', 'Labels Size', options = ['Tiny', 'Small', 'Normal'], group = 'Style') //-----------------------------------------------------------------------------} //Functions //-----------------------------------------------------------------------------{ n = bar_index get_counts(condition, top, btm)=> var count = 0 var vol = 0. if condition count := 0 vol := 0. else vol += low[length] < top and high[length] > btm ? volume[length] : 0 count += low[length] < top and high[length] > btm ? 1 : 0 [count, vol] set_label(count, vol, x, y, css, lbl_style)=> var label lbl = na var label_size = switch labelSize 'Tiny' => size.tiny 'Small' => size.small 'Normal' => size.normal target = count if ta.crossover(target, 0) lbl := label.new(x, y, str.tostring(vol, format.volume) , style = lbl_style , size = label_size , color = #00000000 , textcolor = css) if target > 0 label.set_text(lbl, str.tostring(vol, format.volume)) set_level(condition, crossed, value, count, vol, css)=> var line lvl = na target = count if condition if target[1] < 0[1] line.delete(lvl[1]) else if not crossed[1] line.set_x2(lvl, n - length) lvl := line.new(n - length, value, n, value , color = na) if not crossed[1] line.set_x2(lvl, n+3) if crossed and not crossed[1] line.set_x2(lvl, n) line.set_style(lvl, line.style_dashed) if target > 0 line.set_color(lvl, css) set_zone(condition, x, top, btm, count, vol, css)=> var box bx = na target = count if ta.crossover(target, 0) bx := box.new(x, top, x + count, btm , border_color = na , bgcolor = css) if target > 0 box.set_right(bx, x + count) //-----------------------------------------------------------------------------} //Global variables //-----------------------------------------------------------------------------{ //Pivot high var float ph_top = na var float ph_btm = na var bool ph_crossed = na var ph_x1 = 0 var box ph_bx = box.new(na,na,na,na , bgcolor = color.new(topAreaCss, 80) , border_color = na) //Pivot low var float pl_top = na var float pl_btm = na var bool pl_crossed = na var pl_x1 = 0 var box pl_bx = box.new(na,na,na,na , bgcolor = color.new(btmAreaCss, 80) , border_color = na) //-----------------------------------------------------------------------------} //Display pivot high levels/blocks //-----------------------------------------------------------------------------{ ph = ta.pivothigh(length, length) //Get ph counts [ph_count, ph_vol] = get_counts(ph, ph_top, ph_btm) //Set ph area and level if ph and showTop ph_top := high[length] ph_btm := switch area 'Wick only' => math.max(close[length], open[length]) 'Full Bar' => low[length] ph_x1 := n - length ph_crossed := false box.set_lefttop(ph_bx, ph_x1, ph_top) box.set_rightbottom(ph_bx, ph_x1, ph_btm) else ph_crossed := close > ph_top ? true : ph_crossed if ph_crossed box.set_right(ph_bx, ph_x1) else box.set_right(ph_bx, n+3) if showTop //Set ph zone set_zone(ph, ph_x1, ph_top, ph_btm, ph_count, ph_vol, topAreaCss) //Set ph level set_level(ph, ph_crossed, ph_top, ph_count, ph_vol, topCss) //Set ph label set_label(ph_count, ph_vol, ph_x1, ph_top, topCss, label.style_label_down) //-----------------------------------------------------------------------------} //Display pivot low levels/blocks //-----------------------------------------------------------------------------{ pl = ta.pivotlow(length, length) //Get pl counts [pl_count, pl_vol] = get_counts(pl, pl_top, pl_btm) //Set pl area and level if pl and showBtm pl_top := switch area 'Wick only' => math.min(close[length], open[length]) 'Full Bar' => high[length] pl_btm := low[length] pl_x1 := n - length pl_crossed := false box.set_lefttop(pl_bx, pl_x1, pl_top) box.set_rightbottom(pl_bx, pl_x1, pl_btm) else pl_crossed := close < pl_btm ? true : pl_crossed if pl_crossed box.set_right(pl_bx, pl_x1) else box.set_right(pl_bx, n+3) if showBtm //Set pl zone set_zone(pl, pl_x1, pl_top, pl_btm, pl_count, pl_vol, btmAreaCss) //Set pl level set_level(pl, pl_crossed, pl_btm, pl_count, pl_vol, btmCss) //Set pl labels set_label(pl_count, pl_vol, pl_x1, pl_btm, btmCss, label.style_label_up) //-----------------------------------------------------------------------------}
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-06-10 20:34:56

안녕하세요 예스스탁입니다. 트레이딩뷰는 추세선을 출력하지만 색상을 지정하지 않다가 이후에 출력하면 그때 보이게 되는데 예스랭귀지는 출력한 추세선을 보이지 않게 색상 지정이 되지 않습니다. 적용하시면 검은색선들이 표시되는데 기본적으로 트레이딩뷰에서는 출력은 하지만 보이지 않는 선이라고 보시면 됩니다. 또한 내용 중 set_zone은 제외했습니다. input : length(14); input : area(0);#0:Wick only, 1:Full Bar input : showTop(true); input : topCss(Red); input : topAreaCss(Salmon); input : showBtm(true); input : btmCss(Green); input : btmAreaCss(DarkGreen); input : labelSize(0);#0:Tiny, 1:Small, 2:Normal; var : n(0); var : ph(false),ph_top(0),ph_btm(0),ph_vol(0),ph_count(0),ph_x1(0),ph_crossed(False); var : pl(false),pl_top(0),pl_btm(0),pl_vol(0),pl_count(0),pl_x1(0),pl_crossed(False); var : ph_xd(0),ph_xt(0),ph_bx(0),pl_xd(0),pl_xt(0),pl_bx(0); n = index; ph = SwingHigh(1,h,length,length,length*2+1) != -1;# ta.pivothigh(length, length) pl = Swinglow(1,l,length,length,length*2+1) != -1;# ta.pivotlow(length, length) if ph == true Then { ph_count = 0; ph_vol = 0 ; } Else { ph_vol = ph_vol + iff(low[length] < ph_top and high[length] > ph_btm , volume[length] , 0); ph_count = ph_count + iff(low[length] < ph_top and high[length] > ph_btm , 1 , 0); } if pl == true Then { pl_count = 0; pl_vol = 0 ; } Else { pl_vol = pl_vol + iff(low[length] < pl_top and high[length] > pl_btm , volume[length] , 0); pl_count = pl_count + iff(low[length] < pl_top and high[length] > pl_btm , 1 , 0); } if ph and showTop then { ph_top = high[length]; ph_btm = iff(area==0,max(close[length], open[length]),low[length]); ph_xd = sDate[length]; ph_xt = sTime[length]; ph_crossed = false; Box_Delete(ph_bx); ph_bx = Box_New(ph_xd,ph_xt,ph_top,ph_xd,ph_xt,ph_btm); Box_SetColor(ph_bx,topAreaCss); Box_SetFill(ph_bx,true); } else { if close > ph_top Then ph_crossed = true; if ph_crossed == true Then Box_Delete(ph_bx); Else Box_SetEnd(ph_bx,NextBarSdate,NextBarStime,ph_btm); } if pl and showBtm Then { pl_top = iff(area == 0, min(close[length], open[length]),high[length]); pl_btm = low[length]; pl_xd = sdate[length]; pl_xt = sTime[length]; pl_crossed = false; Box_Delete(pl_bx); pl_bx = Box_New(pl_xd,pl_xt,pl_top,sDate,sTime,pl_btm); Box_SetColor(pl_bx,btmAreaCss); Box_SetFill(pl_bx,true); } else { if close < pl_btm Then pl_crossed = true; if pl_crossed == true Then Box_SetEnd(pl_bx,pl_xd,pl_xt,pl_btm); Else Box_SetEnd(pl_bx,NextBarSdate,NextBarStime,pl_btm); } var : ph_tx(0),pl_tx(0); var : ph_ln(0),pl_ln(0); if CrossUp(ph_count,0) Then { ph_tx = Text_New(ph_xd,ph_xt,ph_top,NToStr(ph_vol,0)); Text_SetStyle(ph_tx,2,1); Text_SetColor(ph_tx,Red); } if ph_count > 0 Then Text_SetString(ph_tx,NToStr(ph_vol,0)); if ph == true Then { var1 = ph_top; if ph_crossed[1] == False Then TL_SetEnd(ph_ln,ph_xd,ph_xt,var1[1]); ph_ln = TL_new(ph_xd,ph_xt,var1,ph_xd,ph_xt,var1); } Else { if ph_crossed[1] == False Then { TL_SetEnd(ph_ln,sDate,sTime,var1); } if ph_crossed and ph_crossed[1] == False Then { TL_SetEnd(ph_ln,sDate,sTime,var1); TL_SetStyle(ph_ln,3); } if ph_count > 0 Then TL_SetColor(ph_ln, topAreaCss); } if CrossUp(pl_count,0) Then { pl_tx = Text_New(pl_xd,pl_xt,pl_btm,NToStr(pl_vol,0)); Text_SetStyle(pl_tx,2,0); Text_SetColor(pl_tx,Green); } if pl_count > 0 Then Text_SetString(pl_tx,NToStr(pl_vol,0)); if pl == true Then { var2 = pl_btm; if pl_crossed[1] == False Then TL_SetEnd(pl_ln,pl_xd,pl_xt,var2[1]); pl_ln = TL_new(pl_xd,pl_xt,var2,pl_xd,pl_xt,var2); } Else { if pl_crossed[1] == False Then { TL_SetEnd(pl_ln,sDate,sTime,var2); } if pl_crossed and pl_crossed[1] == False Then { TL_SetEnd(pl_ln,sDate,sTime,var2); TL_SetStyle(pl_ln,3); } if pl_count > 0 Then TL_SetColor(pl_ln, btmAreaCss); } 즐거운 하루되세요 > 주식남 님이 쓴 글입니다. > 제목 : 변환 부탁드립니다. > 안녕하세요? 아래 트뷰 지표를 나름 변경해 보았습니다. 예스랭귀지에서 에러는 발생하지 않는데, 화면에 아무것도 안나오네요. 제가 만든 스크립트 무시하더라도 최대한 트뷰와 비슷하게 수정부탁드립니다. == 변경 == Input: left(14), right(14), areaOpt(0); Input: showTop(True), showBtm(True); Var: ph(false), pl(false); Var: ph_top(0), ph_btm(0), ph_vol(0); Var: pl_top(0), pl_btm(0), pl_vol(0); Var: i(0); Var: ph_boxID(0), pl_boxID(0), ph_tlID(0), pl_tlID(0), ph_txtID(0), pl_txtID(0); ph = swinghigh(1, High, left, right, 0) != -1; pl = swinglow(1, Low, left, right, 0) != -1; If ph == True and showTop == True then { ph_top = High[right]; If areaOpt == 0 then ph_btm = Max(Close[right], Open[right]); else ph_btm = Low[right]; // 거래량 누적(박스범위 내) ph_vol = 0; For i = right To left + right - 1 { If (Low[i] < ph_top and High[i] > ph_btm) then ph_vol = ph_vol + Volume[i]; } // 기존 오브젝트 삭제 If ph_boxID != 0 then Box_Delete(ph_boxID); If ph_tlID != 0 then TL_Delete(ph_tlID); If ph_txtID != 0 then Text_Delete(ph_txtID); ph_boxID = Box_New( sDate[left + right - 1], sTime[left + right - 1], ph_top, sDate[right], sTime[right], ph_btm ); Box_SetColor(ph_boxID, rgb(246,79,8)); Box_SetFill(ph_boxID, True, 120, True); // 수평선(피벗 구간 전체) ph_tlID = TL_New(sDate[left + right - 1], sTime[left + right - 1], ph_top, sDate[right], sTime[right], ph_top); TL_SetColor(ph_tlID, rgb(246,79,8)); TL_SetSize(ph_tlID, 2); // 거래량 라벨(박스 좌상단에 표시) ph_txtID = Text_New(sDate[left + right - 1], sTime[left + right - 1], ph_top, "V:" + NumToStr(ph_vol, 0)); Text_SetStyle(ph_txtID, 1, rgb(246,79,8)); } If pl == True and showBtm == True then { pl_top = Iff(areaOpt == 0, Min(Close[right], Open[right]), High[right]); pl_btm = Low[right]; pl_vol = 0; For i = right To left + right - 1 { If (Low[i] < pl_top and High[i] > pl_btm) then pl_vol = pl_vol + Volume[i]; } If pl_boxID != 0 then Box_Delete(pl_boxID); If pl_tlID != 0 then TL_Delete(pl_tlID); If pl_txtID != 0 then Text_Delete(pl_txtID); pl_boxID = Box_New( sDate[left + right - 1], sTime[left + right - 1], pl_top, sDate[right], sTime[right], pl_btm ); Box_SetColor(pl_boxID, rgb(10,139,109)); Box_SetFill(pl_boxID, True, 120, True); pl_tlID = TL_New(sDate[left + right - 1], sTime[left + right - 1], pl_btm, sDate[right], sTime[right], pl_btm); TL_SetColor(pl_tlID, rgb(10,139,109)); TL_SetSize(pl_tlID, 2); pl_txtID = Text_New(sDate[left + right - 1], sTime[left + right - 1], pl_btm, "V:" + NumToStr(pl_vol, 0)); Text_SetStyle(pl_txtID, 1, rgb(10,139,109)); } == 트뷰 == //@version=5 indicator("예시" , overlay = true , max_lines_count = 500 , max_labels_count = 500 , max_boxes_count = 500) //------------------------------------------------------------------------------ //Settings //-----------------------------------------------------------------------------{ length = input(14, 'Period') area = input.string('Wick only', 'Swing Range', options = ['Wick only', 'Full Bar']) //Style showTop = input(true, '저항', inline = 'top', group = 'Style') topCss = input(#f64f08, '' , inline = 'top', group = 'Style') topAreaCss = input(#ff52525c, 'Area', inline = 'top', group = 'Style') showBtm = input(true, '지지', inline = 'btm', group = 'Style') btmCss = input(#0a8b6d, '' , inline = 'btm', group = 'Style') btmAreaCss = input(#00897b53, 'Area', inline = 'btm', group = 'Style') labelSize = input.string('Tiny', 'Labels Size', options = ['Tiny', 'Small', 'Normal'], group = 'Style') //-----------------------------------------------------------------------------} //Functions //-----------------------------------------------------------------------------{ n = bar_index get_counts(condition, top, btm)=> var count = 0 var vol = 0. if condition count := 0 vol := 0. else vol += low[length] < top and high[length] > btm ? volume[length] : 0 count += low[length] < top and high[length] > btm ? 1 : 0 [count, vol] set_label(count, vol, x, y, css, lbl_style)=> var label lbl = na var label_size = switch labelSize 'Tiny' => size.tiny 'Small' => size.small 'Normal' => size.normal target = count if ta.crossover(target, 0) lbl := label.new(x, y, str.tostring(vol, format.volume) , style = lbl_style , size = label_size , color = #00000000 , textcolor = css) if target > 0 label.set_text(lbl, str.tostring(vol, format.volume)) set_level(condition, crossed, value, count, vol, css)=> var line lvl = na target = count if condition if target[1] < 0[1] line.delete(lvl[1]) else if not crossed[1] line.set_x2(lvl, n - length) lvl := line.new(n - length, value, n, value , color = na) if not crossed[1] line.set_x2(lvl, n+3) if crossed and not crossed[1] line.set_x2(lvl, n) line.set_style(lvl, line.style_dashed) if target > 0 line.set_color(lvl, css) set_zone(condition, x, top, btm, count, vol, css)=> var box bx = na target = count if ta.crossover(target, 0) bx := box.new(x, top, x + count, btm , border_color = na , bgcolor = css) if target > 0 box.set_right(bx, x + count) //-----------------------------------------------------------------------------} //Global variables //-----------------------------------------------------------------------------{ //Pivot high var float ph_top = na var float ph_btm = na var bool ph_crossed = na var ph_x1 = 0 var box ph_bx = box.new(na,na,na,na , bgcolor = color.new(topAreaCss, 80) , border_color = na) //Pivot low var float pl_top = na var float pl_btm = na var bool pl_crossed = na var pl_x1 = 0 var box pl_bx = box.new(na,na,na,na , bgcolor = color.new(btmAreaCss, 80) , border_color = na) //-----------------------------------------------------------------------------} //Display pivot high levels/blocks //-----------------------------------------------------------------------------{ ph = ta.pivothigh(length, length) //Get ph counts [ph_count, ph_vol] = get_counts(ph, ph_top, ph_btm) //Set ph area and level if ph and showTop ph_top := high[length] ph_btm := switch area 'Wick only' => math.max(close[length], open[length]) 'Full Bar' => low[length] ph_x1 := n - length ph_crossed := false box.set_lefttop(ph_bx, ph_x1, ph_top) box.set_rightbottom(ph_bx, ph_x1, ph_btm) else ph_crossed := close > ph_top ? true : ph_crossed if ph_crossed box.set_right(ph_bx, ph_x1) else box.set_right(ph_bx, n+3) if showTop //Set ph zone set_zone(ph, ph_x1, ph_top, ph_btm, ph_count, ph_vol, topAreaCss) //Set ph level set_level(ph, ph_crossed, ph_top, ph_count, ph_vol, topCss) //Set ph label set_label(ph_count, ph_vol, ph_x1, ph_top, topCss, label.style_label_down) //-----------------------------------------------------------------------------} //Display pivot low levels/blocks //-----------------------------------------------------------------------------{ pl = ta.pivotlow(length, length) //Get pl counts [pl_count, pl_vol] = get_counts(pl, pl_top, pl_btm) //Set pl area and level if pl and showBtm pl_top := switch area 'Wick only' => math.min(close[length], open[length]) 'Full Bar' => high[length] pl_btm := low[length] pl_x1 := n - length pl_crossed := false box.set_lefttop(pl_bx, pl_x1, pl_top) box.set_rightbottom(pl_bx, pl_x1, pl_btm) else pl_crossed := close < pl_btm ? true : pl_crossed if pl_crossed box.set_right(pl_bx, pl_x1) else box.set_right(pl_bx, n+3) if showBtm //Set pl zone set_zone(pl, pl_x1, pl_top, pl_btm, pl_count, pl_vol, btmAreaCss) //Set pl level set_level(pl, pl_crossed, pl_btm, pl_count, pl_vol, btmCss) //Set pl labels set_label(pl_count, pl_vol, pl_x1, pl_btm, btmCss, label.style_label_up) //-----------------------------------------------------------------------------}