커뮤니티

문의 드립니다.

프로필 이미지
cooparoo
2024-06-19 02:14:34
806
글번호 180760
답변완료
아래 파인스크립트 지표를 예스로 변환 했는데 값이 다르게 나오는데 왜 그런지 모르겠네요. 혹시 체크해 보시고 잘못 변환한 부분이 있는지 체크 부탁드립니다. plot만 구현하고 히스토그램등 필요없는건 뺐습니다. //@version=5 // Original concept by David Bostian, with variations featured in "Bollinger on Bollinger Bands". indicator("Intraday Intensity Modes", 'Intensity') toolTipA = 'III (Individual):₩nOsc Length 1₩n[ ] Cumulative (Off)₩n[ ] Normalized (Off)₩n[ ] Inverse Volu' + 'me (Off)₩n[ ] Show Levels (Off)₩n₩n' toolTipB = 'II (Cumulative):₩nOsc Length 1₩n[&#10003;] Cumulative (On)₩n[ ] Normalized (Off)₩n[ ] Inverse Volume ' + '(Off)₩n[ ] Show Levels (Off)₩n₩n' toolTipC = 'II% (Oscillator):₩nOsc Length 21₩n[ ] Cumulative (Off)₩n[&#10003;] Normalized (On)₩n[ ] Inverse Volume' + ' (Off)₩n[&#10003;] Show Levels (On)' toolTipD = 'Enables examination of intensity per bar instead of per day, this is a departure from the original ' + 'concept. Whenever this setting is enabled the indicator should be regarded as operating in an experimental mode.' toolTipV = '[ ] Inverse Volume (Off):₩n₩n (2 * close - high - low) * volume₩n ────────────────₩n ' + ' high - low₩n₩n₩n[&#10003;] Inverse Volume (On):₩n₩n 2 * close - high - low₩n ───────────' + '₩n (high - low) * volume' i_length = input.int (21, 'Osc Length', minval = 1, tooltip = toolTipA + toolTipB + toolTipC) i_cumltv = input.bool (false, 'Cumulative') i_normal = input.bool (true, 'Normalized') i_candle = input.bool (false, 'Intrabar', tooltip = toolTipD) i_invert = input.bool (false, 'Inverse Volume', tooltip = toolTipV) i_colrUp = input.color(#00BCD4, 'Colors For Up', inline = 'a') i_colrDn = input.color(#E040FB, 'Down', inline = 'a') i_styles = input.string('Columns', 'Style & Width', options = ['Columns', 'Histogram', 'Line'], inline = 'b') i_widths = input.int (1, '', minval = 1, inline = 'b') i_shoLvl = input.bool (true, '', inline = 'c') i_levelH = input.int (25, 'Show Levels Above', inline = 'c') i_levelL = input.int (-25, 'Below', inline = 'c') id_cum(source) => // perform cumulative sum once per day when using realtime intraday source values var carrySum = float(na) var dailySum = float(na) if not timeframe.isintraday carrySum := ta.cum(nz(source)) else dailySum := timeframe.change('D') ? nz(carrySum) : nz(dailySum) carrySum := nz(dailySum) + nz(source) altSum(source, length) => normal = math.sum(nz(source), length) // treat na as 0 and return sum var idRangeH = float(na) var idRangeL = float(na) var idVolume = float(na) startDay = timeframe.change('D') idRangeH := not timeframe.isintraday or startDay ? high : high > nz(idRangeH) ? high : idRangeH // intraday high idRangeL := not timeframe.isintraday or startDay ? low : low < nz(idRangeL, 10e99) ? low : idRangeL // intraday low idVolume := not timeframe.isintraday or startDay ? volume : nz(idVolume) + volume // intraday volume idUseVol = i_invert ? 1 / idVolume : idVolume iiiValue = nz(((2 * close - idRangeH - idRangeL) / (idRangeH - idRangeL)) * idUseVol) // intraday intensity use_iii = i_invert ? (2 * close - high - low) / ((high - low) * volume) : ((2 * close - high - low) / (high - low)) * volume usePrcnt = i_normal ? 100 : 1 iiSource = usePrcnt * altSum(i_cumltv ? i_candle ? ta.cum(nz(use_iii)) : id_cum(iiiValue) : i_candle ? nz(use_iii) : iiiValue, i_length) / (i_normal ? altSum(i_cumltv ? i_candle ? ta.cum(volume) : id_cum(idVolume) : i_candle ? volume : idVolume, i_length) : 1) colrSign = altSum(i_candle ? use_iii : iiiValue, i_length) / (i_normal ? i_candle ? volume : altSum(idVolume, i_length) : 1) pltStyle = i_styles == 'Columns' ? plot.style_columns : i_styles == 'Histogram' ? plot.style_histogram : plot.style_line plot(iiSource, 'III, II, or II%', math.sign(colrSign) != -1 ? i_colrUp : i_colrDn, i_widths, pltStyle) plot(startDay ? 1 : 0, 'startDay', #ffff00, display = display.data_window) plot(close, 'close', #ffff00, display = display.data_window) plot(high, 'high', #ffff00, display = display.data_window) plot(low, 'low', #ffff00, display = display.data_window) plot(volume, 'volume', #ffff00, display = display.data_window) plot(idRangeH, 'idRangeH', #ffff00, display = display.data_window) plot(idRangeL, 'idRangeL', #ffff00, display = display.data_window) plot(idVolume, 'idVolume', #ffff00, display = display.data_window) plot(iiiValue, 'iiiValue', #ffff00, display = display.data_window) plot(iiSource, 'iiSource', #ffff00, display = display.data_window) hline(i_shoLvl ? i_levelH : na) hline(i_shoLvl ? i_levelL : na) 변환 Input: OscLength(21); Input: Cumulative(False); Input: Normalized(True); Input: Intrabar(False); Input: InverseVolume(False); Input: UpColor(Blue), DownColor(Red); Input: Width(1); Input: ShowLevels(True); Input: LevelHigh(25), LevelLow(-25); Vars: CarrySum(0), DailySum(0), StartDay(False); Vars: IDRangeH(0), IDRangeL(0), IDVolume(0), IDUseVol(0), IIIValue(0); Vars: UseIII(0), UsePrcnt(1), IISource(0), ColrSign(0); Vars: LineColor(Blue); Vars: i(0), SumCarrySum(0), SumIDVolume(0), SumDailySum(0); // 데이터 초기화 if Date <> Date[1] then begin StartDay = True; CarrySum = 0; DailySum = 0; IDRangeH = High; IDRangeL = Low; IDVolume = Volume; end else begin StartDay = False; IDRangeH = MaxList(IDRangeH, High); IDRangeL = MinList(IDRangeL, Low); IDVolume = IDVolume + Volume; end; // IDUseVol 값 설정 if InverseVolume then IDUseVol = 1 / IDVolume; else IDUseVol = IDVolume; IIIValue = ((2 * Close - IDRangeH - IDRangeL) / (IDRangeH - IDRangeL)) * IDUseVol; if Cumulative then begin CarrySum = CarrySum + IIIValue; DailySum = CarrySum; end else begin DailySum = IIIValue; end; UseIII = DailySum; // 데이터 합산 변수 초기화 SumCarrySum = 0; SumIDVolume = 0; SumDailySum = 0; // 데이터 합산 루프 for i = 0 to OscLength - 1 begin SumCarrySum = SumCarrySum + IIIValue[i]; SumIDVolume = SumIDVolume + IDVolume[i]; SumDailySum = SumDailySum + DailySum[i]; end; // 데이터 스케일 조정 및 백분율 변환 if Cumulative then begin IISource = 100 * (SumCarrySum / SumIDVolume); end else begin IISource = 100 * (SumDailySum / SumIDVolume); end; // ColrSign 계산 if Normalized then ColrSign = 100 * (SumDailySum / SumIDVolume); else ColrSign = SumDailySum / SumIDVolume; // LineColor 설정 if ColrSign >= 0 then LineColor = UpColor; else LineColor = DownColor; Plot1(IISource, "III, II, or II%", LineColor, Width); if ShowLevels then begin Plot2(LevelHigh, "LevelHigh"); Plot3(LevelLow, "LevelLow"); end;
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-06-19 16:55:56

