এই কৌশলটি একটি ব্রেকআউট কৌশল যা চার্টে সমর্থন এবং প্রতিরোধের অঞ্চলগুলি সনাক্ত করতে একাধিক সময়সীমা (1 মিনিট, 5 মিনিট, 15 মিনিট, 1 ঘন্টা এবং 4 ঘন্টা) একত্রিত করে।
কৌশলটি সমর্থন এবং প্রতিরোধ অঞ্চল নির্ধারণের জন্য বোলিংজার ব্যান্ড এবং মূল্য চ্যানেলগুলি ব্যবহার করে। প্রথমে, এটি উপরের এবং নীচের ব্যান্ডগুলি নির্ধারণের জন্য প্রতিটি সময়সীমার জন্য বন্ধের দামের সহজ চলমান গড় (এসএমএ) এবং স্ট্যান্ডার্ড বিচ্যুতি (এসটিডিইভি) গণনা করে। এটি তারপরে
একটি ব্রেকার ব্লক সনাক্ত করার পরে, যদি দাম নিম্ন ব্যান্ডের উপরে ভাঙে তবে একটি ক্রয় সংকেত উত্পন্ন হয় এবং উপরের ব্যান্ডের নীচে ভাঙে তবে একটি বিক্রয় সংকেত উত্পন্ন হয়। কৌশলটি প্রতিটি সময়সীমার জন্য মূল্য চ্যানেলগুলিও প্লট করে, সমর্থন এবং প্রতিরোধের স্তরগুলি উপস্থাপন করে।
এছাড়াও, কৌশলটি প্রতিটি সময়সীমার জন্য মুনাফা সীমা স্তর নির্ধারণ করে। এর অর্থ হল পজিশনের জন্য নির্ধারিত মূল্য স্তরগুলি লাভের সাথে বন্ধ করা উচিত। স্টপ-লস স্তরগুলিও ক্ষতির সীমাবদ্ধতার জন্য সেট করা হয়।
বোলিংজার পরামিতিগুলি অনুকূল করে, ধরে রাখার সময় বাড়িয়ে বা স্টপ সেট করে ঝুঁকিগুলি আরও হ্রাস করা যেতে পারে।
এই কৌশলটি বেশ কয়েকটি দিক থেকে অপ্টিমাইজ করা যেতে পারেঃ
সত্যিকারের সমর্থন এবং প্রতিরোধের আরও ভাল প্রতিফলনের জন্য বোলিংজার পরামিতিগুলি অপ্টিমাইজ করুন
ব্রেকআউট দিক এবং গতি নির্ধারণের জন্য মেশিন লার্নিং অ্যালগরিদম যোগ করুন
সর্বোত্তম প্রবেশ এবং প্রস্থান সময় নির্ধারণের জন্য অস্থিরতা সূচক অন্তর্ভুক্ত করুন
প্রবণতা এবং শক্তি নির্ধারণের জন্য MACD, KD এর মতো আরও সূচক একত্রিত করুন
এই কৌশলটি মাল্টি-টাইমফ্রেম প্রযুক্তিগত বিশ্লেষণকে একীভূত করে, ব্রেকআউট ট্রেডিং এবং মুনাফা স্টপ লস ম্যানেজমেন্টের মাধ্যমে ঝুঁকি পরিচালনা করে। এটি একটি নমনীয় এবং নির্ভরযোগ্য ব্রেকআউট সিস্টেম। তবে প্রকৃত বাজার অনুসারে পরামিতি টিউনিং এবং ঝুঁকি নিয়ন্ত্রণের জন্য ক্রমাগত পরীক্ষা এবং অপ্টিমাইজেশনের প্রয়োজন।
/*backtest start: 2023-12-05 00:00:00 end: 2024-01-04 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("DZ Strategy ICT", overlay=true) // Paramètres de l'indicateur length1 = input.int(14, minval=1, title='Longueur 1 min') deviations1 = input.float(2.0, title='Déviations 1 min') multiplier1 = input.float(1.0, minval=0.1, maxval=10, title='Multiplicateur 1 min') fibonacciLevel1 = input.float(0.618, title='Niveau de Fibonacci 1 min') displacement1 = input.int(3, minval=1, title='Décalage de Displacement 1 min') volumeThreshold1 = input.float(1.0, minval=0, title='Seuil de Volume 1 min') fibLevelInput1 = input.float(0.0, "Niveau de Limite de Profit 1 min", minval=0.0) length5 = input.int(14, minval=1, title='Longueur 5 min') deviations5 = input.float(2.0, title='Déviations 5 min') multiplier5 = input.float(1.0, minval=0.1, maxval=10, title='Multiplicateur 5 min') fibonacciLevel5 = input.float(0.618, title='Niveau de Fibonacci 5 min') displacement5 = input.int(3, minval=1, title='Décalage de Displacement 5 min') volumeThreshold5 = input.float(1.0, minval=0, title='Seuil de Volume 5 min') fibLevelInput5 = input.float(0.0, "Niveau de Limite de Profit 5 min", minval=0.0) length15 = input.int(14, minval=1, title='Longueur 15 min') deviations15 = input.float(2.0, title='Déviations 15 min') multiplier15 = input.float(1.0, minval=0.1, maxval=10, title='Multiplicateur 15 min') fibonacciLevel15 = input.float(0.618, title='Niveau de Fibonacci 15 min') displacement15 = input.int(3, minval=1, title='Décalage de Displacement 15 min') volumeThreshold15 = input.float(1.0, minval=0, title='Seuil de Volume 15 min') fibLevelInput15 = input.float(0.0, "Niveau de Limite de Profit 15 min", minval=0.0) length60 = input.int(14, minval=1, title='Longueur 1 h') deviations60 = input.float(2.0, title='Déviations 1 h') multiplier60 = input.float(1.0, minval=0.1, maxval=10, title='Multiplicateur 1 h') fibonacciLevel60 = input.float(0.618, title='Niveau de Fibonacci 1 h') displacement60 = input.int(3, minval=1, title='Décalage de Displacement 1 h') volumeThreshold60 = input.float(1.0, minval=0, title='Seuil de Volume 1 h') fibLevelInput60 = input.float(0.0, "Niveau de Limite de Profit 1 h", minval=0.0) length240 = input.int(14, minval=1, title='Longueur 4 h') deviations240 = input.float(2.0, title='Déviations 4 h') multiplier240 = input.float(1.0, minval=0.1, maxval=10, title='Multiplicateur 4 h') fibonacciLevel240 = input.float(0.618, title='Niveau de Fibonacci 4 h') displacement240 = input.int(3, minval=1, title='Décalage de Displacement 4 h') volumeThreshold240 = input.float(1.0, minval=0, title='Seuil de Volume 4 h') fibLevelInput240 = input.float(0.0, "Niveau de Limite de Profit 4 h", minval=0.0) // Calcul des supports et résistances pour chaque plage de temps basis1 = ta.sma(close, length1) range_1 = multiplier1 * ta.stdev(close, length1) upper1 = basis1 + deviations1 * range_1 lower1 = basis1 - deviations1 * range_1 basis5 = ta.sma(close, length5) range_5 = multiplier5 * ta.stdev(close, length5) upper5 = basis5 + deviations5 * range_5 lower5 = basis5 - deviations5 * range_5 basis15 = ta.sma(close, length15) range_15 = multiplier15 * ta.stdev(close, length15) upper15 = basis15 + deviations15 * range_15 lower15 = basis15 - deviations15 * range_15 basis60 = ta.sma(close, length60) range_60 = multiplier60 * ta.stdev(close, length60) upper60 = basis60 + deviations60 * range_60 lower60 = basis60 - deviations60 * range_60 basis240 = ta.sma(close, length240) range_240 = multiplier240 * ta.stdev(close, length240) upper240 = basis240 + deviations240 * range_240 lower240 = basis240 - deviations240 * range_240 // Calcul du volume moyen sur chaque période donnée averageVolume1 = ta.sma(volume, length1) averageVolume5 = ta.sma(volume, length5) averageVolume15 = ta.sma(volume, length15) averageVolume60 = ta.sma(volume, length60) averageVolume240 = ta.sma(volume, length240) // Détection du Breaker Block en fonction du déplacement et du volume pour chaque plage de temps breakerBlock1 = ta.crossover(close[displacement1], lower1) and volume > volumeThreshold1 * averageVolume1 breakerBlock1 := breakerBlock1 or (ta.crossunder(close[displacement1], upper1) and volume > volumeThreshold1 * averageVolume1) breakerBlock5 = ta.crossover(close[displacement5], lower5) and volume > volumeThreshold5 * averageVolume5 breakerBlock5 := breakerBlock5 or (ta.crossunder(close[displacement5], upper5) and volume > volumeThreshold5 * averageVolume5) breakerBlock15 = ta.crossover(close[displacement15], lower15) and volume > volumeThreshold15 * averageVolume15 breakerBlock15 := breakerBlock15 or (ta.crossunder(close[displacement15], upper15) and volume > volumeThreshold15 * averageVolume15) breakerBlock60 = ta.crossover(close[displacement60], lower60) and volume > volumeThreshold60 * averageVolume60 breakerBlock60 := breakerBlock60 or (ta.crossunder(close[displacement60], upper60) and volume > volumeThreshold60 * averageVolume60) breakerBlock240 = ta.crossover(close[displacement240], lower240) and volume > volumeThreshold240 * averageVolume240 breakerBlock240 := breakerBlock240 or (ta.crossunder(close[displacement240], upper240) and volume > volumeThreshold240 * averageVolume240) // Affichage du Breaker Block sur le graphique bgcolor(breakerBlock1 ? color.new(color.yellow, 70) : na) bgcolor(breakerBlock5 ? color.new(color.yellow, 70) : na) bgcolor(breakerBlock15 ? color.new(color.yellow, 70) : na) bgcolor(breakerBlock60 ? color.new(color.yellow, 70) : na) bgcolor(breakerBlock240 ? color.new(color.yellow, 70) : na) // Définition de la zone limite de l'ordre de profit pour chaque plage de temps fibLevel1 = basis1 * fibonacciLevel1 fibLevel5 = basis5 * fibonacciLevel5 fibLevel15 = basis15 * fibonacciLevel15 fibLevel60 = basis60 * fibonacciLevel60 fibLevel240 = basis240 * fibonacciLevel240 // Signal d'achat modifié en fonction du Breaker Block et du déplacement pour chaque plage de temps buySignal1 = ta.crossover(close[displacement1], lower1) and volume > volumeThreshold1 * averageVolume1 buySignal5 = ta.crossover(close[displacement5], lower5) and volume > volumeThreshold5 * averageVolume5 buySignal15 = ta.crossover(close[displacement15], lower15) and volume > volumeThreshold15 * averageVolume15 buySignal60 = ta.crossover(close[displacement60], lower60) and volume > volumeThreshold60 * averageVolume60 buySignal240 = ta.crossover(close[displacement240], lower240) and volume > volumeThreshold240 * averageVolume240 // Signal de vente modifié en fonction du Breaker Block et du déplacement pour chaque plage de temps sellSignal1 = ta.crossunder(close[displacement1], upper1) and volume > volumeThreshold1 * averageVolume1 sellSignal5 = ta.crossunder(close[displacement5], upper5) and volume > volumeThreshold5 * averageVolume5 sellSignal15 = ta.crossunder(close[displacement15], upper15) and volume > volumeThreshold15 * averageVolume15 sellSignal60 = ta.crossunder(close[displacement60], upper60) and volume > volumeThreshold60 * averageVolume60 sellSignal240 = ta.crossunder(close[displacement240], upper240) and volume > volumeThreshold240 * averageVolume240 // Tracé des niveaux de limite de profit pour chaque plage de temps hline(fibLevelInput1, color=color.green, linestyle=hline.style_dashed, title="Niveau de Limite de Profit 1 min") hline(fibLevelInput5, color=color.green, linestyle=hline.style_dashed, title="Niveau de Limite de Profit 5 min") hline(fibLevelInput15, color=color.green, linestyle=hline.style_dashed, title="Niveau de Limite de Profit 15 min") hline(fibLevelInput60, color=color.green, linestyle=hline.style_dashed, title="Niveau de Limite de Profit 1 h") hline(fibLevelInput240, color=color.green, linestyle=hline.style_dashed, title="Niveau de Limite de Profit 4 h") // Définition des ordres de vente et d'achat pour chaque plage de temps if buySignal1 strategy.entry("Achat 1 min", strategy.long) if sellSignal1 strategy.entry("Vente 1 min", strategy.short) if buySignal5 strategy.entry("Achat 5 min", strategy.long) if sellSignal5 strategy.entry("Vente 5 min", strategy.short) if buySignal15 strategy.entry("Achat 15 min", strategy.long) if sellSignal15 strategy.entry("Vente 15 min", strategy.short) if buySignal60 strategy.entry("Achat 1 h", strategy.long) if sellSignal60 strategy.entry("Vente 1 h", strategy.short) if buySignal240 strategy.entry("Achat 4 h", strategy.long) if sellSignal240 strategy.entry("Vente 4 h", strategy.short) // Configuration des ordres de sortie (Take Profit) pour chaque plage de temps profitRatio = 2 stopLossRatio = 1 stopLossLevel1 = strategy.position_avg_price * (1 - stopLossRatio / (stopLossRatio + profitRatio)) stopLossLevel5 = strategy.position_avg_price * (1 - stopLossRatio / (stopLossRatio + profitRatio)) stopLossLevel15 = strategy.position_avg_price * (1 - stopLossRatio / (stopLossRatio + profitRatio)) stopLossLevel60 = strategy.position_avg_price * (1 - stopLossRatio / (stopLossRatio + profitRatio)) stopLossLevel240 = strategy.position_avg_price * (1 - stopLossRatio / (stopLossRatio + profitRatio)) strategy.exit("Stop Loss 1 min", "Achat 1 min", stop=stopLossLevel1) strategy.exit("Stop Loss 1 min", "Vente 1 min", stop=stopLossLevel1) strategy.exit("Stop Loss 5 min", "Achat 5 min", stop=stopLossLevel5) strategy.exit("Stop Loss 5 min", "Vente 5 min", stop=stopLossLevel5) strategy.exit("Stop Loss 15 min", "Achat 15 min", stop=stopLossLevel15) strategy.exit("Stop Loss 15 min", "Vente 15 min", stop=stopLossLevel15) strategy.exit("Stop Loss 1 h", "Achat 1 h", stop=stopLossLevel60) strategy.exit("Stop Loss 1 h", "Vente 1 h", stop=stopLossLevel60)