এই কৌশলটি ফ্র্যাক্টাল তত্ত্ব এবং অর্ডার ব্লক বিশ্লেষণের উপর ভিত্তি করে একটি অভিযোজিত ট্রেডিং সিস্টেম। এটি মার্কেট স্ট্রাকচারে মূল সমর্থন এবং প্রতিরোধের স্তরগুলি সনাক্ত করে উচ্চ সম্ভাব্যতার ট্রেডিং সুযোগগুলি ক্যাপচার করে, অর্ডার ব্লক নিশ্চিতকরণের সাথে ফ্র্যাক্টাল ব্রেকআউট সংকেতগুলিকে একত্রিত করে। কৌশলটি ফ্র্যাক্টাল সূচক, গতিশীল অর্ডার ব্লক এবং মূল্য ব্রেকআউট নিশ্চিতকরণ সিস্টেম সহ একাধিক প্রযুক্তিগত সূচককে একীভূত করে, বাজারের পালা পয়েন্টগুলির সুনির্দিষ্ট অবস্থান এবং ব্যবসায়ের সঠিক সময় অর্জন করে।
কৌশলটির মূল যুক্তি তিনটি প্রধান স্তম্ভের উপর নির্মিতঃ প্রথমত, সম্ভাব্য প্রবণতা বিপরীতমুখী অঞ্চলগুলি সনাক্ত করতে ফ্র্যাক্টাল গণনা মডিউলের মাধ্যমে বাজারের সর্বোচ্চ এবং নিম্ন পর্যবেক্ষণ অবিচ্ছিন্নভাবে; দ্বিতীয়ত, অর্ডার ব্লক বিশ্লেষণের মাধ্যমে মূল মূল্য স্তরে সরবরাহ এবং চাহিদা অঞ্চল স্থাপন; এবং অবশেষে, ব্রেকআউট নিশ্চিতকরণ সিস্টেমের মাধ্যমে মূল্য ব্রেকআউটের বৈধতা যাচাই করা। যখন দাম একটি ফ্র্যাক্টালের উপরে ভেঙে যায় এবং বৈধতা নিশ্চিত করে, তখন সিস্টেমটি সাম্প্রতিক লাল মোমবাতি এলাকায় একটি চাহিদা অঞ্চল অর্ডার ব্লক তৈরি করে এবং একটি দীর্ঘ অবস্থান খোলে; যখন দাম একটি ফ্র্যাক্টালের নীচে ভেঙে যায় এবং বৈধতা নিশ্চিত করে, তখন সিস্টেমটি সাম্প্রতিক সবুজ মোমবাতি এলাকায় সরবরাহ অঞ্চল অর্ডার তৈরি করে এবং একটি শর্ট অবস্থান খোলে। কৌশলটিতে গতিশীল অর্ডার ব্লক রঙের আপডেটগুলিও অন্তর্ভুক্ত রয়েছে যা মূল্য এবং ব্লকগুলির মধ্যে আপেক্ষিক সম্পর্কযুক্ত সম্পর্কটি চাক্ষিকভাবে প্রদর্শন করে।
এটি একটি সমন্বিত ট্রেডিং কৌশল যা প্রযুক্তিগত বিশ্লেষণের একাধিক মাত্রা একীভূত করে, একটি সম্পূর্ণ ট্রেডিং সিস্টেম তৈরি করে যার মূলত ফ্র্যাক্টাল তত্ত্ব এবং অর্ডার ব্লক বিশ্লেষণ রয়েছে। কৌশলটির শক্তিগুলি এর অভিযোজনযোগ্যতা এবং একাধিক নিশ্চিতকরণ প্রক্রিয়াতে রয়েছে, তবে কৌশলটির কার্যকারিতার উপর বাজারের পরিবেশের প্রভাবকেও মনোযোগ দিতে হবে। প্রস্তাবিত অপ্টিমাইজেশান দিকগুলির মাধ্যমে কৌশলটির নির্ভরযোগ্যতা এবং স্থিতিশীলতা আরও উন্নত করা যেতে পারে।
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Supply and Demand - Order Block Strategy", format=format.price, precision=0, overlay=true) // Input options for customization changeColor = input(false, title="Change Box Colors?") breakType = input.string("Wick+Body", title="Fractal Break Type:", options=["Wick+Body", "Body"]) n = input.int(title="Periods", defval=2, minval=1, tooltip="Number of periods for fractal lookback") if n <= 0 runtime.error("Periods input must be greater than zero.") transGreenClr = input.color(color.new(color.green, 80), title="Bg:", inline="a_1") greenClr = input.color(color.new(color.green, 0), title="Border:", inline="a_1") transRedClr = input.color(color.new(color.red, 80), title="Bg:", inline="b_1") redClr = input.color(color.new(color.red, 0), title="Border:", inline="b_1") // --- Fractal Calculation --- upFractal = high[n] == ta.highest(high, 2 * n + 1) downFractal = low[n] == ta.lowest(low, 2 * n + 1) // --- End Fractal Calculation --- var float topValue = na var float bottomValue = na var int lastRedIndex = na var float lastRedLow = na var float lastRedHigh = na var int lastGreenIndex = na var float lastGreenLow = na var float lastGreenHigh = na var line topLine = na var line bottomLine = na var box demandBox = na var box supplyBox = na var topBreakBlock = false var bottomBreakBlock = false var isLongBreak = false var isShortBreak = false topBreakCheckSource = breakType == "Wick+Body" ? high : close bottomBreakCheckSource = breakType == "Wick+Body" ? low : close // Last Red Check if close < open lastRedIndex := bar_index lastRedLow := low lastRedHigh := high // Last Green Check if close > open lastGreenIndex := bar_index lastGreenLow := low lastGreenHigh := high // Top break if ta.crossover(topBreakCheckSource, topValue) and not topBreakBlock topBreakBlock := true isLongBreak := true // line.set_x2(topLine, bar_index) // demandBox := box.new(lastRedIndex - 1, lastRedHigh, lastRedIndex + 1, lastRedLow, bgcolor=transGreenClr, border_color=greenClr) if strategy.position_size <= 0 strategy.entry("Long", strategy.long) // Bottom break if ta.crossunder(bottomBreakCheckSource, bottomValue) and not bottomBreakBlock bottomBreakBlock := true isShortBreak := true // line.set_x2(bottomLine, bar_index) // supplyBox := box.new(lastGreenIndex - 1, lastGreenHigh, lastGreenIndex + 1, lastGreenLow, bgcolor=transRedClr, border_color=redClr) if strategy.position_size >= 0 strategy.entry("Short", strategy.short) // New up fractal if upFractal topBreakBlock := false isLongBreak := false topValue := high[n] // topLine := line.new(bar_index[n], topValue, bar_index, topValue, color=color.teal, style=line.style_dotted, width=2) // if not isLongBreak[1] // line.delete(topLine[1]) // New down fractal if downFractal bottomBreakBlock := false isShortBreak := false bottomValue := low[n] // bottomLine := line.new(bar_index[n], bottomValue, bar_index, bottomValue, color=color.maroon, style=line.style_dotted, width=2) // if not isShortBreak[1] // line.delete(bottomLine[1]) // Box state update // activeBoxes = box.all // if array.size(activeBoxes) > 0 and changeColor // for i = 0 to array.size(activeBoxes) - 1 // boxId = array.get(activeBoxes, i) // bVal = box.get_bottom(boxId) // tVal = box.get_top(boxId) // if close < bVal // box.set_bgcolor(boxId, transRedClr) // box.set_border_color(boxId, redClr) // if close > tVal // box.set_bgcolor(boxId, transGreenClr) // box.set_border_color(boxId, greenClr) //PLOTS plotshape(downFractal ,style=shape.triangleup, location=location.belowbar, offset=-n, color=color.new(color.gray,80), size = size.tiny) plotshape(upFractal, style=shape.triangledown, location=location.abovebar, offset=-n, color=color.new(color.gray,80), size = size.tiny) // --- Checklist Table --- // var table checklistTable = table.new(position.bottom_right, 2, 8, bgcolor=color.new(color.gray, 80), border_width=1) // if barstate.islast // table.cell(checklistTable, 0, 0, "Condition", text_color=color.white, text_size=size.small, bgcolor=color.teal) // table.cell(checklistTable, 1, 0, "Status", text_color=color.white, text_size=size.small, bgcolor=color.teal) // table.cell(checklistTable, 0, 1, "Up Fractal", text_size=size.small) // table.cell(checklistTable, 1, 1, upFractal ? "✅" : "❌", text_color=upFractal ? color.green : color.red, text_size=size.small) // table.cell(checklistTable, 0, 2, "Down Fractal", text_size=size.small) // table.cell(checklistTable, 1, 2, downFractal ? "✅" : "❌", text_color=downFractal ? color.green : color.red, text_size=size.small) // table.cell(checklistTable, 0, 3, "Top Break", text_size=size.small) // table.cell(checklistTable, 1, 3, isLongBreak ? "✅" : "❌", text_color=isLongBreak ? color.green : color.red, text_size=size.small) // table.cell(checklistTable, 0, 4, "Bottom Break", text_size=size.small) // table.cell(checklistTable, 1, 4, isShortBreak ? "✅" : "❌", text_color=isShortBreak ? color.green : color.red, text_size=size.small) // table.cell(checklistTable, 0, 5, "Last Red Candle", text_size=size.small) // table.cell(checklistTable, 1, 5, close < open ? "✅" : "❌", text_color=close < open ? color.green : color.red, text_size=size.small) // table.cell(checklistTable, 0, 6, "Last Green Candle", text_size=size.small) // table.cell(checklistTable, 1, 6, close > open ? "✅" : "❌", text_color=close > open ? color.green : color.red, text_size=size.small) // table.cell(checklistTable, 0, 7, "Box Color Change Active", text_size=size.small) // table.cell(checklistTable, 1, 7, changeColor ? "✅" : "❌", text_color=changeColor ? color.green : color.red, text_size=size.small)