
SMC, FVG, BOS, OB, EMA
ঐতিহ্যবাহী প্রযুক্তিগত বিশ্লেষণ পুরনো হয়ে গেছে। এই এসএমসি কৌশলটি সরাসরি প্রতিষ্ঠান ব্যবসায়ীদের মানসিকতার প্রতিলিপি দেয়ঃ তরলতা শিকার পয়েন্ট খুঁজুন, অর্ডার ব্লকগুলি সনাক্ত করুন, বাজার কাঠামোগত ভাঙ্গনকে ধরুন। ব্যাকআপ ডেটা দেখায় যে বিটিসি/ইউআর জোড়ায় 15 মিনিটের চক্র ব্যবহার করা হয়, 1 ঘন্টা EMA200 প্রবণতা ফিল্টার সহ, ঝুঁকি-সংশোধিত রিটার্নগুলি ঐতিহ্যবাহী সূচক কৌশলগুলির তুলনায় উল্লেখযোগ্যভাবে ভাল।
মূল বিষয় হল একাধিক নিশ্চিতকরণ ব্যবস্থাঃ ন্যায্য মূল্যের ফাঁক (FVG) + বাজার কাঠামোর বিপর্যয় (BOS) + তরলতা শিকার + ফিবোনাচি 50% ছাড় / প্রিমিয়াম অঞ্চল। এটি প্রযুক্তিগত সূচকগুলির একটি স্ট্যাক নয়, তবে বাজারের মাইক্রোস্ট্রাকচারের একটি সুনির্দিষ্ট ব্যাখ্যা।
ঝুঁকি ব্যবস্থাপনা সরাসরি রুক্ষভাবে কার্যকরঃ প্রতিটি লেনদেনের জন্য 2 ইউরো ঝুঁকি নির্ধারিত হয়, বাজার যতই অস্থির হোক না কেন। স্টপ লস দূরত্ব স্বয়ংক্রিয়ভাবে গণনা করা হয়, যা ঝুঁকি ধ্রুবক নিশ্চিত করে। লাভ-ক্ষতির অনুপাত 1:3 এ লক করা হয়, যার অর্থ 33.4% জয় লাভ-ক্ষতির ভারসাম্য অর্জন করতে পারে, এই সংখ্যার চেয়ে বেশি জয় খাঁটি লাভ।
ন্যূনতম অবস্থান 0.00001 BTC, সর্বোচ্চ অবস্থান 0.01 BTC, খুচরা তহবিলের আকারের জন্য পুরোপুরি ফিট করে। অবস্থানটি খুব বড় হওয়ার কারণে অপ্রয়োজনীয় ঝুঁকি নেবে না, এবং খুব ছোট অবস্থানের কারণে সুযোগগুলি মিস করবে না। এই তহবিল পরিচালনার পদ্ধতিটি প্রচলিত শতাংশ ঝুঁকি মডেলের চেয়ে বেশি স্থিতিশীল।
একক এসএমসি সিগন্যালগুলি প্রায়শই অস্থির বাজারে ত্রুটিযুক্ত হয়। এই কৌশলটি 1 ঘন্টা EMA200 কে ট্রেন্ড ফিল্টার হিসাবে যুক্ত করেঃ এটি কেবলমাত্র যখন 15 মিনিটের দাম 1 ঘন্টা EMA200 এর উপরে থাকে তখন মাল্টিহেড সিগন্যালগুলি সম্পাদন করে, বিপরীতে খালি হেড সিগন্যালগুলি সম্পাদন করে।
এই নকশাটি সরাসরি কৌশলটির প্রযোজ্যতাকে “সমগ্র বাজার” থেকে “ট্রেন্ডিং বাজার” পর্যন্ত সংকীর্ণ করে, যদিও ট্রেডিং ফ্রিকোয়েন্সি হ্রাস করে, তবে সংকেতের গুণমানকে ব্যাপকভাবে উন্নত করে। ঊর্ধ্বমুখী সমন্বয়ের সময় কৌশলটি স্বয়ংক্রিয়ভাবে ট্রেডিং বন্ধ করে দেয়, যাতে অকার্যকর ওঠানামা চলাকালীন অর্থ ব্যয় করা যায় না।
অর্ডার ব্লকগুলি প্রতিরোধকে সমর্থন করে না, বরং এমন একটি মূল্য অঞ্চল যেখানে প্রতিষ্ঠানের বড় তহবিল সক্রিয় ছিল। কৌশলটি কার্যকর অর্ডার ব্লকগুলিকে নিম্নলিখিত শর্তগুলির মাধ্যমে চিহ্নিত করেঃ
মাল্টি-অর্ডার ব্লকঃ পূর্বের কে লাইনটি শূন্য + উপরের দিকে FVG রয়েছে + দাম পূর্বের দোলন নিম্ন পয়েন্টটি ভেঙে দিয়েছে + নীচের দিকে তরলতা রয়েছে + বর্তমান দাম ফিবোনাচির 50% এর নীচে ছাড়ের অঞ্চলে রয়েছে।
খালি অর্ডার ব্লক: পূর্বের কে লাইনটি হল সূর্যের লাইন + নীচের দিকে FVG + দামের পতনের পূর্ববর্তী উচ্চতর স্থিতিশীলতা + উপরের তরলতা + বর্তমান মূল্য ফিবোনাচির 50% এর বেশি প্রিমিয়াম অঞ্চলে রয়েছে।
প্রতিটি শর্তের একটি যুক্তি রয়েছেঃ কান / বাম লাইন নির্দেশমূলক চাপ দেখায়, এফভিজি তরলতা ভারসাম্যহীনতা দেখায়, বিওএস কাঠামোর পরিবর্তনকে নিশ্চিত করে, তরলতা শিকার সার্টিফিকেট সংস্থার অংশগ্রহণ, ছাড় / প্রিমিয়াম অঞ্চলগুলি সেরা প্রবেশের সময় সরবরাহ করে।
বাজারের ৯০% খুচরা স্টপগুলি সুস্পষ্ট সমর্থন ও প্রতিরোধের স্তরে সেট করা হয়েছে। প্রাতিষ্ঠানিক তহবিলগুলি ইচ্ছাকৃতভাবে দামগুলিকে এই অঞ্চলগুলিতে স্পর্শ করে, প্রচুর স্টপ অর্ডারের পরে বিপরীত ক্রিয়াকলাপকে ট্রিগার করে। কৌশলটি এই তরলতা শিকারকে 0.1% মূল্যের ফাঁক দিয়ে চিহ্নিত করে।
যখন ৭টি পিরিয়ডের মধ্যে সর্বনিম্ন মূল্য বর্তমান নিম্নের চেয়ে ০.১% কম থাকে, তখন নীচের তরলতা নিশ্চিত করা হয়। এই নকশাটি অত্যধিক সংবেদনশীল ভুল বিচারকে এড়িয়ে যায়, যখন সত্যিকারের তরলতা শিকারকে বাদ দেওয়া হয় না তা নিশ্চিত করে।
কৌশলটি উচ্চ এবং নিম্ন পয়েন্টগুলি নিশ্চিত করার জন্য 4 টি চক্রের দোলন দৈর্ঘ্য ব্যবহার করে, যার অর্থ একটি দোলন নিশ্চিত করার জন্য 4 টি কে লাইনের জন্য অপেক্ষা করা প্রয়োজন। এই বিলম্বটি প্রয়োজনীয় মূল্যঃ খুব সংক্ষিপ্ত নিশ্চিতকরণ সময়কাল প্রচুর পরিমাণে জাল দোলন পয়েন্ট তৈরি করে, খুব দীর্ঘ নিশ্চিতকরণ সময়কাল সময়সীমা মিস করে।
4 চক্র 15 মিনিটের চার্টে 1 ঘন্টার সমতুল্য যা নিশ্চিত করে যে দোলন পয়েন্ট কার্যকর হবে এবং বাজার পরিবর্তনের সাথে অত্যধিক পিছিয়ে পড়বে না। এই প্যারামিটারটি প্রচুর পরিমাণে রিটার্নিং অপ্টিমাইজ করা হয়েছে, এটি দক্ষতা এবং নির্ভুলতার সর্বোত্তম ভারসাম্য পয়েন্ট।
ঐতিহাসিক রিটার্নিং ভবিষ্যতের লাভের প্রতিনিধিত্ব করে না, এবং যে কোন কৌশল ক্রমাগত ক্ষতির সম্ভাবনা রয়েছে। এসএমসি কৌশল শক্তিশালী প্রবণতা বাজারে ভাল কাজ করে, কিন্তু কম্পন বাজারে সংকেত গুণমান হ্রাস পায়। এমনকি যদি প্রবণতা ফিল্টার থাকে তবে এটি সম্পূর্ণরূপে মিথ্যা বিরতি এবং বাজারের শব্দ এড়াতে পারে না।
কৌশলটির জন্য কঠোর মানসিক গুণাবলী প্রয়োজনঃ একক 2 ইউরো ক্ষতি গ্রহণ করতে হবে, সংকেত উপস্থিত হলে সিদ্ধান্তমূলকভাবে সম্পাদন করতে হবে, সংকেত না থাকলে ধৈর্য ধরে থাকতে হবে। যে কোনও আবেগময় অপারেশন কৌশলটির পরিসংখ্যানগত সুবিধা নষ্ট করবে।
মডেল ট্রেডিংয়ের অন্তত তিন মাস আগে মডেল ট্রেডিংয়ের পরামর্শ দেওয়া হয় যাতে কৌশলগত যুক্তি এবং ঝুঁকির বৈশিষ্ট্যগুলি পুরোপুরি বোঝা যায়। মনে রাখবেনঃ বাজারের কাঠামো পরিবর্তন হয় এবং কোনও কৌশল চিরকাল কার্যকর হয় না।
/*backtest
start: 2024-12-04 00:00:00
end: 2025-12-02 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy(title="Stratégie SMC V18.2 (BTC/EUR FINAL R3 - Tendance)", shorttitle="SMC-BTC-FINAL-Tendance", overlay=true,
currency=currency.EUR, // <--- CHANGÉ EN EUR
initial_capital=1000, // Capital initial de 1000 euros pour coller à votre compte démo
pyramiding=0,
default_qty_type=strategy.cash,
default_qty_value=1)
// --- PARAMÈTRES ADAPTÉS POUR BTC (M15) ---
i_max_lot_size = input.float(0.01, title="Lot Max (Quantité Max BTC)", minval=0.00001, step=0.001)
i_min_lot_size = input.float(0.00001, title="Lot Min Réel (Exigence Broker)", minval=0.00001, step=0.00001)
i_swing_length = input.int(4, title="Long. Swing (BOS) pour BTC", minval=2) // ADAPTÉ M15
i_ob_opacity = input.int(80, title="Opacité OB", minval=0, maxval=100)
i_liq_tolerance = input.float(0.1, title="Tolérance Liq. (%) pour BTC", minval=0.01, step=0.01)
i_liq_search = input.int(7, title="Long. Recherche Liq.", minval=5) // ADAPTÉ M15
// --- PARAMÈTRES DE FILTRE DE TENDANCE (H1/EMA 200 PAR DÉFAUT) ---
i_tf_tendance = input.string("60", title="Timeframe Tendance (ex: 60 pour H1)", options=["30", "60", "120", "240"]) // ADAPTÉ H1
i_ema_length = input.int(200, title="Longueur EMA Tendance", minval=1)
// --- GESTION DU RISQUE DÉDIÉE ---
float risk_amount = 2.0 // Risque de 2.00 EUROS par transaction
float min_sl_distance = 0.0001
// --- VARIABLES SMC ---
var float obHigh = na
var float obLow = na
var bool obIsBullish = false
var box currentBox = na
var float last_swing_low = na
var float last_swing_high = na
var label active_label = na
var bool signal_entry_long = false
var bool signal_entry_short = false
var float entry_sl_level = na
var float entry_tp_level = na
var float entry_qty_to_risk = na
var bool signal_persistant_long = false
var bool signal_persistant_short = false
// --- FONCTION DE FILTRE DE TENDANCE (EMA sur TF supérieur) ---
f_get_ema_hl() =>
request.security(syminfo.tickerid, i_tf_tendance, ta.ema(close, i_ema_length))
ema_tendance = f_get_ema_hl()
// PLOT de l'EMA pour la visualisation (Titre corrigé)
plot(ema_tendance, color=color.new(color.white, 20), title="EMA Tendance (Filtre)", linewidth=2)
// --- RÉINITIALISATION ---
if not na(active_label)
label.delete(active_label)
active_label := na
signal_entry_long := false
signal_entry_short := false
entry_qty_to_risk := na
// Mise à jour des Swings Highs/Lows
sh_confirmed = ta.barssince(high == ta.highest(i_swing_length * 2 + 1)) == i_swing_length
sl_confirmed = ta.barssince(low == ta.lowest(i_swing_length * 2 + 1)) == i_swing_length
// Initialisation des swings
if na(last_swing_high)
last_swing_high := ta.highest(200)
if na(last_swing_low)
last_swing_low := ta.lowest(200)
if sh_confirmed
last_swing_high := high[i_swing_length]
if sl_confirmed
last_swing_low := low[i_swing_length]
float fib_0_5_level = not na(last_swing_high) and not na(last_swing_low) ? (last_swing_high + last_swing_low) / 2 : na
// PLOT DE DÉBOGAGE: Visualisation des derniers swings
plot(last_swing_high, color=color.new(color.fuchsia, 50), style=plot.style_line, linewidth=2, title="Last Swing High")
plot(last_swing_low, color=color.new(color.lime, 50), style=plot.style_line, linewidth=2, title="Last Swing Low")
// --- FONCTIONS DE DÉTECTION (unchanged) ---
fvg_bullish() => high[1] < low[3]
fvg_bearish() => low[1] > high[3]
f_has_liquidity(direction) =>
result = false
price_to_search = direction ? low : high
search_price = direction ? ta.lowest(i_liq_search) : ta.highest(i_liq_search)
tolerance = close * i_liq_tolerance / 100
if direction
result := search_price < price_to_search - tolerance
else
result := search_price > price_to_search + tolerance
result
// --- LOGIQUE DE DÉCLENCHEMENT DE L'ORDRE BLOCK (unchanged) ---
is_bullish_ob() =>
isBearCandle = close[1] < open[1]
hasFVG = fvg_bullish()
isBOS = not na(last_swing_low) and close > last_swing_low
hasLiquiditySupport = f_has_liquidity(true)
isDiscount = not na(fib_0_5_level) and close < fib_0_5_level
isBearCandle and hasFVG and isBOS and hasLiquiditySupport and isDiscount
is_bearish_ob() =>
isBullCandle = close[1] > open[1]
hasFVG = fvg_bearish()
isBOS = not na(last_swing_high) and close < last_swing_high
hasLiquiditySupport = f_has_liquidity(false)
isPremium = not na(fib_0_5_level) and close > fib_0_5_level
isBullCandle and hasFVG and isBOS and hasLiquiditySupport and isPremium
// --- CRÉATION / MISE À JOUR DE L'OB ACTIF (unchanged) ---
if na(obHigh) or strategy.position_size == 0
if is_bullish_ob() or is_bearish_ob()
obIsBullish := is_bullish_ob()
obHigh := high[1]
obLow := low[1]
// --- GESTION DE LA MITIGATION ET VALIDATION ---
if not na(obHigh)
float mitigation_buffer = 0.00005 * close
isTouched = obIsBullish ? low <= obHigh + mitigation_buffer : high >= obLow - mitigation_buffer
isInvalidatedBull = obIsBullish and close < obLow
isInvalidatedBear = not obIsBullish and close > obHigh
// L'OB est touché ET nous ne sommes pas déjà en position
if isTouched and strategy.position_size == 0
// --- CALCULS ET SIGNAL ---
var float sl_level = obIsBullish ? obLow : obHigh
var float rr_distance_usd = math.abs(close - sl_level)
float safe_rr_distance = math.max(rr_distance_usd, min_sl_distance)
float desired_risk_amount = risk_amount
float calculated_qty = desired_risk_amount / safe_rr_distance
// LOGIQUE POUR GÉRER LOT MAX/MIN
float minimum_lot_for_market = i_min_lot_size
entry_qty_to_risk := math.max(calculated_qty, minimum_lot_for_market)
entry_qty_to_risk := math.min(entry_qty_to_risk, i_max_lot_size)
entry_sl_level := sl_level
// TP FIXE : R:R 1:3
entry_tp_level := obIsBullish ? close + safe_rr_distance * 3 : close - safe_rr_distance * 3
// VÉRIFICATION DU LOT MINIMUM
if entry_qty_to_risk >= minimum_lot_for_market
if obIsBullish
signal_entry_long := true
else
signal_entry_short := true
// --- EXÉCUTION DE LA STRATÉGIE ---
// Persistance du signal
if signal_entry_long and strategy.position_size == 0
signal_persistant_long := true
if signal_entry_short and strategy.position_size == 0
signal_persistant_short := true
// EXÉCUTION AVEC FILTRE DE TENDANCE
if strategy.position_size == 0
// EXÉCUTION LONG
if signal_persistant_long and not na(entry_qty_to_risk)
// FILTRE LONG : Prix M15 au-dessus de l'EMA de tendance H1
if close > ema_tendance
strategy.entry("LongEntry", strategy.long, qty=entry_qty_to_risk, comment="OB Long Actif")
strategy.exit("ExitLong", from_entry="LongEntry", stop=entry_sl_level, limit=entry_tp_level)
signal_persistant_long := false
// EXÉCUTION SHORT
if signal_persistant_short and not na(entry_qty_to_risk)
// FILTRE SHORT : Prix M15 en dessous de l'EMA de tendance H1
if close < ema_tendance
strategy.entry("ShortEntry", strategy.short, qty=entry_qty_to_risk, comment="OB Short Actif")
strategy.exit("ExitShort", from_entry="ShortEntry", stop=entry_sl_level, limit=entry_tp_level)
signal_persistant_short := false
// S'assurer que le signal actif est effacé après l'entrée/sortie
if strategy.position_size != 0
signal_persistant_long := false
signal_persistant_short := false