strategy("Goblin Town [60min]", overlay = true, pyramiding=100,initial_capital = 10000, default_qty_type= strategy.percent_of_equity, default_qty_value = 50, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.03) //SOURCE ============================================================================================================================================================================================================================================================================================================= src = input(open) // POSITION ========================================================================================================================================================================================================================================================================================================== Position = input("Both", title= "Longs / Shorts", options = ["Both","Longs","Shorts"]) is_Long = Position == "SHORT" ? na : true is_Short = Position == "LONG" ? na : true // Indicators Inputs ======================================================================================================================================================================================================================================================================================================== //ADX -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Candles_ADX = input(false, title=" SHOW ADX Bars ", group = "ADX") ADX_options = input("CLASSIC", title=" ADX Option", options = ["CLASSIC", "MASANAKAMURA"], group = "ADX") ADX_len = input(22, title=" ADX Lenght", type = input.integer, minval = 1, group = "ADX") th = input(18, title=" ADX Treshold", type = input.float, minval = 0, step = 0.5, group = "ADX") // Range Filter --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SHOW_RF = input(false, title=" Show Range Filter", group="Range Filter") per_ = input(30, title=" Sampling Period", minval=1, group = "Range Filter") mult = input(1.3, title=" Range Mult.", minval=0.1, step = 0.1, group = "Range Filter") // Volume ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Volume_candles = input(false, title=" SHOW Volume Bars ", group="Volume (BASIC)") volume_f = input(1.4, title=" Volume mult.", minval = 0, step = 0.1, group="Volume (BASIC)") sma_length = input(20, title=" Volume lenght", minval = 1, group="Volume (BASIC)") volume_f_B = input(1.8, title=" Volume mult. Breakouts", minval = 0, step = 0.1, group="Volume (BREAKOUTS)") sma_length_B = input(25, title=" Volume lenght Breakouts", minval = 1, group="Volume (BREAKOUTS)") //MACD---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- fast_length = input(12, title=" Fast Length", type=input.integer, group="MACD") slow_length = input(19, title=" Slow Length", type=input.integer, group="MACD") signal_length = input(20, title=" Signal Smoothing", type=input.integer, group="MACD") //SAR---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SHOW_SAR = input(true, title=" Show Parabolic SAR", group="SAR") Sst = input (0.1, title=" Sar Start", step=0.01, minval = 0.01, group="SAR") Sinc = input (0.1, title=" Sar Int", step=0.01, minval = 0.01, group="SAR") Smax = input (0.1, title=" Sar Max", step=0.01, minval = 0.01, group="SAR") //RSI---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- len_3 = input(40, title=" RSI Lenght", group = "Relative Strenght Indeks") src_3 = input(high, title=" RSI Source", group = "Relative Strenght Indeks") // General Conditions Inputs ======================================================================================================================================================================================================================================================================================================== // Support and Resistance --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SHOW_S_R = input(false, title=" Show Support and Resistance levels", group="Support and Resistance") left = input(5, title=" Left", group="Support and Resistance") right = input(5, title=" Right", group="Support and Resistance") // Indicators Calculations ======================================================================================================================================================================================================================================================================================================== //ADX------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- calcADX(_len) => up = ta.change(high) down = -ta.change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = ta.rma(ta.tr, _len) _plus = fixnan(100 * ta.rma(plusDM, _len) / truerange) _minus = fixnan(100 * ta.rma(minusDM, _len) / truerange) sum = _plus + _minus _adx = 100 * ta.rma(math.abs(_plus - _minus) / (sum == 0 ? 1 : sum), _len) [_plus,_minus,_adx] calcADX_Masanakamura(_len) => SmoothedTrueRange = 0.0 SmoothedDirectionalMovementPlus = 0.0 SmoothedDirectionalMovementMinus = 0.0 TrueRange = math.max(math.max(high - low, math.abs(high - nz(close[1]))), math.abs(low - nz(close[1]))) DirectionalMovementPlus = high - nz(high[1]) > nz(low[1]) - low ? math.max(high - nz(high[1]), 0) : 0 DirectionalMovementMinus = nz(low[1]) - low > high - nz(high[1]) ? math.max(nz(low[1]) - low, 0) : 0 SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1]) /_len) + TrueRange SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1]) / _len) + DirectionalMovementPlus SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1]) / _len) + DirectionalMovementMinus DIP = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIM = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 DX = math.abs(DIP-DIM) / (DIP+DIM)*100 adx = ta.sma(DX, _len) [DIP,DIM,adx] [DIPlusC,DIMinusC,ADXC] = calcADX(ADX_len) [DIPlusM,DIMinusM,ADXM] = calcADX_Masanakamura(ADX_len) DIPlus = ADX_options == "CLASSIC" ? DIPlusC : DIPlusM DIMinus = ADX_options == "CLASSIC" ? DIMinusC : DIMinusM ADX = ADX_options == "CLASSIC" ? ADXC : ADXM L_adx = DIPlus > DIMinus and ADX > th S_adx = DIPlus < DIMinus and ADX > th // Range Filter ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- var bool L_RF = na, var bool S_RF = na Range_filter(_src, _per_, _mult)=> var float _upward = 0.0 var float _downward = 0.0 wper = (_per_*2) - 1 avrng = ta.ema(math.abs(_src - _src[1]), _per_) _smoothrng = ta.ema(avrng, wper)*_mult _filt = _src _filt := _src > nz(_filt[1]) ? ((_src-_smoothrng) < nz(_filt[1]) ? nz(_filt[1]) : (_src-_smoothrng)) : ((_src+_smoothrng) > nz(_filt[1]) ? nz(_filt[1]) : (_src+_smoothrng)) _upward := _filt > _filt[1] ? nz(_upward[1]) + 1 : _filt < _filt[1] ? 0 : nz(_upward[1]) _downward := _filt < _filt[1] ? nz(_downward[1]) + 1 : _filt > _filt[1] ? 0 : nz(_downward[1]) [_smoothrng,_filt,_upward,_downward] [smoothrng, filt, upward, downward] = Range_filter(src, per_, mult) hband = filt + smoothrng lband = filt - smoothrng L_RF := high > hband and upward > 0 S_RF := low < lband and downward > 0 // Volume ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Volume_condt = volume > ta.sma(volume,sma_length)*volume_f Volume_Breakouts_condt = volume > ta.sma(volume,sma_length_B)*volume_f_B //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- fast_ma = ta.ema(src, fast_length) slow_ma = ta.ema(src, slow_length) macd = fast_ma - slow_ma signal_ = ta.sma(macd, signal_length) L_macd = macd > signal_ S_macd = macd < signal_ //SAR------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ SAR = ta.sar(Sst, Sinc, Smax) L_sar = (SAR < close) S_sar = (SAR > close) //RSI------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ up_3 = ta.rma(math.max(ta.change(src_3), 0), len_3) down_3 = ta.rma(-math.min(ta.change(src_3), 0), len_3) rsi_3 = down_3 == 0 ? 100 : up_3 == 0 ? 0 : 100 - (100 / (1 + up_3 / down_3)) L_rsi = (rsi_3 < 70) S_rsi = (rsi_3 > 30) // Support and Resistance --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- hih = ta.pivothigh(high, left, right) lol = ta.pivotlow (low , left, right) top = ta.valuewhen(hih, high[right], 0) bot = ta.valuewhen(lol, low [right], 0) RS_Long_condt = close > top RS_Short_condt = close < bot L_cross = ta.crossover(close, top) S_cross = ta.crossunder(close,bot) length_ = input(15),gamma = input(4.),zl = input(false,title="Zero-Lag") //---- ma = 0. mad = 0. ma4h = 0. mad4h = 0. //---- src_ = zl ? close + change(close,length_/2) : close ma := nz(mad[1],src_) d = ta.cum(math.abs(src[length_] - ma))/ bar_index * gamma mad := ta.sma(ta.sma(src_ > nz(mad[1],src_) + d ? src_ + d : src_ < nz(mad[1],src_) - d ? src_ - d : nz(mad[1],src_),length_),length_) //--- 4h version src4h = request.security(syminfo.tickerid, "1440", zl ? close[1] + change(close[1],length_/2) : close[1], lookahead=barmerge.lookahead_on) ma4h := nz(mad4h[1],src4h) d4h = ta.cum(math.abs(src4h[length_] - ma4h))/ bar_index * gamma mad4h := ta.sma(ta.sma(src4h > nz(mad4h[1],src4h) + d4h ? src4h + d4h : src4h < nz(mad4h[1],src4h) - d4h ? src4h - d4h : nz(mad4h[1],src4h),length_),length_) mad_f = mad/mad[1] > .999 and mad/mad[1] < 1.001 mad_flat = mad4h/mad4h[1] > .999 and mad4h/mad4h[1] < 1.001 // plot plot(mad4h, color=color.purple, linewidth=2, transp=0) RSI_VWAP_length = input(8, title="Rsi vwap lenght") RSI_VWAP = ta.rsi(ta.vwap(close), RSI_VWAP_length) RSI_VWAP_overSold = 13 RSI_VWAP_overBought = 68 L_VAP = (ta.crossover(RSI_VWAP, RSI_VWAP_overSold)) and close < mad S_VAP = (ta.crossunder(RSI_VWAP, RSI_VWAP_overBought)) and close > mad Length1 = input(14, title=" 1-SMA Lenght", minval=1) Length2 = input(28, title=" 2-SMA Lenght", minval=1) Length3 = input(55, title=" 3-SMA Lenght", minval=1) xPrice = close SMA1 = ta.sma(xPrice, Length1) SMA2 = ta.sma(xPrice, Length2) SMA3 = ta.sma(xPrice, Length3) Long_MA = (SMA1 < close and SMA2 < close and SMA3 < close ) Short_MA = (SMA1 > close and SMA2 > close and SMA3 > close ) //RMI ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- RMI_len = input(10, title="Rmi Lenght", type=input.integer, minval = 1, group="Relative Momentum Index") mom = input(14, title="Rmi Momentum", type=input.integer, minval = 1, group="Relative Momentum Index") RMI_os = input(28, title="Rmi oversold", type=input.integer, minval = 0, group="Relative Momentum Index") RMI_ob = input(70, title="Rmi overbought", type=input.integer, minval = 0, group="Relative Momentum Index") // RMI ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- RMI(len, m)=> up = ta.ema(math.max(close - close[m],0), len) dn = ta.ema(math.max(close[m] - close,0), len) RMI = dn == 0 ? 0 : 100 - 100 / (1 + up / dn) RMI L_rmi = ta.crossover(RMI(RMI_len, mom), RMI_os) S_rmi = ta.crossunder(RMI(RMI_len, mom), RMI_ob) //BOLINGER BANDS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //BOLINGER BANDS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- bb_length = input(20, title=" Bollinger Bands Length", group="Bolinger Bands") bb_source = input(high, title=" Bollinger Bands Source", group="Bolinger Bands") //BOLINGER BANDS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- tf3 = input("", title=" Timeframe 3", type = input.resolution, group="Bolinger Bands") src3 = input(open, title=" Source 3", type = input.source, group="Bolinger Bands") SHOW_BB = input(false, title=" Show Bollinger Bands", group="Bolinger Bands") tf2 = input("", title=" Timeframe 2", type = input.resolution, group="Bolinger Bands") src2 = input(open, title=" Source 2", type = input.source, group="Bolinger Bands") per2 = input(10) dev2 = input(3.5) ma2 = request.security(syminfo.tickerid, tf2, ta.sma(src2, per2)) hb2 = ma2 + request.security(syminfo.tickerid, tf2, ta.stdev(src2, per2)) * dev2 lb2 = ma2 - request.security(syminfo.tickerid, tf2, ta.stdev(src2, per2)) * dev2 per3 = input(21) dev3 = input(5.0) ma3 = request.security(syminfo.tickerid, tf2, ta.sma(src2, per2)) hb3 = ma3 + request.security(syminfo.tickerid, tf3, ta.stdev(src3, per3)) * dev3 lb3 = ma3 - request.security(syminfo.tickerid, tf3, ta.stdev(src3, per3)) * dev3 per4 = 15 dev4 = 3.4 ma4 = request.security(syminfo.tickerid, tf2, ta.sma(src2, per2)) hb4 = ma3 + request.security(syminfo.tickerid, tf3, ta.stdev(src3, per4)) * dev4 lb4 = ma3 - request.security(syminfo.tickerid, tf3, ta.stdev(src3, per4)) * dev4 L_BB_CROSS = ta.crossover(low, lb4) S_BB_CROSS = ta.crossunder(high, hb3) L_BB_2 = close > hb2 S_BB_2 = close > lb2 //L/S variables---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- var bool longCond = na, var bool shortCond = na, longCond := nz(longCond[1]), shortCond := nz(shortCond[1]) var int CondIni_long = 0, var int CondIni_short = 0, CondIni_long := nz(CondIni_long[1]), CondIni_short := nz(CondIni_short[1]) var bool Final_longCondition = na, var bool Final_shortCondition = na, Final_longCondition := nz(Final_longCondition[1]), Final_shortCondition := nz(Final_shortCondition[1]) var bool BT_Final_longCondition = na, var bool BT_Final_shortCondition = na, BT_Final_longCondition := nz(BT_Final_longCondition[1]), BT_Final_shortCondition := nz(BT_Final_shortCondition[1]) var float last_open_longCondition = na, var float last_open_shortCondition = na var int last_longCondition = na, var int last_shortCondition = na var int nLongs = na, var int nShorts = na, nLongs := nz(nLongs[1]), nShorts := nz(nShorts[1]) //STRATEGY ========================================================================================================================================================================================================================================================================================================== L_1 = not mad_f and RS_Long_condt and Volume_Breakouts_condt and L_RF S_1 = not mad_f and RS_Short_condt and Volume_Breakouts_condt and S_RF L_2 = not mad_flat and L_adx and L_macd and L_rsi and not S_1 and Long_MA S_2 = not mad_flat and S_adx and S_macd and S_rsi and not L_1 and Short_MA L_3 = mad_flat and L_VAP and L_sar S_3 = mad_flat and S_VAP and S_sar L_4 = L_rmi and close < mad and close > ta.sma(close,20) and mad_flat and not (L_1 or L_2 or L_3) S_4 = S_rmi and close > mad and close < ta.sma(close,20) and mad_flat and not (S_1 or S_2 or S_3) L_5 = L_BB_2 and L_adx and L_rsi and not mad_flat and not (L_1 or L_2 or L_3 or L_4) S_5 = S_BB_2 and S_adx and S_rsi and not mad_flat and not (L_1 or L_2 or L_3 or S_4) Final_Long_Condt = (L_5 or L_1 or L_2) Final_Short_Condt = ( S_5 or S_1 or S_2) longCond := (Final_Long_Condt or L_3 or L_4) shortCond := (Final_Short_Condt or S_3 or S_4) CondIni_long := longCond[1] ? 1 : shortCond[1] ? -1 : nz(CondIni_long[1]) CondIni_short := longCond[1] ? 1 : shortCond[1] ? -1 : nz(CondIni_short[1]) longCondition = (longCond[1] and nz(CondIni_long[1]) == -1) shortCondition = (shortCond[1] and nz(CondIni_short[1]) == 1) // POSITION PRICE ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ var int last_long_sl = na, var int last_short_sl = na last_open_longCondition := longCondition ? close[1] : nz(last_open_longCondition[1]) last_open_shortCondition := shortCondition ? close[1] : nz(last_open_shortCondition[1]) last_longCondition := longCondition ? time : nz(last_longCondition[1]) last_shortCondition := shortCondition ? time : nz(last_shortCondition[1]) in_longCondition = last_longCondition > last_shortCondition in_shortCondition = last_shortCondition > last_longCondition if longCondition nLongs := nLongs + 1 nShorts := na if shortCondition nLongs := na nShorts := nShorts + 1 //TP_1 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- tp = input(0.9, "TP-1 [%]", type = input.float, step = 0.1, group="Backtesting") var bool long_tp = na, var bool short_tp = na var int last_long_tp = na, var int last_short_tp = na var bool Final_Long_tp = na, var bool Final_Short_tp = na, Final_Long_tp := nz(Final_Long_tp[1]), Final_Short_tp := nz(Final_Short_tp[1]) long_tp := (is_Long and high > (last_open_longCondition*(1+(tp/100))) and in_longCondition) short_tp := (is_Short and low < (last_open_shortCondition*(1-(tp/100))) and in_shortCondition) last_long_tp := long_tp ? time : nz(last_long_tp[1]) last_short_tp := short_tp ? time : nz(last_short_tp[1]) Final_Long_tp := (long_tp and last_longCondition > nz(last_long_tp[1]) and last_longCondition > nz(last_long_sl[1])) Final_Short_tp := (short_tp and last_shortCondition > nz(last_short_tp[1]) and last_shortCondition > nz(last_short_sl[1])) l_1_h = iff(Final_Long_tp, last_open_longCondition*(1+(tp/100)), na), s_1_h = iff(Final_Short_tp, last_open_shortCondition*(1-(tp/100)), na) //TP_2 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- tp2 = input(1.7, "TP-2 [%]", type = input.float, step = 0.1) var bool long_tp2 = na, var bool short_tp2 = na var int last_long_tp2 = na, var int last_short_tp2 = na var bool Final_Long_tp2 = na, var bool Final_Short_tp2 = na, Final_Long_tp2 := nz(Final_Long_tp2[1]), Final_Short_tp2 := nz(Final_Short_tp2[1]) long_tp2 := ( is_Long and high > (last_open_longCondition*(1+(tp2/100))) and in_longCondition) short_tp2 := ( is_Short and low < (last_open_shortCondition*(1-(tp2/100))) and in_shortCondition) last_long_tp2 := long_tp2 ? time : nz(last_long_tp2[1]) last_short_tp2 := short_tp2 ? time : nz(last_short_tp2[1]) Final_Long_tp2 := (long_tp2 and last_longCondition > nz(last_long_tp2[1]) and last_longCondition > nz(last_long_sl[1])) Final_Short_tp2 := (short_tp2 and last_shortCondition > nz(last_short_tp2[1]) and last_shortCondition > nz(last_short_sl[1])) l_2_h = iff(Final_Long_tp2, last_open_longCondition*(1+(tp2/100)), na) s_2_h = iff(Final_Short_tp2, last_open_shortCondition*(1-(tp2/100)), na), // SL --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- sl = input(7, "SL [%]", type = input.float, step = 0.1) var int CondIni_long_sl = 0, var int CondIni_short_sl = 0 var bool Final_Long_sl0 = na, var bool Final_Short_sl0 = na, Final_Long_sl0 := nz(Final_Long_sl0[1]), Final_Short_sl0 := nz(Final_Short_sl0[1]) var bool Final_Long_sl = na, var bool Final_Short_sl = na, Final_Long_sl := nz(Final_Long_sl[1]), Final_Short_sl := nz(Final_Short_sl[1]) long_sl = is_Long and low <= ((1-(sl/100))*last_open_longCondition) and not (open < ((1-(sl/100))*last_open_longCondition)) short_sl = is_Short and high >= ((1+(sl/100))*last_open_shortCondition) and not (open > ((1+(sl/100))*last_open_shortCondition)) Final_Long_sl0 := Position == "BOTH" ? long_sl and nz(CondIni_long_sl[1]) == -1 and not Final_Long_tp and not shortCondition : long_sl and nz(CondIni_long_sl[1]) == -1 and not Final_Long_tp Final_Short_sl0 := Position == "BOTH" ? short_sl and nz(CondIni_short_sl[1]) == -1 and not Final_Short_tp and not longCondition : short_sl and nz(CondIni_short_sl[1]) == -1 and not Final_Short_tp last_long_sl := Final_Long_sl ? time : nz(last_long_sl[1]) last_short_sl := Final_Short_sl ? time : nz(last_short_sl[1]) Final_Long_sl := Final_Long_sl0 and last_longCondition > nz(last_long_tp[1]) and last_longCondition > nz(last_long_sl[1]) Final_Short_sl := Final_Short_sl0 and last_shortCondition > nz(last_short_tp[1]) and last_shortCondition > nz(last_short_sl[1]) CondIni_long_sl := Final_Long_tp or Final_Long_sl or Final_shortCondition ? 1 : Final_longCondition ? -1 : nz(CondIni_long_sl[1]) CondIni_short_sl := Final_Short_tp or Final_Short_sl or Final_longCondition ? 1 : Final_shortCondition ? -1 : nz(CondIni_short_sl[1]) // Leverage --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- var float last_leverage_L = na, var float last_leverage_S = na Act_Lev = input(true, title="Activate leverage?" ) Max_Lev = input(3, title="Max lev.", type = input.integer, minval = 1, maxval = 5 ) sma_length_lev = input(50, title="Volume lenght lev.", minval = 1 ) long = ((longCond and not in_longCondition) or (longCond and Final_Long_tp) or (longCond and Final_Long_sl)) or (longCond and not longCondition and (last_long_tp > nz(last_longCondition))) or (longCond and not longCondition and (last_long_sl > nz(last_longCondition))) Long = (longCond and not in_longCondition) or (longCond and Final_Long_tp) or (longCond and Final_Long_sl) or (longCond and not longCondition and (last_long_tp >= nz(last_longCondition))) or (longCond and not longCondition and (last_long_sl >= nz(last_longCondition))) short = ((shortCond and not in_shortCondition) or (shortCond and Final_Short_tp) or (shortCond and Final_Short_sl)) or (shortCond and not shortCondition and (last_short_tp > nz(last_shortCondition))) or (shortCond and not shortCondition and (last_short_sl > nz(last_shortCondition))) Short = (shortCond and not in_shortCondition) or (shortCond and Final_Short_tp) or (shortCond and Final_Short_sl) or (shortCond and not shortCondition and (last_short_tp >= nz(last_shortCondition))) or (shortCond and not shortCondition and (last_short_sl >= nz(last_shortCondition))) Lev_vol = not mad_flat ? math.min(Max_Lev,math.max(1, math.round(volume/ta.sma(volume,sma_length_lev)))) : 1 rsiLen = 14 last_leverage_L := Long ? Lev_vol : nz(last_leverage_L[1] ) last_leverage_S := Short ? Lev_vol : nz(last_leverage_S[1] ) vol_x1 = Lev_vol[1] == 1 vol_x2 = Lev_vol[1] == 2 vol_x3 = Lev_vol[1] == 3 vol_x4 = Lev_vol[1] == 4 Long_x1 = longCondition and vol_x1 Short_x1 = shortCondition and vol_x1 Long_x2 = longCondition and vol_x2 Short_x2 = shortCondition and vol_x2 Long_x3 = longCondition and vol_x3 Short_x3 = shortCondition and vol_x3 Long_x4 = longCondition and vol_x4 Short_x4 = shortCondition and vol_x4 //RE-ENTRY ON TP-HIT----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- var float sum_long = 0.0, var float sum_short = 0.0 var float Position_Price = 0.0 if Final_Long_tp or Final_Long_sl CondIni_long := -1 sum_long := 0.0 nLongs := na if Final_Short_tp or Final_Short_sl CondIni_short := 1 sum_short := 0.0 nShorts := na // Colors ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Colors ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- bar_color = L_adx ? #009688 : S_adx ? #f06292 : color.gray barcolor (color = bar_color) //PLOTS============================================================================================================================================================================================================================================================================================================== //PLOTS============================================================================================================================================================================================================================================================================================================== h_BB = plot(SHOW_BB ? hb3 : na, title = "Upper Bollinger Band", color = #009688, linewidth = 1 ) l_BB = plot(SHOW_BB ? lb3 : na, title = "Lower Bollinger Band", color = #f06292, linewidth = 1 ) fill(h_BB, l_BB, title = "Bollinger Band Background", color = in_longCondition ? #009688 : #f06292, transp = 95 ) plot(SHOW_SAR ? SAR : na, title = "SAR", style=plot.style_circles, color= bar_color ) res = plot(SHOW_S_R ? top : na, style = plot.style_cross, offset=-left, color=top != top[1] ? na : color.green, linewidth = 1 ) sup = plot(SHOW_S_R ? bot : na, style = plot.style_cross, offset=-left, color=bot != bot[1] ? na : color.red, linewidth = 1 ) plot (l_1_h, style = plot.style_cross, linewidth=5, color=color.fuchsia, editable = false ) plot (s_1_h, style = plot.style_cross, linewidth=5, color=color.fuchsia, editable = false ) plot (l_2_h, style = plot.style_cross, linewidth=5, color=color.fuchsia, editable = false ) plot (s_2_h, style = plot.style_cross, linewidth=5, color=color.fuchsia, editable = false ) hbandplot = plot(SHOW_RF ? hband : na, title = "RF HT", color=color.aqua, transp = 50 ) lbandplot = plot(SHOW_RF ? lband : na, title = "RF LT", color=color.aqua, transp = 50 ) fill(hbandplot, lbandplot, title = "RF TR", color=color.aqua ) // PLOTSPAHES ====================================================================================================================================================================================================================================================================================================== plotshape(Final_Long_tp2 and Final_Long_tp , title="Long TP HIT", style=shape.flag, location=location.abovebar, color=color.red, size=size.tiny , textcolor=color.red, transp = 0 ) plotshape(Final_Short_tp2 and Final_Short_tp , title="Short TP HIT", style=shape.flag, location=location.belowbar, color=color.green, size=size.tiny , textcolor=color.green, transp = 0 ) plotshape(Final_Long_tp2 and not Final_Long_tp , title="Long TP HIT", style=shape.triangledown, location=location.abovebar, color=color.red, text="TP", size=size.tiny , textcolor=color.red, transp = 0 ) plotshape(Final_Short_tp2 and not Final_Short_tp , title="Short TP HIT", style=shape.triangleup, location=location.belowbar, color=color.green, text="TP", size=size.tiny , textcolor=color.green, transp = 0 ) plotshape(Final_Long_tp and not Final_Long_tp2 , title="Long TP HIT", style=shape.triangledown, location=location.abovebar, color=color.red, text="TP", size=size.tiny , textcolor=color.red, transp = 0 ) plotshape(Final_Short_tp and not Final_Short_tp2 , title="Short TP HIT", style=shape.triangleup, location=location.belowbar, color=color.green, text="TP", size=size.tiny , textcolor=color.green, transp = 0 ) plotshape(Long_x1, title = "L x1", style=shape.triangleup, location=location.belowbar, color=color.blue, size=size.tiny , text="x1", textcolor=color.blue, transp = 0 ) plotshape(Short_x1, title = "S x1", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny , text="x1", textcolor=color.red, transp = 0 ) plotshape(Long_x2, title = "L x2", style=shape.triangleup, location=location.belowbar, color=color.blue, size=size.tiny , text="x2", textcolor=color.blue, transp = 0 ) plotshape(Short_x2, title = "S x2", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, text="x2", textcolor=color.red, transp = 0 ) plotshape(Long_x3, title = "L x3", style=shape.triangleup, location=location.belowbar, color=color.blue, size=size.tiny , text="x3", textcolor=color.blue, transp = 0 ) plotshape(Short_x3, title = "S x3", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, text="x3", textcolor=color.red, transp = 0 ) plotshape(Long_x4, title = "L x4", style=shape.triangleup, location=location.belowbar, color=color.blue, size=size.tiny , text="x4", textcolor=color.blue, transp = 0 ) plotshape(Short_x4, title = "S x4", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, text="x4", textcolor=color.red, transp = 0 ) //BACKTESTING-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //BACKTESTING inputs -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ACT_BT = input(true, title="Backtest", type = input.bool, group= "BACKTEST") testStartYear = input(1997, title="start year", minval = 1997, maxval = 3000, group= "BACKTEST") testStartMonth = input(06, title="start month", minval = 1, maxval = 12, group= "BACKTEST") testStartDay = input(01, title="start day", minval = 1, maxval = 31, group= "BACKTEST") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(3333, title="stop year", minval=1980, maxval = 2222, group= "BACKTEST") testStopMonth = input(12, title="stop month", minval=1, maxval=12, group= "BACKTEST") testStopDay = input(31, title="stop day", minval=1, maxval=31, group= "BACKTEST") testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0) testPeriod = time >= testPeriodStart and time <= testPeriodStop ? true : false // Backtest ================================================================================================================================================================================================================================================================================================================================== //L_STOP = in_longCondition and S_1 and mad_flat //S_STOP = in_shortCondition and L_1 and mad_flat if long strategy.entry("L_1", strategy.long, when=ACT_BT and testPeriod) strategy.entry("L_2", strategy.long, when=ACT_BT and testPeriod) if short strategy.entry("S_1", strategy.short, when=ACT_BT and testPeriod) strategy.entry("S_2", strategy.short, when=ACT_BT and testPeriod) strategy.exit("TP-1_L", "L_1", profit = (math.abs((last_open_longCondition * (1+(tp/100)))-last_open_longCondition)/syminfo.mintick), loss = (math.abs((last_open_longCondition * (1-(sl/100)))-last_open_longCondition)/syminfo.mintick )) strategy.exit("TP-2_S", "S_2", profit = (math.abs((last_open_shortCondition * (1-(tp2/100)))-last_open_shortCondition)/syminfo.mintick), loss = (math.abs((last_open_shortCondition * (1+(sl/100)))-last_open_shortCondition)/syminfo.mintick )) strategy.exit("TP-1_S", "S_1", profit = (math.abs((last_open_shortCondition * (1-(tp/100)))-last_open_shortCondition)/syminfo.mintick), loss = (math.abs((last_open_shortCondition * (1+(sl/100)))-last_open_shortCondition)/syminfo.mintick )) strategy.exit("TP-2_L", "L_2", profit = (math.abs((last_open_longCondition * (1+(tp2/100)))-last_open_longCondition)/syminfo.mintick), loss = (math.abs((last_open_longCondition * (1-(sl/100)))-last_open_longCondition)/syminfo.mintick )) //strategy.close_all(when = L_STOP or S_STOP)
Tidak bertakwaSumber terbuka yang baik, ada yang mengeluarkan di mana-mana untuk menipu.
JojokawoAdakah anda akan berkongsi permainan $ 5,000 dengan orang lain?
Tidak bertakwaAda yang menggunakan kod ini untuk menipu orang baru untuk mendapatkan wang.
a624587332Ini bukan versi terkini.
ChaoZhangSaya tidak tahu, sumber terbuka yang lain.