Cette stratégie est un système dynamique de suivi des tendances basé sur l'indicateur ATR (Average True Range), combinant l'analyse multipériodique et les capacités de gestion de portefeuille. La stratégie suit la position relative entre le prix et le canal ATR pour capturer les changements de tendance sur différentes périodes tout en gérant dynamiquement les positions en fonction des quantités de trading définies par l'utilisateur.
La logique de base de la stratégie repose sur les éléments clés suivants: Utilise l'indicateur ATR pour établir un canal de stop-loss dynamique, dont la largeur est déterminée par la période ATR et les paramètres de sensibilité 2. Détermine les signaux d'achat/vente par le biais de croisements entre le canal EMA et ATR 3. Prend en charge le fonctionnement sur plusieurs délais de 5 minutes à 2 heures 4. Incorpore un mécanisme de suivi du portefeuille pour ajuster dynamiquement les quantités d'achat/de vente en fonction des positions actuelles 5. Utilisation facultative de bougies Heikin Ashi pour réduire les faux signaux
Cette stratégie est un système de trading complet combinant l'analyse technique et la gestion de portefeuille. Elle fournit des capacités stables de suivi des tendances via des canaux dynamiques ATR et une analyse multipériodique tout en tenant compte des besoins de gestion de position dans le trading réel. L'optimisation de la stratégie devrait se concentrer sur l'amélioration de la qualité du signal et l'amélioration du contrôle des risques.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-10 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title='ADET GİRMELİ Trend İz Süren Stop Strategy', overlay=true, overlay=true,default_qty_type = strategy.fixed, default_qty_value = 1) // Inputs a = input(9, title='Key Value. "This changes the sensitivity"') c = input(3, title='ATR Period') h = input(false, title='Signals from Heikin Ashi Candles') xATR = ta.atr(c) nLoss = a * xATR src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close xATRTrailingStop = 0.0 iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1 xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2 pos = 0 iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0) pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3 xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue ema = ta.ema(src, 1) above = ta.crossover(ema, xATRTrailingStop) below = ta.crossover(xATRTrailingStop, ema) buy = src > xATRTrailingStop and above sell = src < xATRTrailingStop and below barbuy = src > xATRTrailingStop barsell = src < xATRTrailingStop // Alım ve Satım Sinyalleri buySignal = src > xATRTrailingStop and above sellSignal = src < xATRTrailingStop and below // Kullanıcı girişi sell_quantity = input.int(1, title="Sell Quantity", minval=1) buy_quantity = input.int(1, title="Buy Quantity", minval=1) // Portföy miktarı (örnek simülasyon verisi) var portfolio_quantity = 0 // Sinyal üretimi (örnek sinyal, gerçek stratejinizle değiştirin) indicator_signal = (src > xATRTrailingStop and above) ? "buy" : (src < xATRTrailingStop and below) ? "sell" : "hold" // Şartlara göre al/sat if indicator_signal == "buy" and portfolio_quantity < buy_quantity strategy.entry("Buy Order", strategy.long, qty=buy_quantity) portfolio_quantity := portfolio_quantity + buy_quantity if indicator_signal == "sell" and portfolio_quantity >= sell_quantity strategy.close("Buy Order", qty=sell_quantity) portfolio_quantity := portfolio_quantity - sell_quantity // Plot buy and sell signals plotshape(buy, title='Buy', text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(sell, title='Sell', text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) // Bar coloring barcolor(barbuy ? color.rgb(6, 250, 14) : na) barcolor(barsell ? color.red : na) // Alerts alertcondition(buy, 'UT Long', 'UT Long') alertcondition(sell, 'UT Short', 'UT Short') // Strategy Entry and Exit if buy strategy.entry('Long', strategy.long) if sell strategy.entry('Short', strategy.short) // Optional Exit Conditions if sell strategy.close('Long') if buy strategy.close('Short') // ///TARAMA/// // gurupSec = input.string(defval='1', options=['1', '2', '3', '4', '5','6','7'], group='Taraması yapılacak 40\'arlı gruplardan birini seçin', title='Grup seç') // per = input.timeframe(defval='', title='PERİYOT',group = "Tarama yapmak istediğiniz periyotu seçin") // loc = input.int(defval=20, title='Konum Ayarı', minval = -100,maxval = 200 , step = 5, group='Tablonun konumunu belirleyin') // func() => // //ÖRNEK BİR FONKSİYON AŞAĞIDA YAZILMIŞTIR. SİZ DE İSTEDİĞİNİZ KOŞULLAR İÇİN TARAMA YAZABİLİRSİNİZ. // //rsi = ta.rsi(close,14) // //cond = rsi <= 30 // //[close,cond] // ////value = ta.cci(close,length23) // cond = buySignal or sellSignal // [close,cond] // c1 = input.symbol(title='1', defval='BIST:BRYAT',group = "1. Grup Hisseleri") // c2 = input.symbol(title='2', defval='BIST:TARKM') // c3 = input.symbol(title='3', defval='BIST:TNZTP') // c4 = input.symbol(title='4', defval='BIST:ERBOS') // c5 = input.symbol(title='5', defval='BIST:BFREN') // c6 = input.symbol(title='6', defval='BIST:ALARK') // c7 = input.symbol(title='7', defval='BIST:ISMEN') // c8 = input.symbol(title='8', defval='BIST:CVKMD') // c9 = input.symbol(title='9', defval='BIST:TTRAK') // c10 = input.symbol(title='10', defval='BIST:ASELS') // c11 = input.symbol(title='11', defval='BIST:ATAKP') // c12 = input.symbol(title='12', defval='BIST:MGROS') // c13 = input.symbol(title='13', defval='BIST:BRSAN') // c14 = input.symbol(title='14', defval='BIST:ALFAS') // c15 = input.symbol(title='15', defval='BIST:CWENE') // c16 = input.symbol(title='16', defval='BIST:THYAO') // c17 = input.symbol(title='17', defval='BIST:EREGL') // c18 = input.symbol(title='18', defval='BIST:TUPRS') // c19 = input.symbol(title='19', defval='BIST:YYLGD') // c20 = input.symbol(title='20', defval='BIST:KLSER') // c21 = input.symbol(title='21', defval='BIST:MIATK') // c22 = input.symbol(title='22', defval='BIST:ASTOR') // c23 = input.symbol(title='23', defval='BIST:DOAS') // c24 = input.symbol(title='24', defval='BIST:ERCB') // c25 = input.symbol(title='25', defval='BIST:REEDR') // c26 = input.symbol(title='26', defval='BIST:DNISI') // c27 = input.symbol(title='27', defval='BIST:ARZUM') // c28 = input.symbol(title='28', defval='BIST:EBEBK') // c29 = input.symbol(title='29', defval='BIST:KLKIM') // c30 = input.symbol(title='30', defval='BIST:ONCSM') // c31 = input.symbol(title='31', defval='BIST:SOKE') // c32 = input.symbol(title='32', defval='BIST:GUBRF') // c33 = input.symbol(title='33', defval='BIST:KONTR') // c34 = input.symbol(title='34', defval='BIST:DAPGM') // c35 = input.symbol(title='35', defval='BIST:BVSAN') // c36 = input.symbol(title='36', defval='BIST:ODAS') // c37 = input.symbol(title='37', defval='BIST:OYAKC') // c38 = input.symbol(title='38', defval='BIST:KRPLS') // c39 = input.symbol(title='39', defval='BIST:BOBET') // [v1,s1] = request.security(c1, per, func()) // [v2,s2] = request.security(c2, per, func()) // [v3,s3] = request.security(c3, per, func()) // [v4,s4] = request.security(c4, per, func()) // [v5,s5] = request.security(c5, per, func()) // [v6,s6] = request.security(c6, per, func()) // [v7,s7] = request.security(c7, per, func()) // [v8,s8] = request.security(c8, per, func()) // [v9,s9] = request.security(c9, per, func()) // [v10,s10] = request.security(c10, per, func()) // [v11,s11] = request.security(c11, per, func()) // [v12,s12] = request.security(c12, per, func()) // [v13,s13] = request.security(c13, per, func()) // [v14,s14] = request.security(c14, per, func()) // [v15,s15] = request.security(c15, per, func()) // [v16,s16] = request.security(c16, per, func()) // [v17,s17] = request.security(c17, per, func()) // [v18,s18] = request.security(c18, per, func()) // [v19,s19] = request.security(c19, per, func()) // [v20,s20] = request.security(c20, per, func()) // [v21,s21] = request.security(c21, per, func()) // [v22,s22] = request.security(c22, per, func()) // [v23,s23] = request.security(c23, per, func()) // [v24,s24] = request.security(c24, per, func()) // [v25,s25] = request.security(c25, per, func()) // [v26,s26] = request.security(c26, per, func()) // [v27,s27] = request.security(c27, per, func()) // [v28,s28] = request.security(c28, per, func()) // [v29,s29] = request.security(c29, per, func()) // [v30,s30] = request.security(c30, per, func()) // [v31,s31] = request.security(c31, per, func()) // [v32,s32] = request.security(c32, per, func()) // [v33,s33] = request.security(c33, per, func()) // [v34,s34] = request.security(c34, per, func()) // [v35,s35] = request.security(c35, per, func()) // [v36,s36] = request.security(c36, per, func()) // [v37,s37] = request.security(c37, per, func()) // [v38,s38] = request.security(c38, per, func()) // [v39,s39] = request.security(c39, per, func()) // roundn(x, n) => // mult = 1 // if n != 0 // for i = 1 to math.abs(n) by 1 // mult *= 10 // mult // n >= 0 ? math.round(x * mult) / mult : math.round(x / mult) * mult // scr_label = 'A/G İZSÜREN\n' // scr_label := s1 ? scr_label + syminfo.ticker(c1) + ' ' + str.tostring(roundn(v1, 2)) + '\n' : scr_label // scr_label := s2 ? scr_label + syminfo.ticker(c2) + ' ' + str.tostring(roundn(v2, 2)) + '\n' : scr_label // scr_label := s3 ? scr_label + syminfo.ticker(c3) + ' ' + str.tostring(roundn(v3, 2)) + '\n' : scr_label // scr_label := s4 ? scr_label + syminfo.ticker(c4) + ' ' + str.tostring(roundn(v4, 2)) + '\n' : scr_label // scr_label := s5 ? scr_label + syminfo.ticker(c5) + ' ' + str.tostring(roundn(v5, 2)) + '\n' : scr_label // scr_label := s6 ? scr_label + syminfo.ticker(c6) + ' ' + str.tostring(roundn(v6, 2)) + '\n' : scr_label // scr_label := s7 ? scr_label + syminfo.ticker(c7) + ' ' + str.tostring(roundn(v7, 2)) + '\n' : scr_label // scr_label := s8 ? scr_label + syminfo.ticker(c8) + ' ' + str.tostring(roundn(v8, 2)) + '\n' : scr_label // scr_label := s9 ? scr_label + syminfo.ticker(c9) + ' ' + str.tostring(roundn(v9, 2)) + '\n' : scr_label // scr_label := s10 ? scr_label + syminfo.ticker(c10) + ' ' + str.tostring(roundn(v10, 2)) + '\n' : scr_label // scr_label := s11 ? scr_label + syminfo.ticker(c11) + ' ' + str.tostring(roundn(v11, 2)) + '\n' : scr_label // scr_label := s12 ? scr_label + syminfo.ticker(c12) + ' ' + str.tostring(roundn(v12, 2)) + '\n' : scr_label // scr_label := s13 ? scr_label + syminfo.ticker(c13) + ' ' + str.tostring(roundn(v13, 2)) + '\n' : scr_label // scr_label := s14 ? scr_label + syminfo.ticker(c14) + ' ' + str.tostring(roundn(v14, 2)) + '\n' : scr_label // scr_label := s15 ? scr_label + syminfo.ticker(c15) + ' ' + str.tostring(roundn(v15, 2)) + '\n' : scr_label // scr_label := s16 ? scr_label + syminfo.ticker(c16) + ' ' + str.tostring(roundn(v16, 2)) + '\n' : scr_label // scr_label := s17 ? scr_label + syminfo.ticker(c17) + ' ' + str.tostring(roundn(v17, 2)) + '\n' : scr_label // scr_label := s18 ? scr_label + syminfo.ticker(c18) + ' ' + str.tostring(roundn(v18, 2)) + '\n' : scr_label // scr_label := s19 ? scr_label + syminfo.ticker(c19) + ' ' + str.tostring(roundn(v19, 2)) + '\n' : scr_label // scr_label := s20 ? scr_label + syminfo.ticker(c20) + ' ' + str.tostring(roundn(v20, 2)) + '\n' : scr_label // scr_label := s21 ? scr_label + syminfo.ticker(c21) + ' ' + str.tostring(roundn(v21, 2)) + '\n' : scr_label // scr_label := s22 ? scr_label + syminfo.ticker(c22) + ' ' + str.tostring(roundn(v22, 2)) + '\n' : scr_label // scr_label := s23 ? scr_label + syminfo.ticker(c23) + ' ' + str.tostring(roundn(v23, 2)) + '\n' : scr_label // scr_label := s24 ? scr_label + syminfo.ticker(c24) + ' ' + str.tostring(roundn(v24, 2)) + '\n' : scr_label // scr_label := s25 ? scr_label + syminfo.ticker(c25) + ' ' + str.tostring(roundn(v25, 2)) + '\n' : scr_label // scr_label := s26 ? scr_label + syminfo.ticker(c26) + ' ' + str.tostring(roundn(v26, 2)) + '\n' : scr_label // scr_label := s27 ? scr_label + syminfo.ticker(c27) + ' ' + str.tostring(roundn(v27, 2)) + '\n' : scr_label // scr_label := s28 ? scr_label + syminfo.ticker(c28) + ' ' + str.tostring(roundn(v28, 2)) + '\n' : scr_label // scr_label := s29 ? scr_label + syminfo.ticker(c29) + ' ' + str.tostring(roundn(v29, 2)) + '\n' : scr_label // scr_label := s30 ? scr_label + syminfo.ticker(c30) + ' ' + str.tostring(roundn(v30, 2)) + '\n' : scr_label // scr_label := s31 ? scr_label + syminfo.ticker(c31) + ' ' + str.tostring(roundn(v31, 2)) + '\n' : scr_label // scr_label := s32 ? scr_label + syminfo.ticker(c32) + ' ' + str.tostring(roundn(v32, 2)) + '\n' : scr_label // scr_label := s33 ? scr_label + syminfo.ticker(c33) + ' ' + str.tostring(roundn(v33, 2)) + '\n' : scr_label // scr_label := s34 ? scr_label + syminfo.ticker(c34) + ' ' + str.tostring(roundn(v34, 2)) + '\n' : scr_label // scr_label := s35 ? scr_label + syminfo.ticker(c35) + ' ' + str.tostring(roundn(v35, 2)) + '\n' : scr_label // scr_label := s36 ? scr_label + syminfo.ticker(c36) + ' ' + str.tostring(roundn(v36, 2)) + '\n' : scr_label // scr_label := s37 ? scr_label + syminfo.ticker(c37) + ' ' + str.tostring(roundn(v37, 2)) + '\n' : scr_label // scr_label := s38 ? scr_label + syminfo.ticker(c38) + ' ' + str.tostring(roundn(v38, 2)) + '\n' : scr_label // scr_label := s39 ? scr_label + syminfo.ticker(c39) + ' ' + str.tostring(roundn(v39, 2)) + '\n' : scr_label // var panel = table.new(position = position.top_right,columns = 10,rows = 10,bgcolor = color.green,frame_color = color.white,border_color = color.red) // if barstate.islast // table.cell(panel,0,0,text = str.tostring(scr_label)) // //------------------------------------------------------