-- More information about this indicator can be found at: -- http://fxcodebase.com/code/viewtopic.php?f=17&t=41294 --+------------------------------------------------------------------+ --| Copyright © 2018, Gehtsoft USA LLC | --| http://fxcodebase.com | --+------------------------------------------------------------------+ --| Support our efforts by donating | --| Paypal: https://goo.gl/9Rj74e | --| BitCoin : 15VCJTLaz12Amr7adHSBtL9v8XomURo9RF | --| BitCoin Cash: 1BEtS465S3Su438Kc58h2sqvVvHK9Mijtg | --| Ethereum : 0x8C110cD61538fb6d7A2B47858F0c0AaBd663068D | --| LiteCoin : LLU8PSY2vsq7B9kRELLZQcKf5nJQrdeqwD | --+------------------------------------------------------------------+ function Init() indicator:name("SSL with NRTR indicator"); indicator:description("SSL with NRTR indicator"); indicator:requiredSource(core.Bar); indicator:type(core.Indicator); indicator.parameters:addGroup("Calculation"); indicator.parameters:addInteger("Period", "Period", "", 13); indicator.parameters:addString("Method", "Method", "", "MVA"); indicator.parameters:addStringAlternative("Method", "MVA", "", "MVA"); indicator.parameters:addStringAlternative("Method", "EMA", "", "EMA"); indicator.parameters:addStringAlternative("Method", "KAMA", "", "KAMA"); indicator.parameters:addStringAlternative("Method", "Wilder", "", "Wilder"); indicator.parameters:addStringAlternative("Method", "LWMA", "", "LWMA"); indicator.parameters:addStringAlternative("Method", "SineWMA", "", "SineWMA"); indicator.parameters:addStringAlternative("Method", "TriMA", "", "TriMA"); indicator.parameters:addStringAlternative("Method", "LSMA", "", "LSMA"); indicator.parameters:addStringAlternative("Method", "SMMA", "", "SMMA"); indicator.parameters:addStringAlternative("Method", "HMA", "", "HMA"); indicator.parameters:addStringAlternative("Method", "ZeroLagEMA", "", "ZeroLagEMA"); indicator.parameters:addStringAlternative("Method", "DEMA", "", "DEMA"); indicator.parameters:addStringAlternative("Method", "T3", "", "T3"); indicator.parameters:addStringAlternative("Method", "ITrend", "", "ITrend"); indicator.parameters:addStringAlternative("Method", "Median", "", "Median"); indicator.parameters:addStringAlternative("Method", "GeoMean", "", "GeoMean"); indicator.parameters:addStringAlternative("Method", "REMA", "", "REMA"); indicator.parameters:addStringAlternative("Method", "ILRS", "", "ILRS"); indicator.parameters:addStringAlternative("Method", "IE/2", "", "IE/2"); indicator.parameters:addStringAlternative("Method", "TriMAgen", "", "TriMAgen"); indicator.parameters:addStringAlternative("Method", "JSmooth", "", "JSmooth"); indicator.parameters:addBoolean("NRTR", "Enable NRTR", "", true); indicator.parameters:addGroup("Style"); indicator.parameters:addColor("UPclr", "UP line color", "UP line color", core.rgb(0, 255, 0)); indicator.parameters:addColor("DNclr", "DN line color", "DN line color", core.rgb(255, 0, 0)); indicator.parameters:addInteger("widthLinReg", "Line width", "Line width", 1, 1, 5); indicator.parameters:addInteger("styleLinReg", "Line style", "Line style", core.LINE_SOLID); indicator.parameters:setFlag("styleLinReg", core.FLAG_LINE_STYLE); indicator.parameters:addColor("UPDclr", "UP dot color", "UP dot color", core.rgb(0, 255, 0)); indicator.parameters:addColor("DNDclr", "DN dot color", "DN dot color", core.rgb(255, 0, 0)); indicator.parameters:addInteger("DotSize", "Dot size", "Dot size", 3, 1, 5); indicator.parameters:addGroup("Alert Parameters"); indicator.parameters:addString("Live", "End of Turn / Live", "", "Live"); indicator.parameters:addStringAlternative("Live", "End of Turn", "", "End of Turn"); indicator.parameters:addStringAlternative("Live", "Live", "", "Live"); indicator.parameters:addBoolean("Show", "Show Dialog box Alert", "", true); indicator.parameters:addBoolean("OnlyOnce", "Alert Once", "Subsequent Alert will be ignored.", false); indicator.parameters:addBoolean("ShowAlert", "Show Alert", "", true); indicator.parameters:addGroup("Alert Style"); indicator.parameters:addColor("UpTrendColor", "Up Trend Color", "", core.rgb(0, 0, 255)); indicator.parameters:addColor("DownTrendColor", "Down Trend Color", "", core.rgb(0, 0, 255)); indicator.parameters:addInteger("Size", "Label Size", "", 10, 1 , 100); indicator.parameters:addGroup("Alerts Sound"); indicator.parameters:addBoolean("PlaySound", "Play Sound", "", true); indicator.parameters:addBoolean("RecurrentSound", "Recurrent Sound", "", false); indicator.parameters:addGroup("Alerts Email"); indicator.parameters:addBoolean("SendEmail", "Send Email", "", true); indicator.parameters:addString("Email", "Email", "", ""); indicator.parameters:setFlag("Email", core.FLAG_EMAIL); Parameters (1, "Trend"); end function Parameters ( id, Label ) indicator.parameters:addGroup(Label .. " Alert"); indicator.parameters:addBoolean("ON"..id , "Show " .. Label .." Alert" , "", true); indicator.parameters:addFile("Up"..id, Label .. " Cross Over Sound", "", ""); indicator.parameters:setFlag("Up"..id, core.FLAG_SOUND); indicator.parameters:addFile("Down"..id, Label .. " Cross Under Sound", "", ""); indicator.parameters:setFlag("Down"..id, core.FLAG_SOUND); indicator.parameters:addString("Label"..id, "Label", "", Label); end local Number = 1; local Up={}; local Down={}; local Label={}; local ON={}; local Size; local Email; local SendEmail; local RecurrentSound ,SoundFile ; local Show; local Alert; local PlaySound; local Live; local FIRST=true; local OnlyOnce; local U={}; local D={}; local UpTrendColor, DownTrendColor; local OnlyOnceFlag; local ShowAlert; local Shift=0; local Alert={}; local AlertLevel={}; local first; local source = nil; local Period; local Method; local NRTR; local HMA, LMA; local trend; local Line; function Prepare(nameOnly) source = instance.source; Period=instance.parameters.Period; Method=instance.parameters.Method; NRTR=instance.parameters.NRTR; OnlyOnceFlag=true; FIRST=true; OnlyOnce = instance.parameters.OnlyOnce; ShowAlert = instance.parameters.ShowAlert; Show = instance.parameters.Show; Live = instance.parameters.Live; UpTrendColor = instance.parameters.UpTrendColor; DownTrendColor = instance.parameters.DownTrendColor; Size=instance.parameters.Size; local name = profile:id() .. "(" .. source:name() .. ", " .. instance.parameters.Period .. ", " .. instance.parameters.Method .. ")"; instance:name(name); if (nameOnly) then return; end assert(core.indicators:findIndicator("AVERAGES") ~= nil, "Please, download and install AVERAGES.LUA indicator"); HMA = core.indicators:create("AVERAGES", source.high, Method, Period, false); LMA = core.indicators:create("AVERAGES", source.low, Method, Period, false); first = math.max(HMA.DATA:first(),LMA.DATA:first() ); trend=instance:addInternalStream(first, 0); Line= instance:addStream("Line", core.Line, name .. ".Line", "Line", instance.parameters.UPclr, first); Line:setWidth(instance.parameters.widthLinReg); Line:setStyle(instance.parameters.styleLinReg); for i= 1, Number , 1 do Alert[i]=instance:addInternalStream(0, 0); AlertLevel[i]=instance:addInternalStream(0, 0); end Initialization(); instance:ownerDrawn(true); end function Update(period, mode) HMA:update(mode); LMA:update(mode); if periodHMA.DATA[period-1] then trend[period]=1; elseif source.close[period]