Untitled
unknown
plain_text
a year ago
44 kB
183
Indexable
//text inputs var user_consensus = input.string(defval="", title="By going to algopoint.mysellix.io or by clicking on the link in the algopoint instagram bio you can get the leaked codes for all premium indicators like Elite Algo, EzAlgo and LuxAlgo. Free products are also available! algopoint.mysellix.io", confirm = true, group="AlgoPoint") title = 'AlgoPoint' subtitle = 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' symInfoCheck = false symInfo = syminfo.ticker + ' | ' + timeframe.period + (timeframe.isminutes ? 'M' : na) date = str.tostring(dayofmonth(time_close)) + '/' + str.tostring(month(time_close)) + '/' + str.tostring(year(time_close)) textVPosition = 'middle' textHPosition = 'center' symVPosition = 'top' symHPosition = 'left' width = 0 height = 0 c_title = #b2b5be80 s_title = 'large' a_title = 'center' c_subtitle = #b2b5be80 s_subtitle = 'normal' a_subtitle = 'center' c_bg = color.new(color.blue, 100) //text watermark creation var string VERSION = ' V 3 ' var string strategyName = 'AlgoPoint Strategy' + VERSION + '' var string shortTitle = 'AlgoPoint Strategy' //@version=5 strategy(title= strategyName, shorttitle= shortTitle , overlay=true, max_lines_count = 500, max_labels_count = 500, max_bars_back = 1) Watermark = table.new(position.bottom_right, 1, 4, border_width=5) table.cell(Watermark, 0, 0, text= strategyName, text_color=color.rgb(252, 0, 189), text_size=size.normal) // GLOBAL VARIABLES // ‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë var bool is_long_trend_started = false var bool is_short_trend_started = false var bool is_trend_change = na var bool is_long_trend = false var bool is_short_trend = false var bool is_long_trend_start = false var bool is_short_trend_start = false var bool redy_long = false var bool can_long = false var bool redy_short = false var bool can_short = false var bool is_long_go = false var bool is_short_go = false var float imba_entry_long_line = na var float imba_entry_short_line = na var float STLLong = na var float STLShort = na // Inputs // ‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë // ‚Äî‚Äî‚Äî‚Äî‚Ä? Fix Settings asset = input.string(title = "Strategies", defval = "Dev Mode (FREE SETTING)", options=["Dev Mode (FREE SETTING)", "MATIC/USDT.P 30m | Mid Term" ]) // ‚Äî‚Äî‚Äî‚Äî‚Ä? MAIN sensitivity = input.float(200, title = 'Sensitive', step = 1,group = "Main", inline = "1") start_date_input = input.time(defval = timestamp("1 Jan 2024"), title = "Start calculating date",group = "Main", inline = "2") // ‚Äî‚Äî‚Äî‚Äî‚Ä? Filter filterAct = input.bool(true,title = "Atr and RSI",group = 'Sideways Filtering Input', inline = "1") filter1 = 'Filter with Atr' filter2 = 'Filter with RSI' filter3 = 'Atr or RSI' filter4 = 'Atr and RSI' filter5 = 'No Filtering' filter6 = 'Entry Only in flat market(By ATR or RSI)' filter7 = 'Entry Only in flat market(By ATR and RSI)' typefilter = input.string(filter4, title='Atr and RSI', options=[filter1, filter2, filter3, filter4, filter5, filter6, filter7], group = 'Sideways Filtering Input', inline = "1") atrLen = input.int(5, minval=1, title='atr Length', group='Sideways Filtering Input') atrMaType = input.string('SMA', options=['SMA', 'EMA'], group='Sideways Filtering Input', title='atr Moving Average Type') atrMaLen = input.int(5, minval=1, title='atr MA Length', group='Sideways Filtering Input') adxLen = input.float(5, minval = 1, maxval = 50, title = "ADX SMOOTHing", group='Sideways Filtering Input') diLen = input.float(14, minval = 1, title = "DI Length", group='Sideways Filtering Input') adxLim = input.float(22, minval = 1, title = "ADX Limit", group='Sideways Filtering Input') textstylist = table.new(textVPosition + '_' + textHPosition, 1, 3) SMOOTH = input.float(3, minval = 1, maxval = 5, title = "SMOOTHing Factor", group='Sideways Filtering Input') lag = input.float(8, minval = 0, maxval = 15, title = "Lag", group='Sideways Filtering Input') toplimitrsi = input.int(45, title='TOP Limit', group='RSI Filterring') botlimitrsi = input.int(10, title='BOT Limit', group='RSI Filterring') // ‚Äî‚Äî‚Äî‚Äî‚Ä? Backraound Zone showZones = input(false, title='Show Bullish/Bearish Zones') // ‚Äî‚Äî‚Äî‚Äî‚Ä? Fib LvL _236 = input.float(0.236, title = 'Final Long', step = 0.001, group='FIB LVL') _382 = input.float(0.382, title = 'Sensitive', step = 0.001, group='FIB LVL') _5 = input.float(0.5, title = 'trend line', step = 0.001, group='FIB LVL') _456 = input.float(-0.456, title = 'SL line', step = 0.001, group='FIB LVL') _618 = input.float(0.618, title = 'Sensitive', step = 0.001, group='FIB LVL') _786 = input.float(0.786, title = 'finel short', step = 0.001, group='FIB LVL') // ‚Äî‚Äî‚Äî‚Äî‚Ä? Strategie TP SL useSession = input.bool (defval = false, title = 'Sessione‚Ä?', inline = 'Sessione', group = " ‚öΩINPUT settings ‚ö?") session = input.session (defval = '0000-0000', title = '', inline = 'Sessione', group = " ‚ö? INPUT settings ‚ö?") + ':' + (input.bool (defval = true, title = 'Lu', inline = 'Days', group = " ‚ö? INPUT settings ‚ö?") ? str.tostring(dayofweek.monday) : '') + (input.bool (defval = true, title = 'Ma', inline = 'Days', group = " ‚ö? INPUT settings ‚ö?") ? str.tostring(dayofweek.tuesday) : '') + (input.bool (defval = true, title = 'Me', inline = 'Days', group = " ‚ö? INPUT settings ‚ö?") ? str.tostring(dayofweek.wednesday) : '') + (input.bool (defval = true, title = 'Gi', inline = 'Days', group = " ‚ö? INPUT settings ‚ö?") ? str.tostring(dayofweek.thursday) : '') + (input.bool (defval = true, title = 'Ve', inline = 'Days', group = " ‚ö? INPUT settings ‚ö?") ? str.tostring(dayofweek.friday) : '') + (input.bool (defval = true, title = 'Sa', inline = 'Days', group = " ‚ö? INPUT settings ‚ö?") ? str.tostring(dayofweek.saturday) : '') + (input.bool (defval = true, title = 'Do', inline = 'Days', group = " ‚ö? INPUT settings ‚ö?") ? str.tostring(dayofweek.sunday) : '') closeAtSessionEnd = input.bool (defval = false, title = 'Close all sessions at the end', group = " ‚ö? INPUT settings ‚ö?", tooltip = 'Close all positions at the market price at the end of each session') multiprofit = input.bool(true, title="Use Multi Profit" , group = " üí∞ OUTPUT settings üí∞ ") dcaAct = input.bool(true, title="Use Dollar Cost Averaging :" , group = " üí∞ OUTPUT settings üí∞ ", inline='DCA1') dacValue = input.string("5", title="Number of entry", options=["2","3","5"], group = " üí∞ OUTPUT settings üí∞ ", inline='DCA1') TP1 = input.float(0.9, title="TP1 %", step=0.1, group=" üí∞ OUTPUT settings üí∞ ", inline='1') TP2 = input.float(1.8, title="TP2 %", step=0.1, group=" üí∞ OUTPUT settings üí∞ ", inline='2') TP3 = input.float(3.6, title="TP3 %", step=0.1, group=" üí∞ OUTPUT settings üí∞ ", inline='3') TP4 = input.float(5, title="TP4 %", step=0.1, group=" üí∞ OUTPUT settings üí∞ ", inline='4') qty1 = input.float(30, title="% EXIT", step=1, group=" üí∞ OUTPUT settings üí∞ ", inline='1') qty2 = input.float(30, title="% EXIT", step=1, group=" üí∞ OUTPUT settings üí∞ ", inline='2') qty3 = input.float(15, title="% EXIT", step=1, group=" üí∞ OUTPUT settings üí∞ ", inline='3') qty4 = input.float(15, title="% EXIT", step=1, group=" üí∞ OUTPUT settings üí∞ ", inline='4') SL = input.float(3, title="Stoploss %", step=0.1, group=" üí∞ OUTPUT settings üí∞ ", inline='6') movestoploss = input.bool(title="If TP1 is reached: Move Stoploss to entry price", group=" üí∞ OUTPUT settings üí∞ ", defval = false) active_trailing = input.bool(title="If TP1 is reached: Activate Trailing Stoploss ", group=" üí∞ OUTPUT settings üí∞ ", defval = false) sl_type = input.string('ATR', title='Tipo di Trailing', options=['ATR', '%', 'FIB LVL'], inline='Trailing1') atrLength = input(14, title='Durata ATR', inline='Trailing1') stopLoss = input.int( title='% Trailing', defval=5, minval=1, inline='Trailing2') atrMultiplier = input(5, title='ATR Multi Trailing', inline='Trailing2') // Daschbord ans Alert Setting var bool plotDashboard = input.bool(true, group="groupBacktest", title="Plot Dashboard",inline="UX Backtest") var int DashLabel = input.int(defval=35, title='Label X Offset', minval=0, maxval=205, group="groupBacktest",inline="UX Backtest") var bool tradeIdeeAct = input.bool(true, group="groupBacktest", title="Show Trade Idee",inline="UX Backtest") var bool oppositeSignalACT = input.bool(true, group="groupBacktest", title="Stop or opposite Signal",inline="UX Backtest") var bool trailingConfigurationACT = input.bool(true, "Trailing Configuration ON/OFF" ,inline = "trailing", group = "groupBacktest") var string trailingConfigurationType = input.string("Breakeven","Trailing Type", options=["Breakeven","Moving Target","Moving 2-Target", "Percent Below Triggers", "Percent Below Highest"], inline = "trailing", group = "groupBacktest") var int movingTarget = input.int(1, title="Moving Target (BE)", minval=1,group="groupBacktest",inline="SignalG") // Asset Settings // ‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë if asset == "MATIC/USDT.P 30m | Mid Term" sensitivity := 350 filterAct := false typefilter := 'Atr or RSI' TP1 := 1.5 TP2 := 3.5 TP3 := 5.5 TP4 := 10 SL := 5 dcaAct := true dacValue := "5" // Main // ‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë‚ñë //Truncate Function truncate(number, decimals) => factor = math.pow(10, decimals) int(number * factor) / factor //-----------------------------------------------------------------------------} // STRATEGY //sensitivity *= sensitivity2 //sensitivity *= 10 high_line = ta.highest(high, int(sensitivity)) low_line = ta.lowest(low, int(sensitivity)) channel_range = high_line - low_line fib_236 = high_line - channel_range * (_236) fib_382 = high_line - channel_range * _382 fib_5 = high_line - channel_range * _5 fib_456 = high_line - channel_range * _456 fib_618 = high_line - channel_range * _618 fib_786 = high_line - channel_range * (_786) table.cell(textstylist, 0, 0, title, width, height, c_title, a_title, text_size=s_title, bgcolor=c_bg) imba_trend_line = fib_5 SL_Line = fib_456 //filtering RSI = truncate(ta.rsi(close, input.int(14, group='RSI Filterring')), 2) atra = request.security(syminfo.tickerid, '', ta.atr(atrLen)) atrMa = atrMaType == 'EM' ? ta.ema(atra, atrMaLen) : ta.sma(atra, atrMaLen) updm = ta.change(high) downdm = -ta.change(low) plusdm = na(updm) ? na : updm > downdm and updm > 0 ? updm : 0 minusdm = na(downdm) ? na : downdm > updm and downdm > 0 ? downdm : 0 //trur = rma(tr, diLen) //plus = fixnan(100 * rma(plusdm, diLen) / trur) //minus = fixnan(100 * rma(minusdm, diLen) / trur) //sum = plus + minus //adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxLen) cndSidwayss1 = atra >= atrMa cndSidwayss2 = RSI > toplimitrsi or RSI < botlimitrsi cndSidways = cndSidwayss1 or cndSidwayss2 cndSidways1 = cndSidwayss1 and cndSidwayss2 Sidwayss1 = atra <= atrMa Sidwayss2 = RSI < toplimitrsi and RSI > botlimitrsi Sidways = Sidwayss1 or Sidwayss2 Sidways1 = Sidwayss1 and Sidwayss2 trendType = typefilter == filter1 ? cndSidwayss1 : typefilter == filter2 ? cndSidwayss2 : typefilter == filter3 ? cndSidways : typefilter == filter4 ? cndSidways1 : typefilter == filter5 ? RSI > 0 : typefilter == filter6 ? Sidways : typefilter == filter7 ? Sidways1 : na if time >= start_date_input can_long := close >= imba_trend_line and close >= fib_236 and not is_long_trend and trendType can_short := close <= imba_trend_line and close <= fib_786 and not is_short_trend and trendType // CAN LONG/SHORT if can_long is_long_trend := true is_short_trend := false is_long_trend_started := is_long_trend_started ? false : true else if can_short is_short_trend := true is_long_trend := false is_short_trend_started := is_short_trend_started ? false : true else is_trend_change := false can_long := false can_short := false is_short_trend_started := false is_long_trend_started := false is_trend_change := is_short_trend_started or is_long_trend_started plotshape(is_long_trend and is_long_trend_started ? imba_trend_line : na, title="Long", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small) plotshape(is_short_trend and is_short_trend_started ? imba_trend_line : na, title="Short", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small) plot(imba_trend_line, color = is_long_trend[1] ? color.new(#14ca3b, 0): is_short_trend ? color.new(#ff0000, 0) : color.new(#000000, 100), linewidth = 3) ruleState = 0 ruleState := can_long ? 1 : can_short ? -1 : nz(ruleState[1]) bgcolor(showZones ? ruleState == 1 ? color.rgb(116, 239, 143, 66) : ruleState == -1 ? color.rgb(255, 82, 82, 67) : color.gray : na, title=' Bullish/Bearish Zones', transp=90) // Strategy if (is_long_trend and is_long_trend_started) strategy.entry("Long", strategy.long) imba_entry_long_line := imba_trend_line if (is_short_trend and is_short_trend_started ) strategy.entry("Short", strategy.short) imba_entry_short_line := imba_trend_line // Add labels for TP1, TP2, TP3 labelTpSl(_use, _y, _text, _color) => if (_use) label.new(bar_index, _y, text=_text, color=_color, textalign=text.align_left) bool sessionFilter = useSession ? not (na(time(timeframe.period, session)) or na(time_close(timeframe.period, session))) : true percentTPSL(x) => strategy.position_size != 0 ? math.round(x / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) sl_val = sl_type == 'ATR' ? atrMultiplier * ta.atr(atrLength) : sl_type == 'FIB LVL' ? SL_Line : sl_type == 'PERCENTAGE' ? close * stopLoss / 100 : 0.00 trailing_sl_long = 0.0 trailing_sl_long := strategy.position_size > 0 ? imba_trend_line : na trailing_sl_short = 0.0 trailing_sl_short := strategy.position_size < 0 and strategy.position_size[1] >= 0 ? high + sl_val : strategy.position_size < 0 and strategy.position_size[1] < 0 ? math.min(high + sl_val, nz(trailing_sl_short[1])) : na // Logic SL TP ---------------------------------------- // bool status_long_hit_tp1 = na status_long_hit_tp1 := (strategy.position_size[1] > 0 and strategy.position_size > 0 and strategy.position_size[1] > strategy.position_size) ? true : strategy.position_size <= 0 ? false : status_long_hit_tp1[1] bool status_short_hit_tp1 = na status_short_hit_tp1 := (strategy.position_size[1] < 0 and strategy.position_size < 0 and strategy.position_size[1] < strategy.position_size) ? true : strategy.position_size >= 0 ? false : status_short_hit_tp1[1] // STLLong := (status_long_hit_tp1 == true and movestoploss == true) ? strategy.position_avg_price : imba_entry_long_line - percentTPSL(SL)*syminfo.mintick STLShort := (status_short_hit_tp1 == true and movestoploss == true) ? strategy.position_avg_price : imba_entry_short_line + percentTPSL(SL)*syminfo.mintick //Calculate levels long_sl_lv = (status_long_hit_tp1 == true and active_trailing == true) ? trailing_sl_long : STLLong short_sl_lv = (status_short_hit_tp1 == true and active_trailing == true) ? trailing_sl_short : STLShort long_tp1_lv = strategy.position_avg_price + percentTPSL(TP1)*syminfo.mintick long_tp2_lv = strategy.position_avg_price + percentTPSL(TP2)*syminfo.mintick long_tp3_lv = strategy.position_avg_price + percentTPSL(TP3)*syminfo.mintick long_tp4_lv = strategy.position_avg_price + percentTPSL(TP4)*syminfo.mintick long_tp5_lv = strategy.position_avg_price + percentTPSL(TP4)*syminfo.mintick short_tp1_lv = strategy.position_avg_price - percentTPSL(TP1)*syminfo.mintick short_tp2_lv = strategy.position_avg_price - percentTPSL(TP2)*syminfo.mintick short_tp3_lv = strategy.position_avg_price - percentTPSL(TP3)*syminfo.mintick short_tp4_lv = strategy.position_avg_price - percentTPSL(TP4)*syminfo.mintick short_tp5_lv = strategy.position_avg_price - percentTPSL(TP4)*syminfo.mintick ////////////////////////////////////////////////////////////////////////////////SETUP EXIT if multiprofit == true strategy.exit("TP1", "Long", qty_percent = qty1, profit = percentTPSL(TP1), comment = "Tp1üéØ") strategy.exit("TP2", "Long", qty_percent = qty2, profit = percentTPSL(TP2), comment = "Tp2üéØ") strategy.exit("TP3", "Long", qty_percent = qty3, profit = percentTPSL(TP3), comment = "Tp3üéØ") strategy.exit("TP4", "Long", qty_percent = qty4, profit = percentTPSL(TP4), comment = "Tp4üéØ") strategy.exit("TP5", "Long", qty_percent = qty4, profit = percentTPSL(TP4), comment = "Tp5üéØ") strategy.close_all(when = strategy.position_size > 0 and low < long_sl_lv, comment = "CLOSED") strategy.exit("TP1", "Short", qty_percent = qty1, profit = percentTPSL(TP1), comment = "Tp1üéØ") strategy.exit("TP2", "Short", qty_percent = qty2, profit = percentTPSL(TP2), comment = "Tp2üéØ") strategy.exit("TP3", "Short", qty_percent = qty3, profit = percentTPSL(TP3), comment = "Tp3üéØ") strategy.exit("TP4", "Short", qty_percent = qty4, profit = percentTPSL(TP4), comment = "Tp4üéØ") strategy.exit("TP5", "Short", qty_percent = qty4, profit = percentTPSL(TP4), comment = "Tp5üéØ") strategy.close_all(when = strategy.position_size < 0 and high > short_sl_lv, comment = "CLOSED") //Close all positions at the end of the session strategy.close_all(when = closeAtSessionEnd and not sessionFilter, comment = 'Fine Sessione') //SETUP exit sipmle if multiprofit == false strategy.exit("SL", "Long", loss = STLLong, comment = "SL") strategy.exit("SL", "Short", loss = STLShort, comment = "SL") //////////////////////////////////////////////////////////////////////////////// Plot TP & SL var float entryLongTwo = 0.00 var float entryLongThree = 0.00 var float entryLongFour = 0.00 var float entryShortTwo = 0.00 var float entryShortThree = 0.00 var float entryShortFour = 0.00 entryLongThree := math.round_to_mintick(math.avg(strategy.position_avg_price,imba_entry_long_line)) entryLongTwo := math.round_to_mintick(math.avg(strategy.position_avg_price,entryLongThree)) entryLongFour := math.round_to_mintick(math.avg(entryLongThree,imba_entry_long_line)) entryShortThree := math.round_to_mintick(math.avg(strategy.position_avg_price,imba_entry_short_line)) entryShortTwo := math.round_to_mintick(math.avg(strategy.position_avg_price,entryShortThree)) entryShortFour := math.round_to_mintick(math.avg(entryShortThree,imba_entry_short_line)) plot(strategy.position_size > 0 ? long_sl_lv : na, color=color.new(#ca14af, 20), style=plot.style_linebr, title="SL Long") plot(strategy.position_size < 0 ? short_sl_lv : na, color=color.new(#ca14af, 20), style=plot.style_linebr, title="SL Short") plot(strategy.position_size > 0 ? strategy.position_avg_price : na, color=color.new(#2759cd, 30), style=plot.style_linebr, title="Entrie Top") plot(strategy.position_size < 0 ? strategy.position_avg_price : na, color=color.new(#2759cd, 30), style=plot.style_linebr, title="Entrie Bottom") plot(strategy.position_size > 0 ? dcaAct ? dacValue == "2" ? na : entryLongThree : na : na, color=color.new(#004cff, 30), style=plot.style_linebr, title="Long Entrie 3") plot(strategy.position_size > 0 ? dcaAct ? dacValue == "2" or dacValue == "3" ? na : entryLongTwo : na : na, color=color.new(#004cff, 30), style=plot.style_linebr, title="Long Entrie 2") plot(strategy.position_size > 0 ? dcaAct ? dacValue == "2" or dacValue == "3" ? na : entryLongFour : na : na, color=color.new(#004cff, 30), style=plot.style_linebr, title="Long Entrie 4") plot(strategy.position_size < 0 ? dcaAct ? dacValue == "2" ? na : entryShortThree : na : na, color=color.new(#004cff, 30), style=plot.style_linebr, title="Short Entrie 3") plot(strategy.position_size < 0 ? dcaAct ? dacValue == "2" or dacValue == "3" ? na : entryShortTwo : na : na, color=color.new(#004cff, 30), style=plot.style_linebr, title="Short Entrie 2") plot(strategy.position_size < 0 ? dcaAct ? dacValue == "2" or dacValue == "3" ? na : entryShortFour : na : na, color=color.new(#004cff, 30), style=plot.style_linebr, title="Short Entrie 4") plot(strategy.position_size == 0 ? na : dcaAct ? dacValue == "2" or dacValue == "3" or dacValue == "5" ? imba_entry_long_line : na : na , color = is_long_trend[1] ? color.new(#004cff, 0) : color.new(#000000, 100), linewidth = 1, style=plot.style_linebr) plot(strategy.position_size == 0 ? na : dcaAct ? dacValue == "2" or dacValue == "3" or dacValue == "5" ? imba_entry_short_line : na : na , color = is_short_trend[1] ? color.new(#004cff, 0) : color.new(#000000, 100), linewidth = 1, style=plot.style_linebr) plot(multiprofit == true and strategy.position_size > 0 ? strategy.position_avg_price + percentTPSL(TP1)*syminfo.mintick : na, color=color.new(#14ca3b, 30), style=plot.style_linebr, title="Long TP1") plot(multiprofit == true and strategy.position_size > 0 ? strategy.position_avg_price + percentTPSL(TP2)*syminfo.mintick : na, color=color.new(#14ca3b, 30), style=plot.style_linebr, title="Long TP2") plot(multiprofit == true and strategy.position_size > 0 ? strategy.position_avg_price + percentTPSL(TP3)*syminfo.mintick : na, color=color.new(#14ca3b, 30), style=plot.style_linebr, title="Long TP3") plot(multiprofit == true and strategy.position_size > 0 ? strategy.position_avg_price + percentTPSL(TP4)*syminfo.mintick : na, color=color.new(#14ca3b, 30), style=plot.style_linebr, title="Long TP4") plot(multiprofit == true and strategy.position_size > 0 ? strategy.position_avg_price + percentTPSL(TP4)*syminfo.mintick : na, color=color.new(#14ca3b, 30), style=plot.style_linebr, title="Long TP5") plot(multiprofit == true and strategy.position_size < 0 ? strategy.position_avg_price - percentTPSL(TP1)*syminfo.mintick : na, color=color.new(#14ca3b, 30), style=plot.style_linebr, title="Short TP1") plot(multiprofit == true and strategy.position_size < 0 ? strategy.position_avg_price - percentTPSL(TP2)*syminfo.mintick : na, color=color.new(#14ca3b, 30), style=plot.style_linebr, title="Short TP2") plot(multiprofit == true and strategy.position_size < 0 ? strategy.position_avg_price - percentTPSL(TP3)*syminfo.mintick : na, color=color.new(#14ca3b, 30), style=plot.style_linebr, title="Short TP3") plot(multiprofit == true and strategy.position_size < 0 ? strategy.position_avg_price - percentTPSL(TP4)*syminfo.mintick : na, color=color.new(#14ca3b, 30), style=plot.style_linebr, title="Short TP4") plot(multiprofit == true and strategy.position_size < 0 ? strategy.position_avg_price - percentTPSL(TP4)*syminfo.mintick : na, color=color.new(#14ca3b, 30), style=plot.style_linebr, title="Short TP5") //Label TP/SL _x = timenow + math.round(ta.change(time) * 2) draw_label(y1, y2, label1, label2, percent1, percent2, _textcolor) => var label Label = na label.delete(Label) Label := label.new(_x, strategy.position_size > 0 ? y1 : y2, strategy.position_size > 0 ? '' + str.tostring(label1) + ': ' + str.tostring(math.round(y1,2)) + ' (' + str.tostring(math.round(percent1,2)) + '%)' : '' + str.tostring(label2) + ': ' + str.tostring(math.round(y2,2)) + ' (' + str.tostring(math.round(percent2,2)) + '%)' , color=color.new(color.white, 100), textcolor=_textcolor, style=label.style_label_left, yloc=yloc.price, xloc=xloc.bar_time, size=size.small, textalign=text.align_left) Label draw_label_entry(y1, y2, label1, label2, entry1, entry2, _textcolor) => var label Label = na label.delete(Label) Label := label.new(_x, strategy.position_size > 0 ? y1 : y2, strategy.position_size > 0 ? '' + str.tostring(label1) + ': ' + str.tostring(math.round(y1,2)) + ' (' + str.tostring(entry1) + ')' : '' + str.tostring(label2) + ': ' + str.tostring(math.round(y2,2)) + ' (' + str.tostring(entry2) + ')' , color=color.new(color.white, 100), textcolor=_textcolor, style=label.style_label_left, yloc=yloc.price, xloc=xloc.bar_time, size=size.small, textalign=text.align_left) Label if multiprofit == true if dcaAct == true // 2 Rebuy if dacValue == "2" draw_label_entry(strategy.position_avg_price, strategy.position_avg_price, "‚ñ? Entry Zone Long ", "‚ñ? Entry Zone Short", "Entry 1", "Entry 1", color.new(#004cff, 30)) draw_label_entry(imba_entry_long_line, imba_entry_short_line, "‚ñ? Entry Zone Long ", "‚ñ? Entry Zone Short", "Entry 2", "Entry 2", color.new(#004cff, 30)) // 3 Rebuy if dacValue == "3" draw_label_entry(strategy.position_avg_price, strategy.position_avg_price, "‚ñ? Entry Zone Long ", "‚ñ? Entry Zone Short", "Entry 1", "Entry 1", color.new(#004cff, 30)) draw_label_entry(entryLongThree, entryShortThree, "", "", "Entry 2", "Entry 2", color.new(#004cff, 30)) draw_label_entry(imba_entry_long_line, imba_entry_short_line, "‚ñ? Entry Zone Long ", "‚ñ? Entry Zone Short", "Entry 3", "Entry 3", color.new(#004cff, 30)) // 5 Rebuy if dacValue == "5" draw_label_entry(strategy.position_avg_price, strategy.position_avg_price, "‚ñ? Entry Zone Long ", "‚ñ? Entry Zone Short", "Entry 1", "Entry 1", color.new(#004cff, 30)) draw_label_entry(entryLongTwo, entryShortTwo, "", "", "Entry 2", "Entry 2", color.new(#004cff, 30)) draw_label_entry(entryLongThree, entryShortThree, "", "", "Entry 3", "Entry 3", color.new(#004cff, 30)) draw_label_entry(entryLongFour, entryShortFour, "", "", "Entry 4", "Entry 4", color.new(#004cff, 30)) draw_label_entry(imba_entry_long_line, imba_entry_short_line, "‚ñ? Entry Zone Long ", "‚ñ? Entry Zone Short", "Entry 5", "Entry 5", color.new(#004cff, 30)) else draw_label_entry(strategy.position_avg_price, strategy.position_avg_price, "Entry Long ", "Entry Short", "Entry 1", "Entry 1", color.new(#004cff, 30)) draw_label(strategy.position_avg_price + percentTPSL(TP1)*syminfo.mintick, strategy.position_avg_price - percentTPSL(TP1)*syminfo.mintick, "üéØ Long TP1", "üéØ Short TP1", TP1, TP1, color.new(#14ca3b, 30)) draw_label(strategy.position_avg_price + percentTPSL(TP2)*syminfo.mintick, strategy.position_avg_price - percentTPSL(TP2)*syminfo.mintick, "üéØ Long TP2", "üéØ Short TP2", TP2, TP2, color.new(#14ca3b, 30)) draw_label(strategy.position_avg_price + percentTPSL(TP3)*syminfo.mintick, strategy.position_avg_price - percentTPSL(TP3)*syminfo.mintick, "üéØ Long TP3", "üéØ Short TP3", TP3, TP3, color.new(#14ca3b, 30)) draw_label(strategy.position_avg_price + percentTPSL(TP4)*syminfo.mintick, strategy.position_avg_price - percentTPSL(TP4)*syminfo.mintick, "üéØ Long TP4", "üéØ Short TP4", TP4, TP4, color.new(#14ca3b, 30)) draw_label(strategy.position_avg_price + percentTPSL(TP4)*syminfo.mintick, strategy.position_avg_price - percentTPSL(TP4)*syminfo.mintick, "üéØ Long TP5", "üéØ Short TP5", TP4, TP4, color.new(#14ca3b, 30)) draw_label(long_sl_lv,short_sl_lv,"Long SL","Short SL", (imba_entry_long_line-long_sl_lv)*100/strategy.position_avg_price, (-imba_entry_short_line+short_sl_lv)*100/strategy.position_avg_price, color.new(#ca14af, 20)) DashLabelxpos = DashLabel * (time - time[1]) closedTrades = strategy.closedtrades winTrades = strategy.wintrades table.cell(textstylist, 0, 1, subtitle, width, height, c_subtitle, a_subtitle, text_size=s_subtitle, bgcolor=c_bg) lossTrades = strategy.losstrades newWin = (strategy.wintrades > strategy.wintrades[1]) and (strategy.losstrades == strategy.losstrades[1]) and (strategy.eventrades == strategy.eventrades[1]) newLoss = (strategy.wintrades == strategy.wintrades[1]) and (strategy.losstrades > strategy.losstrades[1]) and (strategy.eventrades == strategy.eventrades[1]) varip int winRow = 0 varip int lossRow = 0 varip int maxWinRow = 0 varip int maxLossRow = 0 if newWin lossRow := 0 winRow := winRow + 1 if winRow > maxWinRow maxWinRow := winRow if newLoss winRow := 0 lossRow := lossRow + 1 if lossRow > maxLossRow maxLossRow := lossRow var int MyDate = na if strategy.opentrades == 1 and na(MyDate) MyDate := time MTLabel(shortTitle, tradeIdeeAct, MyDate, dcaAct, dacValue, imba_entry_long_line, imba_entry_short_line, entry_Long_Three, entry_Short_Three, entry_Long_Two, entry_Short_Two, entry_Long_Four, entry_Short_Four, multiprofit, TP1, TP2, TP3, TP4, qty1, qty2, qty3, qty4, oppositeSignalACT, trailingConfigurationACT, trailingConfigurationType, movingTarget, start_date_input, asset) => string _text = 'üìä‚Ä?' + ''+ shortTitle + '‚ÄáTrade Statistics' + '\n' _text += '‚öôÔ∏è‚ÄáStrategy:‚Ä?' + str.tostring(asset) + '\n\n' _text += 'üìÖ‚ÄáFirst Trade:‚Ä?' + str.tostring(dayofmonth(MyDate))+"-"+str.tostring(month(MyDate))+"-"+str.tostring(year(MyDate)) +'\n\n' _text += '‚Äá‚Äá‚Äá‚Äá‚Äá‚Äá‚Äá‚Äá‚Äá‚Äá‚Äá‚ÄáTotalüìä‚ÄáBUYüìà‚ÄáSELLüìâ‚Ä?' + '\n' _text += '‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê'+ '\n' _text += 'Total Trade:‚Ä?' + str.tostring(closedTrades, '##.##') + '\n' _text += 'Total Win:‚Äá‚Äá‚Ä?' + str.tostring(winTrades, '##.##') + '\n' _text += 'Total Loss:‚Äá‚Äá‚Ä?' + str.tostring(lossTrades, '##.##') + '\n' _text += '‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê'+ '\n' _text += ' Max Win in a Row: ' + str.tostring(maxWinRow, '######') + '\n' _text += ' Max Loss in a Row: ' + str.tostring(maxLossRow, '######') + '\n' if tradeIdeeAct == true _text += '‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê‚ïê'+ '\n\n' _text += ''+ shortTitle + '\n' _text += 'Trade idea'+ '\n\n' _text += 'üì©‚Ä?'+ str.tostring(syminfo.ticker) + '\n' _text += strategy.position_size > 0 ? "üìà Long \n" : "üìâ Short \n" _text += 'Timeframe : ‚Äá‚è∞‚Ä?'+ str.tostring(timeframe.period ) + '\n' _text += 'üí≥ Leverage :' + '\n' _text += 'Cross (5x-25x)' + '\n\n' // DCA Activate if dcaAct == true _text += 'Dollar Cost Averaging :‚Ä? ‚úîÔ∏è'+ '\n' // 2 Rebuy if dacValue == "2" _text += '2 DCA Entrys' + '\n\n' _text += '1)‚Ä?' + str.tostring(strategy.position_avg_price) + '‚Ä?-‚Ä?50%' + '\n' _text += '2)‚Ä?' + str.tostring(strategy.position_size > 0 ? imba_entry_long_line : imba_entry_short_line ) + '‚Ä?-‚Ä?50%' + '\n\n' if dacValue == "3" _text += '3 DCA Entrys' + '\n\n' _text += '1)‚Ä?' + str.tostring(strategy.position_avg_price) + '‚Ä?-‚Ä?33.33%' + '\n' _text += '2)‚Ä?' + str.tostring(strategy.position_size > 0 ? entry_Long_Three : entry_Short_Three) + '‚Ä?-‚Ä?33.33%' + '\n' _text += '3)‚Ä?' + str.tostring(strategy.position_size > 0 ? imba_entry_long_line : imba_entry_short_line) + '‚Ä?-‚Ä?33.33%' + '\n\n' if dacValue == "5" _text += '5 DCA Entrys' + '\n\n' _text += '1)‚Ä?' + str.tostring(strategy.position_avg_price) + '‚Ä?-‚Ä?20%' + '\n' _text += '2)‚Ä?' + str.tostring(strategy.position_size > 0 ? entryLongTwo : entryShortTwo) + '‚Ä?-‚Ä?20%' + '\n' _text += '3)‚Ä?' + str.tostring(strategy.position_size > 0 ? entry_Long_Three : entry_Short_Three) + '‚Ä?-‚Ä?20%' + '\n' _text += '3)‚Ä?' + str.tostring(strategy.position_size > 0 ? entry_Long_Four : entry_Short_Four) + '‚Ä?-‚Ä?20%' + '\n' _text += '3)‚Ä?' + str.tostring(strategy.position_size > 0 ? imba_entry_long_line : imba_entry_short_line) + '‚Ä?-‚Ä?20%' + '\n\n' else _text += 'Dollar Cost Averaging :‚Ä? ‚ù?'+ '\n' _text += '1)' + str.tostring(strategy.position_avg_price) + '100%' + '\n\n' if multiprofit == true _text += 'üì§ Take-Profit Orders:' + '\n\n' _text += '1)‚Ä?' + str.tostring(strategy.position_size > 0 ? strategy.position_avg_price + percentTPSL(TP1)*syminfo.mintick : strategy.position_avg_price - percentTPSL(TP1)*syminfo.mintick) _text += '‚Ä?-‚Ä?' + str.tostring(math.round(qty1,2)) + '%' + '\n' _text += '2)‚Ä?' + str.tostring(strategy.position_size > 0 ? strategy.position_avg_price + percentTPSL(TP2)*syminfo.mintick : strategy.position_avg_price - percentTPSL(TP2)*syminfo.mintick) _text += '‚Ä?-‚Ä?' + str.tostring(math.round(qty2,2)) + '%' + '\n' _text += '3)‚Ä?' + str.tostring(strategy.position_size > 0 ? strategy.position_avg_price + percentTPSL(TP3)*syminfo.mintick : strategy.position_avg_price - percentTPSL(TP3)*syminfo.mintick) _text += '‚Ä?-‚Ä?' + str.tostring(math.round(qty3,2)) + '%' + '\n' _text += '4)‚Ä?' + str.tostring(strategy.position_size > 0 ? strategy.position_avg_price + percentTPSL(TP4)*syminfo.mintick : strategy.position_avg_price - percentTPSL(TP4)*syminfo.mintick) _text += '‚Ä?-‚Ä?' + str.tostring(math.round(qty4,2)) + '%' + '\n\n' _text += '5)‚Ä?' + str.tostring(strategy.position_size > 0 ? strategy.position_avg_price + percentTPSL(TP4)*syminfo.mintick : strategy.position_avg_price - percentTPSL(TP4)*syminfo.mintick) _text += '‚Ä?-‚Ä?' + str.tostring(math.round(qty4,2)) + '%' + '\n\n' _text += '‚õîÔ∏è Stop-loss Orders:' + '\n' _text += '1)‚Ä?'+ str.tostring(strategy.position_size > 0 ? long_sl_lv : strategy.position_size < 0 ? short_sl_lv : na) + '‚Ä?-‚Ä?' + '100%' + '\n' if oppositeSignalACT _text += 'or Next signal üîÄ' + '\n\n' if trailingConfigurationACT _text += '‚öôÔ∏è Trailing Configuration:' + '\n' _text += 'Stop:' + ''+ trailingConfigurationType + '\n' _text += 'Trigger: Target' + '‚Ä?' + str.tostring((movingTarget)) else _text += na label la = na label.delete(la[1]) txt = MTLabel(shortTitle, tradeIdeeAct, MyDate, dcaAct, dacValue, imba_entry_long_line, imba_entry_short_line, entryLongThree, entryShortThree, entryLongTwo, entryShortTwo, entryLongFour, entryShortFour, multiprofit, TP1, TP2, TP3, TP4, qty1, qty2, qty3, qty4, oppositeSignalACT, trailingConfigurationACT, trailingConfigurationType, movingTarget, start_date_input, asset) xval = timeframe.period == "1" ? timenow + 300000 : timeframe.period == "3" ? timenow + (15*60000) : timeframe.period == "5" ? timenow + (25*60000) : timeframe.period == "15" ? timenow + (75*60000) : timeframe.period == "30" ? timenow + (150*60000) : timeframe.period == "45" ? timenow + (225*60000) : timeframe.period == "60" ? timenow + (300*60000) : timeframe.period == "180" ? timenow + (600*60000) : timeframe.period == "240" ? timenow + (1200*60000) : timeframe.period == "D" ? timenow + (7200*60000) : timenow + (50400*60000) la := plotDashboard ? label.new(x=time + DashLabelxpos, xloc=xloc.bar_time, yloc=yloc.price, y=close, text=txt, color=color.new(color.black, 50), style=label.style_label_left, textcolor=color.white, size=size.normal, textalign=text.align_left) : na
Editor is loading...
Leave a Comment