안녕하세요 예스스탁입니다. 올려주신 수식과 트레이딩뷰 수식을 비교해 살펴보았지만 작성하신 변환식에 문제가 없어 보입니다. 분봉에서 값이 조금씩 차이가 있는데 일부 데이터의 차이때문에 발생하는 문제인지 원인을 잘 모르겠습니다. 도움을 드리지 못해 죄송합니다. 즐거운 하루되세요 > cooparoo 님이 쓴 글입니다. > 제목 : 문의 드립니다. > 아래 파인스크립트 지표를 예스로 변환 했는데 값이 다르게 나오는데 왜 그런지 모르겠네요. 혹시 체크해 보시고 잘못 변환한 부분이 있는지 체크 부탁드립니다. plot만 구현하고 히스토그램등 필요없는건 뺐습니다. //@version=5 // Original concept by David Bostian, with variations featured in "Bollinger on Bollinger Bands". indicator("Intraday Intensity Modes", 'Intensity') toolTipA = 'III (Individual):₩nOsc Length 1₩n[ ] Cumulative (Off)₩n[ ] Normalized (Off)₩n[ ] Inverse Volu' + 'me (Off)₩n[ ] Show Levels (Off)₩n₩n' toolTipB = 'II (Cumulative):₩nOsc Length 1₩n[&#10003;] Cumulative (On)₩n[ ] Normalized (Off)₩n[ ] Inverse Volume ' + '(Off)₩n[ ] Show Levels (Off)₩n₩n' toolTipC = 'II% (Oscillator):₩nOsc Length 21₩n[ ] Cumulative (Off)₩n[&#10003;] Normalized (On)₩n[ ] Inverse Volume' + ' (Off)₩n[&#10003;] Show Levels (On)' toolTipD = 'Enables examination of intensity per bar instead of per day, this is a departure from the original ' + 'concept. Whenever this setting is enabled the indicator should be regarded as operating in an experimental mode.' toolTipV = '[ ] Inverse Volume (Off):₩n₩n (2 * close - high - low) * volume₩n ────────────────₩n ' + ' high - low₩n₩n₩n[&#10003;] Inverse Volume (On):₩n₩n 2 * close - high - low₩n ───────────' + '₩n (high - low) * volume' i_length = input.int (21, 'Osc Length', minval = 1, tooltip = toolTipA + toolTipB + toolTipC) i_cumltv = input.bool (false, 'Cumulative') i_normal = input.bool (true, 'Normalized') i_candle = input.bool (false, 'Intrabar', tooltip = toolTipD) i_invert = input.bool (false, 'Inverse Volume', tooltip = toolTipV) i_colrUp = input.color(#00BCD4, 'Colors For Up', inline = 'a') i_colrDn = input.color(#E040FB, 'Down', inline = 'a') i_styles = input.string('Columns', 'Style & Width', options = ['Columns', 'Histogram', 'Line'], inline = 'b') i_widths = input.int (1, '', minval = 1, inline = 'b') i_shoLvl = input.bool (true, '', inline = 'c') i_levelH = input.int (25, 'Show Levels Above', inline = 'c') i_levelL = input.int (-25, 'Below', inline = 'c') id_cum(source) => // perform cumulative sum once per day when using realtime intraday source values var carrySum = float(na) var dailySum = float(na) if not timeframe.isintraday carrySum := ta.cum(nz(source)) else dailySum := timeframe.change('D') ? nz(carrySum) : nz(dailySum) carrySum := nz(dailySum) + nz(source) altSum(source, length) => normal = math.sum(nz(source), length) // treat na as 0 and return sum var idRangeH = float(na) var idRangeL = float(na) var idVolume = float(na) startDay = timeframe.change('D') idRangeH := not timeframe.isintraday or startDay ? high : high > nz(idRangeH) ? high : idRangeH // intraday high idRangeL := not timeframe.isintraday or startDay ? low : low < nz(idRangeL, 10e99) ? low : idRangeL // intraday low idVolume := not timeframe.isintraday or startDay ? volume : nz(idVolume) + volume // intraday volume idUseVol = i_invert ? 1 / idVolume : idVolume iiiValue = nz(((2 * close - idRangeH - idRangeL) / (idRangeH - idRangeL)) * idUseVol) // intraday intensity use_iii = i_invert ? (2 * close - high - low) / ((high - low) * volume) : ((2 * close - high - low) / (high - low)) * volume usePrcnt = i_normal ? 100 : 1 iiSource = usePrcnt * altSum(i_cumltv ? i_candle ? ta.cum(nz(use_iii)) : id_cum(iiiValue) : i_candle ? nz(use_iii) : iiiValue, i_length) / (i_normal ? altSum(i_cumltv ? i_candle ? ta.cum(volume) : id_cum(idVolume) : i_candle ? volume : idVolume, i_length) : 1) colrSign = altSum(i_candle ? use_iii : iiiValue, i_length) / (i_normal ? i_candle ? volume : altSum(idVolume, i_length) : 1) pltStyle = i_styles == 'Columns' ? plot.style_columns : i_styles == 'Histogram' ? plot.style_histogram : plot.style_line plot(iiSource, 'III, II, or II%', math.sign(colrSign) != -1 ? i_colrUp : i_colrDn, i_widths, pltStyle) plot(startDay ? 1 : 0, 'startDay', #ffff00, display = display.data_window) plot(close, 'close', #ffff00, display = display.data_window) plot(high, 'high', #ffff00, display = display.data_window) plot(low, 'low', #ffff00, display = display.data_window) plot(volume, 'volume', #ffff00, display = display.data_window) plot(idRangeH, 'idRangeH', #ffff00, display = display.data_window) plot(idRangeL, 'idRangeL', #ffff00, display = display.data_window) plot(idVolume, 'idVolume', #ffff00, display = display.data_window) plot(iiiValue, 'iiiValue', #ffff00, display = display.data_window) plot(iiSource, 'iiSource', #ffff00, display = display.data_window) hline(i_shoLvl ? i_levelH : na) hline(i_shoLvl ? i_levelL : na) 변환 Input: OscLength(21); Input: Cumulative(False); Input: Normalized(True); Input: Intrabar(False); Input: InverseVolume(False); Input: UpColor(Blue), DownColor(Red); Input: Width(1); Input: ShowLevels(True); Input: LevelHigh(25), LevelLow(-25); Vars: CarrySum(0), DailySum(0), StartDay(False); Vars: IDRangeH(0), IDRangeL(0), IDVolume(0), IDUseVol(0), IIIValue(0); Vars: UseIII(0), UsePrcnt(1), IISource(0), ColrSign(0); Vars: LineColor(Blue); Vars: i(0), SumCarrySum(0), SumIDVolume(0), SumDailySum(0); // 데이터 초기화 if Date <> Date[1] then begin StartDay = True; CarrySum = 0; DailySum = 0; IDRangeH = High; IDRangeL = Low; IDVolume = Volume; end else begin StartDay = False; IDRangeH = MaxList(IDRangeH, High); IDRangeL = MinList(IDRangeL, Low); IDVolume = IDVolume + Volume; end; // IDUseVol 값 설정 if InverseVolume then IDUseVol = 1 / IDVolume; else IDUseVol = IDVolume; IIIValue = ((2 * Close - IDRangeH - IDRangeL) / (IDRangeH - IDRangeL)) * IDUseVol; if Cumulative then begin CarrySum = CarrySum + IIIValue; DailySum = CarrySum; end else begin DailySum = IIIValue; end; UseIII = DailySum; // 데이터 합산 변수 초기화 SumCarrySum = 0; SumIDVolume = 0; SumDailySum = 0; // 데이터 합산 루프 for i = 0 to OscLength - 1 begin SumCarrySum = SumCarrySum + IIIValue[i]; SumIDVolume = SumIDVolume + IDVolume[i]; SumDailySum = SumDailySum + DailySum[i]; end; // 데이터 스케일 조정 및 백분율 변환 if Cumulative then begin IISource = 100 * (SumCarrySum / SumIDVolume); end else begin IISource = 100 * (SumDailySum / SumIDVolume); end; // ColrSign 계산 if Normalized then ColrSign = 100 * (SumDailySum / SumIDVolume); else ColrSign = SumDailySum / SumIDVolume; // LineColor 설정 if ColrSign >= 0 then LineColor = UpColor; else LineColor = DownColor; Plot1(IISource, "III, II, or II%", LineColor, Width); if ShowLevels then begin Plot2(LevelHigh, "LevelHigh"); Plot3(LevelLow, "LevelLow"); end;