মাল্টিপল মুভিং এভারেজ ডায়নামিক ট্রেন্ড স্ট্র্যাটেজি (Multiple Moving Average Dynamic Trend Strategy) হল একটি পরিমাণগত ট্রেডিং কৌশল যা একাধিক মুভিং এভারেজ সূচক ব্যবহার করে ট্রেন্ডের দিকনির্দেশনা নির্ধারণ করে এবং স্টপ লিনের অবস্থানকে গতিশীলভাবে সামঞ্জস্য করে। এই কৌশলটি বিভিন্ন ধরণের মুভিং এভারেজের সমন্বয় করে, যা বাজারের প্রবণতা আরও সম্পূর্ণ এবং সঠিকভাবে নির্ধারণ করতে পারে, উচ্চ বিজয়ী ব্যবসায়ের জন্য।
এই কৌশলটি মূলত কাস্টম ফাংশনগুলির মাধ্যমে 8 টি বিভিন্ন ধরণের চলমান গড়কে বাস্তবায়িত করে, যার মধ্যে রয়েছে সরল চলমান গড় (এসএমএ), সূচকীয় চলমান গড় (ইএমএ), ভারযুক্ত চলমান গড় (ডাব্লুএমএ), ত্রিভুজীয় চলমান গড় (টিএমএ), পরিবর্তনশীল চলমান গড় (ভিডিওয়াইএ), ওয়াইল্ডের চলমান গড় (ডাব্লুএমএ), শূন্য-বিরতিযুক্ত চলমান গড় (জেডএলইএমএ) এবং প্রকৃত শক্তির সূচক (টিএসএফ) । কৌশলটি ব্যবহারকারীদের এই আটটি চলমান গড়ের মধ্যে একটিকে মূল বিচার হিসাবে বেছে নিতে দেয়।
কৌশলটি প্রথমে নির্বাচিত প্রকারের চলমান গড় গণনা করে, তারপরে সেট শতাংশ প্যারামিটারগুলির উপর ভিত্তি করে গতিশীলভাবে ট্রেলার এবং ট্রেলার অবস্থান গণনা করে। দামটি যখন ট্রেলার ব্রেক আপ করে তখন এটি একটি কেনার সংকেত এবং যখন এটি ট্রেলার ব্রেক আপ করে তখন এটি একটি বিক্রয় সংকেত। তদ্ব্যতীত, কৌশলটি চলমান গড় এবং দামের ক্রসগুলিকে একটি সহায়ক বিচার সংকেত হিসাবে অনুসরণ করে।
গণনা করার সময়, কৌশলটি একই সাথে বাজার প্রবণতার দিকটি বিচার করে, যার ফলে গতিশীলভাবে ট্র্যাকের অবস্থানকে সামঞ্জস্য করে। বিশেষত, যখন বাউন্স ট্রেন্ড হিসাবে বিচার করা হয়, তখন দাম বাড়ার সাথে সাথে ডাউন ট্র্যাক লাইন আপগ্রেড হয়, যাতে স্টপ লস লাইনটি সর্বোত্তমভাবে দাম বাড়ার ট্র্যাক করতে পারে; যখন ডাউন ট্রেন্ড হিসাবে বিচার করা হয়, তখন আপ ট্র্যাক লাইনটি দামের পতনের সাথে সাথে স্টপ লস পয়েন্টটি হ্রাস করে ক্ষতি হ্রাস করতে পারে।
সমাধানঃ
এই কৌশলটি আরও উন্নত করার জন্য অনেক জায়গা রয়েছেঃ
মাল্টিপল মুভিং এভারেজ ডায়নামিক ট্রেন্ডিং কৌশলটি একাধিক মুভিং এভারেজ সূচকগুলির সংমিশ্রণ দ্বারা বাজারের প্রবণতা নির্ধারণ করে এবং দামের ব্রেকিং সিগন্যালের সাথে ট্রেডিং নির্দেশিকা জারি করে, এবং গতিশীলভাবে স্টপ লোনের অবস্থানকে সামঞ্জস্য করে, যাতে দক্ষ মুনাফা অর্জন করা যায়। এই কৌশলটি সফলভাবে প্রবণতা অনুসরণ, ব্রেকিং ট্রেডিং এবং গতিশীল স্টপ লস তিনটি মূলধারার পরিমাণগত কৌশলগত চিন্তাভাবনা, স্থিতিশীলতা এবং লাভের ক্ষমতাকে একত্রিত করে। প্যারামিটার অপ্টিমাইজেশন, প্যাটার্ন সনাক্তকরণ এবং অন্যান্য প্রযুক্তির প্রবর্তনের সাথে সাথে কৌশলটির কার্যকারিতা আরও বাড়ানোর জায়গা রয়েছে, এটি একটি উচ্চমানের পরিমাণগত কৌশল যা মূল গবেষণা এবং প্রয়োগের জন্য উপযুক্ত।
/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic
//created by: @Anil_Ozeksi
//developer: ANIL ÖZEKŞİ
//author: @kivancozbilgic
strategy("Optimized Trend Tracker","OTTEx", overlay=true)
src = input(close, title="Source")
length=input(2, "OTT Period", minval=1)
percent=input(1.4, "OTT Percent", type=input.float, step=0.1, minval=0)
showsupport = input(title="Show Support Line?", type=input.bool, defval=true)
showsignalsk = input(title="Show Support Line Crossing Signals?", type=input.bool, defval=true)
showsignalsc = input(title="Show Price/OTT Crossing Signals?", type=input.bool, defval=false)
highlight = input(title="Show OTT Color Changes?", type=input.bool, defval=false)
showsignalsr = input(title="Show OTT Color Change Signals?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
mav = input(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
Var_Func(src,length)=>
valpha=2/(length+1)
vud1=src>src[1] ? src-src[1] : 0
vdd1=src<src[1] ? src[1]-src : 0
vUD=sum(vud1,9)
vDD=sum(vdd1,9)
vCMO=nz((vUD-vDD)/(vUD+vDD))
VAR=0.0
VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
VAR=Var_Func(src,length)
Wwma_Func(src,length)=>
wwalpha = 1/ length
WWMA = 0.0
WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
WWMA=Wwma_Func(src,length)
Zlema_Func(src,length)=>
zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
zxEMAData = (src + (src - src[zxLag]))
ZLEMA = ema(zxEMAData, length)
ZLEMA=Zlema_Func(src,length)
Tsf_Func(src,length)=>
lrc = linreg(src, length, 0)
lrc1 = linreg(src,length,1)
lrs = (lrc-lrc1)
TSF = linreg(src, length, 0)+lrs
TSF=Tsf_Func(src,length)
getMA(src, length) =>
ma = 0.0
if mav == "SMA"
ma := sma(src, length)
ma
if mav == "EMA"
ma := ema(src, length)
ma
if mav == "WMA"
ma := wma(src, length)
ma
if mav == "TMA"
ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1)
ma
if mav == "VAR"
ma := VAR
ma
if mav == "WWMA"
ma := WWMA
ma
if mav == "ZLEMA"
ma := ZLEMA
ma
if mav == "TSF"
ma := TSF
ma
ma
MAvg=getMA(src, length)
fark=MAvg*percent*0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop
OTT=MAvg>MT ? MT*(200+percent)/200 : MT*(200-percent)/200
plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Support Line")
OTTC = highlight ? OTT[2] > OTT[3] ? color.green : color.red : #B800D9
pALL=plot(nz(OTT[2]), color=OTTC, linewidth=2, title="OTT", transp=0)
alertcondition(cross(OTT[2], OTT[3]), title="Color ALARM", message="OTT Has Changed Color!")
alertcondition(crossover(OTT[2], OTT[3]), title="GREEN ALERT", message="OTT GREEN BUY SIGNAL!")
alertcondition(crossunder(OTT[2], OTT[3]), title="RED ALERT", message="OTT RED SELL SIGNAL!")
alertcondition(cross(MAvg, OTT[2]), title="Cross Alert", message="OTT - Support Line Crossing!")
alertcondition(crossover(MAvg, OTT[2]), title="Crossover Alarm", message="Support Line BUY SIGNAL!")
alertcondition(crossunder(MAvg, OTT[2]), title="Crossunder Alarm", message="Support Line SELL SIGNAL!")
alertcondition(cross(src, OTT[2]), title="Price Cross Alert", message="OTT - Price Crossing!")
alertcondition(crossover(src, OTT[2]), title="Price Crossover Alarm", message="PRICE OVER OTT - BUY SIGNAL!")
alertcondition(crossunder(src, OTT[2]), title="Price Crossunder Alarm", message="PRICE UNDER OTT - SELL SIGNAL!")
buySignalk = crossover(MAvg, OTT[2])
plotshape(buySignalk and showsignalsk ? OTT*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
sellSignallk = crossunder(MAvg, OTT[2])
plotshape(sellSignallk and showsignalsk ? OTT*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
buySignalc = crossover(src, OTT[2])
plotshape(buySignalc and showsignalsc ? OTT*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
sellSignallc = crossunder(src, OTT[2])
plotshape(sellSignallc and showsignalsc ? OTT*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0,display=display.none)
longFillColor = highlighting ? (MAvg>OTT ? color.green : na) : na
shortFillColor = highlighting ? (MAvg<OTT ? color.red : na) : na
fill(mPlot, pALL, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, pALL, title="DownTrend Highligter", color=shortFillColor)
buySignalr = crossover(OTT[2], OTT[3])
plotshape(buySignalr and showsignalsr ? OTT*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
sellSignallr = crossunder(OTT[2], OTT[3])
plotshape(sellSignallr and showsignalsr ? OTT*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
showscr = input(true, title="Show Screener Label")
posX_scr = input(20, title="Pos. Label x-axis")
posY_scr = input(1, title="Pos. Size Label y-axis")
colinput = input(title="Label Color", defval="Blue", options=["White", "Black", "Red", "Green", "Yellow", "Blue"])
col = color.gray
if colinput=="White"
col:=color.white
if colinput=="Black"
col:=color.black
if colinput=="Red"
col:=color.red
if colinput=="Green"
col:=color.green
if colinput=="Yellow"
col:=color.yellow
if colinput=="Blue"
col:=color.blue
dummy0 = input(true, title = "=Backtest Inputs=")
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear = input(defval = 2005, title = "From Year", minval = 2005)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear = input(defval = 9999, title = "To Year", minval = 2006)
Start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
Finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
Timerange() => true
if buySignalk
strategy.entry("Long", strategy.long,when=Timerange())
if sellSignallk
strategy.entry("Short", strategy.short,when=Timerange())
// t1=input('EURUSD', title='Symbol 01',type=input.symbol)
// t2=input('XAUUSD', title='Symbol 02',type=input.symbol)
// t3=input('AMZN', title='Symbol 03',type=input.symbol)
// t4=input('TSLA', title='Symbol 04',type=input.symbol)
// t5=input('BTCUSDT', title='Symbol 05',type=input.symbol)
// t6=input('ETHBTC', title='Symbol 06',type=input.symbol)
// t7=input('XBTUSD', title='Symbol 07',type=input.symbol)
// t8=input('XRPBTC', title='Symbol 08',type=input.symbol)
// t9=input('THYAO', title='Symbol 09',type=input.symbol)
// t10=input('GARAN', title='Symbol 10',type=input.symbol)
// t11=input('', title='Symbol 11',type=input.symbol)
// t12=input('', title='Symbol 12',type=input.symbol)
// t13=input('', title='Symbol 13',type=input.symbol)
// t14=input('', title='Symbol 14',type=input.symbol)
// t15=input('', title='Symbol 15',type=input.symbol)
// t16=input('', title='Symbol 16',type=input.symbol)
// t17=input('', title='Symbol 17',type=input.symbol)
// t18=input('', title='Symbol 18',type=input.symbol)
// t19=input('', title='Symbol 19',type=input.symbol)
// t20=input('', title='Symbol 20',type=input.symbol)
// OTTs(percent, length) =>
// Up=MAvg-MAvg*percent*0.01
// Dn=MAvg+MAvg*percent*0.01
// TrendUp = 0.0
// TrendUp := MAvg[1]>TrendUp[1] ? max(Up,TrendUp[1]) : Up
// TrendDown = 0.0
// TrendDown := MAvg[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
// Trend = 0.0
// Trend := MAvg > TrendDown[1] ? 1: MAvg< TrendUp[1]? -1: nz(Trend[1],1)
// Tsl = Trend==1? TrendUp: TrendDown
// S_Buy = Trend == 1 ? 1 : 0
// S_Sell = Trend != 1 ? 1 : 0
// [Trend, Tsl]
// [Trend, Tsl] = OTTs(percent, length)
// TrendReversal = Trend != Trend[1]
// [t01, s01] = security(t1, timeframe.period, OTTs(percent, length))
// [t02, s02] = security(t2, timeframe.period, OTTs(percent, length))
// [t03, s03] = security(t3, timeframe.period, OTTs(percent, length))
// [t04, s04] = security(t4, timeframe.period, OTTs(percent, length))
// [t05, s05] = security(t5, timeframe.period, OTTs(percent, length))
// [t06, s06] = security(t6, timeframe.period, OTTs(percent, length))
// [t07, s07] = security(t7, timeframe.period, OTTs(percent, length))
// [t08, s08] = security(t8, timeframe.period, OTTs(percent, length))
// [t09, s09] = security(t9, timeframe.period, OTTs(percent, length))
// [t010, s010] = security(t10, timeframe.period, OTTs(percent, length))
// [t011, s011] = security(t11, timeframe.period, OTTs(percent, length))
// [t012, s012] = security(t12, timeframe.period, OTTs(percent, length))
// [t013, s013] = security(t13, timeframe.period, OTTs(percent, length))
// [t014, s014] = security(t14, timeframe.period, OTTs(percent, length))
// [t015, s015] = security(t15, timeframe.period, OTTs(percent, length))
// [t016, s016] = security(t16, timeframe.period, OTTs(percent, length))
// [t017, s017] = security(t17, timeframe.period, OTTs(percent, length))
// [t018, s018] = security(t18, timeframe.period, OTTs(percent, length))
// [t019, s019] = security(t19, timeframe.period, OTTs(percent, length))
// [t020, s020] = security(t20, timeframe.period, OTTs(percent, length))
// tr01 = t01 != t01[1], up01 = t01 == 1, dn01 = t01 == -1
// tr02 = t02 != t02[1], up02 = t02 == 1, dn02 = t02 == -1
// tr03 = t03 != t03[1], up03 = t03 == 1, dn03 = t03 == -1
// tr04 = t04 != t04[1], up04 = t04 == 1, dn04 = t04 == -1
// tr05 = t05 != t05[1], up05 = t05 == 1, dn05 = t05 == -1
// tr06 = t06 != t06[1], up06 = t06 == 1, dn06 = t06 == -1
// tr07 = t07 != t07[1], up07 = t07 == 1, dn07 = t07 == -1
// tr08 = t08 != t08[1], up08 = t08 == 1, dn08 = t08 == -1
// tr09 = t09 != t09[1], up09 = t09 == 1, dn09 = t09 == -1
// tr010 = t010 != t010[1], up010 = t010 == 1, dn010 = t010 == -1
// tr011 = t011 != t011[1], up011 = t011 == 1, dn011 = t011 == -1
// tr012 = t012 != t012[1], up012 = t012 == 1, dn012 = t012 == -1
// tr013 = t013 != t013[1], up013 = t013 == 1, dn013 = t013 == -1
// tr014 = t014 != t014[1], up014 = t014 == 1, dn014 = t014 == -1
// tr015 = t015 != t015[1], up015 = t015 == 1, dn015 = t015 == -1
// tr016 = t016 != t016[1], up016 = t016 == 1, dn016 = t016 == -1
// tr017 = t017 != t017[1], up017 = t017 == 1, dn017 = t017 == -1
// tr018 = t018 != t018[1], up018 = t018 == 1, dn018 = t018 == -1
// tr019 = t019 != t019[1], up019 = t019 == 1, dn019 = t019 == -1
// tr020 = t020 != t020[1], up020 = t020 == 1, dn020 = t020 == -1
// pot_label = 'Potential Reversal: \n'
// pot_label := tr01 ? pot_label + t1 + '\n' : pot_label
// pot_label := tr02 ? pot_label + t2 + '\n' : pot_label
// pot_label := tr03 ? pot_label + t3 + '\n' : pot_label
// pot_label := tr04 ? pot_label + t4 + '\n' : pot_label
// pot_label := tr05 ? pot_label + t5 + '\n' : pot_label
// pot_label := tr06 ? pot_label + t6 + '\n' : pot_label
// pot_label := tr07 ? pot_label + t7 + '\n' : pot_label
// pot_label := tr08 ? pot_label + t8 + '\n' : pot_label
// pot_label := tr09 ? pot_label + t9 + '\n' : pot_label
// pot_label := tr010 ? pot_label + t10 + '\n' : pot_label
// pot_label := tr011 ? pot_label + t11 + '\n' : pot_label
// pot_label := tr012 ? pot_label + t12 + '\n' : pot_label
// pot_label := tr013 ? pot_label + t13 + '\n' : pot_label
// pot_label := tr014 ? pot_label + t14 + '\n' : pot_label
// pot_label := tr015 ? pot_label + t15 + '\n' : pot_label
// pot_label := tr016 ? pot_label + t16 + '\n' : pot_label
// pot_label := tr017 ? pot_label + t17 + '\n' : pot_label
// pot_label := tr018 ? pot_label + t18 + '\n' : pot_label
// pot_label := tr019 ? pot_label + t19 + '\n' : pot_label
// pot_label := tr020 ? pot_label + t20 + '\n' : pot_label
// scr_label = 'Confirmed Reversal: \n'
// scr_label := tr01[1] ? scr_label + t1 + '\n' : scr_label
// scr_label := tr02[1] ? scr_label + t2 + '\n' : scr_label
// scr_label := tr03[1] ? scr_label + t3 + '\n' : scr_label
// scr_label := tr04[1] ? scr_label + t4 + '\n' : scr_label
// scr_label := tr05[1] ? scr_label + t5 + '\n' : scr_label
// scr_label := tr06[1] ? scr_label + t6 + '\n' : scr_label
// scr_label := tr07[1] ? scr_label + t7 + '\n' : scr_label
// scr_label := tr08[1] ? scr_label + t8 + '\n' : scr_label
// scr_label := tr09[1] ? scr_label + t9 + '\n' : scr_label
// scr_label := tr010[1] ? scr_label + t10 + '\n' : scr_label
// scr_label := tr011[1] ? scr_label + t11 + '\n' : scr_label
// scr_label := tr012[1] ? scr_label + t12 + '\n' : scr_label
// scr_label := tr013[1] ? scr_label + t13 + '\n' : scr_label
// scr_label := tr014[1] ? scr_label + t14 + '\n' : scr_label
// scr_label := tr015[1] ? scr_label + t15 + '\n' : scr_label
// scr_label := tr016[1] ? scr_label + t16 + '\n' : scr_label
// scr_label := tr017[1] ? scr_label + t17 + '\n' : scr_label
// scr_label := tr018[1] ? scr_label + t18 + '\n' : scr_label
// scr_label := tr019[1] ? scr_label + t19 + '\n' : scr_label
// scr_label := tr020[1] ? scr_label + t20 + '\n' : scr_label
// up_label = 'Uptrend: \n'
// up_label := up01[1] ? up_label + t1 + '\n' : up_label
// up_label := up02[1] ? up_label + t2 + '\n' : up_label
// up_label := up03[1] ? up_label + t3 + '\n' : up_label
// up_label := up04[1] ? up_label + t4 + '\n' : up_label
// up_label := up05[1] ? up_label + t5 + '\n' : up_label
// up_label := up06[1] ? up_label + t6 + '\n' : up_label
// up_label := up07[1] ? up_label + t7 + '\n' : up_label
// up_label := up08[1] ? up_label + t8 + '\n' : up_label
// up_label := up09[1] ? up_label + t9 + '\n' : up_label
// up_label := up010[1] ? up_label + t10 + '\n' : up_label
// up_label := up011[1] ? up_label + t11 + '\n' : up_label
// up_label := up012[1] ? up_label + t12 + '\n' : up_label
// up_label := up013[1] ? up_label + t13 + '\n' : up_label
// up_label := up014[1] ? up_label + t14 + '\n' : up_label
// up_label := up015[1] ? up_label + t15 + '\n' : up_label
// up_label := up016[1] ? up_label + t16 + '\n' : up_label
// up_label := up017[1] ? up_label + t17 + '\n' : up_label
// up_label := up018[1] ? up_label + t18 + '\n' : up_label
// up_label := up019[1] ? up_label + t19 + '\n' : up_label
// up_label := up020[1] ? up_label + t20 + '\n' : up_label
// dn_label = 'Downtrend: \n'
// dn_label := dn01[1] ? dn_label + t1 + '\n' : dn_label
// dn_label := dn02[1] ? dn_label + t2 + '\n' : dn_label
// dn_label := dn03[1] ? dn_label + t3 + '\n' : dn_label
// dn_label := dn04[1] ? dn_label + t4 + '\n' : dn_label
// dn_label := dn05[1] ? dn_label + t5 + '\n' : dn_label
// dn_label := dn06[1] ? dn_label + t6 + '\n' : dn_label
// dn_label := dn07[1] ? dn_label + t7 + '\n' : dn_label
// dn_label := dn08[1] ? dn_label + t8 + '\n' : dn_label
// dn_label := dn09[1] ? dn_label + t9 + '\n' : dn_label
// dn_label := dn010[1] ? dn_label + t10 + '\n' : dn_label
// dn_label := dn011[1] ? dn_label + t11 + '\n' : dn_label
// dn_label := dn012[1] ? dn_label + t12 + '\n' : dn_label
// dn_label := dn013[1] ? dn_label + t13 + '\n' : dn_label
// dn_label := dn014[1] ? dn_label + t14 + '\n' : dn_label
// dn_label := dn015[1] ? dn_label + t15 + '\n' : dn_label
// dn_label := dn016[1] ? dn_label + t16 + '\n' : dn_label
// dn_label := dn017[1] ? dn_label + t17 + '\n' : dn_label
// dn_label := dn018[1] ? dn_label + t18 + '\n' : dn_label
// dn_label := dn019[1] ? dn_label + t19 + '\n' : dn_label
// dn_label := dn020[1] ? dn_label + t20 + '\n' : dn_label
// f_colorscr (_valscr ) =>
// _valscr ? #00000000 : na
// f_printscr (_txtscr ) =>
// var _lblscr = label(na),
// label.delete(_lblscr ),
// _lblscr := label.new(
// time + (time-time[1])*posX_scr ,
// ohlc4[posY_scr],
// _txtscr ,
// xloc.bar_time,
// yloc.price,
// f_colorscr ( showscr ),
// textcolor = showscr ? col : na,
// size = size.normal,
// style=label.style_label_center
// )
// f_printscr ( scr_label + '\n' + pot_label +'\n' + up_label + '\n' + dn_label)