
یہ ایک اور تکنیکی تجزیہ کی حکمت عملی نہیں ہے ، بلکہ یہ ایک طویل مدتی سرمایہ کاری کا فریم ورک ہے جو بٹ کوائن کے 4 سالہ نصف دورانیے پر مبنی ہے۔ ریٹرننگ کے اعداد و شمار سے پتہ چلتا ہے کہ خرید و فروخت کو سختی سے نصف وقت کے نوڈس کے مطابق انجام دیا جاتا ہے ، ایک ہی دورانیے میں زیادہ سے زیادہ منافع 2000٪ سے زیادہ ہوسکتا ہے۔
بنیادی منطق سادہ اور غیر معمولی ہے: آدھے وقت میں خریدیں ، 40-80 ہفتوں کے بعد بیچوں میں منافع کمائیں ، اور 135 ہفتوں کے بعد دوبارہ اسٹاک بنائیں۔ یہ آسان لگتا ہے ، لیکن اس کے لئے اسٹیل کی طرح کی مرضی کی ضرورت ہے۔
پہلا مرحلہ: خریداری کی مدت کو آدھا کرنا (0-40 ہفتوں) نصف ہونے کے واقعے کے فوراً بعد ذخیرہ اندوزی کرنا پوری حکمت عملی کا مرکزی داخلی نقطہ ہے۔ تاریخی اعداد و شمار سے پتہ چلتا ہے کہ نصف ہونے کے بعد 40 ہفتوں کے اندر بہترین جمع ہونے کی مدت ہوتی ہے ، اس وقت مارکیٹ کا جذبہ عام طور پر سپلائی میں کمی کے اثرات کا مکمل طور پر جواب نہیں دیتا ہے۔
مرحلہ II: منافع کی میعاد ختم ہوگئی ((40-80 ہفتوں) آدھے حصے کے بعد 40-80 ہفتوں میں بٹ کوائن کی قیمتوں میں تاریخی دھماکے کی سنہری کھڑکی ہے۔ 2016 میں آدھے حصے کے بعد 78 ہفتوں میں بٹ کوائن میں 3000 فیصد سے زیادہ اضافہ ہوا۔ 2020 میں آدھے حصے کے بعد بھی ایسا ہی ہے۔ یہ وقت کی کھڑکی قیاس آرائی نہیں ہے ، یہ فراہمی اور طلب کی بنیادی باتوں پر مبنی ریاضی کا نتیجہ ہے۔
مرحلہ III: بیج مارکیٹ میں ذخیرہ اندوزی کی مدت ((135 ہفتوں کے بعد) نصف ہونے کے بعد 135 ہفتوں کے بعد عام طور پر گہری ریچھ کی مارکیٹ میں داخل ہوتا ہے ، اس وقت ڈی سی اے حکمت عملی کو چالو کرنا۔ یہ وقت کا انتخاب اندھے فاریکس ٹریڈنگ کیا ہے؟ فاریکس ٹریڈنگ کے فوائد سے بہتر ہے ، کیونکہ بیل کی اونچائی میں غیر موثر سرمایہ کاری سے بچا جاتا ہے۔
سب سے بڑا خطرہ: ناقص عملدرآمد حکمت عملی کا سب سے بڑا دشمن مارکیٹ کی اتار چڑھاؤ نہیں ہے ، بلکہ انسانی فطرت ہے۔ جب مارکیٹ میں مایوسی ہوتی ہے تو خریدنے کے لئے ریورس آپریشن کی ضرورت ہوتی ہے ، جب مارکیٹ میں مایوسی ہوتی ہے تو منافع ہوتا ہے اور اس کے نتیجے میں پرسکون رہنے کی ضرورت ہوتی ہے۔ تاریخ نے دکھایا ہے کہ 90٪ لوگ مکمل طور پر عمل درآمد نہیں کرسکتے ہیں۔
فنڈ مینجمنٹ کی ضروریات ایک بار میں کل اثاثوں کا 20 فیصد سے زیادہ سرمایہ کاری کرنے کی سفارش نہیں کی جاتی ہے ، کیونکہ ایک ہی دور میں 80 فیصد سے زیادہ کی واپسی کا سامنا کرنا پڑ سکتا ہے۔ 2018 میں ریچھ کا بازار 20،000 ڈالر سے 3،200 ڈالر تک گر گیا ، یہاں تک کہ اگر “صحیح” وقت میں خریدا گیا تو بھی بڑے پیمانے پر خسارے کا سامنا کرنا پڑا۔
مارکیٹ کے ماحول میں تبدیلی کا خطرہ حکمت عملی تاریخی 3 مکمل سائیکل کے اعداد و شمار پر مبنی ہے ، لیکن بٹ کوائن مارکیٹ پختہ ہورہی ہے۔ ادارہ جاتی فنڈز کی آمد ، ای ٹی ایف کی منظوری اور دیگر عوامل روایتی سائیکل قوانین کو تبدیل کرسکتے ہیں۔ ماضی کی کارکردگی مستقبل کی آمدنی کی نمائندگی نہیں کرتی ، یہ کوئی بات نہیں ہے۔
40 ہفتوں کے منافع کا آغازاس کے علاوہ ، یہ بھی کہا گیا ہے کہ اس کی وجہ یہ ہے کہ اس کی وجہ سے اس کی وجہ سے اس کی وجہ سے اس کی وجہ سے اس کی وجہ سے اس کی وجہ سے اس کی وجہ سے اس کی وجہ سے اس کی وجہ سے اس کی وجہ سے اس کی وجہ سے اس کی وجہ سے اس کی وجہ سے اس کی وجہ سے اس کی وجہ سے ہے.
80 ہفتوں کے منافع کا خاتمہتاریخ کے اعداد و شمار سے پتہ چلتا ہے کہ 80 ہفتوں کے بعد قیمتوں میں کمی کے بعد قیمتوں میں اضافے کا ایک اعلی امکان ہے.
135 ہفتہ DCA شروعبیئر مارکیٹ کے نچلے حصے میں اعداد و شمار کا بہترین حل ، اس وقت سرمایہ کاری کا بہترین خطرہ / منافع کا تناسب۔
یہ حکمت عملی 5 سال سے زیادہ کی سرمایہ کاری کے دورانیے کے ساتھ فنڈز کے لئے موزوں ہے ، اور ان سرمایہ کاروں کے لئے موزوں نہیں ہے جن کو پیسہ کی ضرورت ہے یا ان کی خطرہ برداشت کرنے کی صلاحیت کم ہے۔ ایک ہی دورانیے میں 2-3 سال کی اتار چڑھاؤ کی مدت برداشت کرنا پڑتی ہے ، جس سے نفسیاتی دباؤ ہوتا ہے۔
حکمت عملی کی جیت مختصر مدت کی قیمت کی پیش گوئی میں نہیں ہے ، بلکہ طویل مدتی سپلائی اور طلب کے چکر کو سمجھنے میں ہے۔ بٹ کوائن کا نصف ہونا ایک یقینی واقعہ ہے ، لیکن قیمت کے رد عمل کا وقت اور اس کی شدت ابھی بھی غیر یقینی ہے۔
اہم یاد دہانی: یہ ایک اعلی خطرہ سرمایہ کاری کی حکمت عملی ہے ، جس میں سرمایہ کی مکمل کمی کا امکان ہے۔ تاریخی جائزہ لینے والے اعداد و شمار مستقبل کی آمدنی کی ضمانت نہیں دیتے ہیں۔ سرمایہ کاری سے پہلے اپنی خطرے کی برداشت کی صلاحیت کا مکمل اندازہ لگائیں۔
/*backtest
start: 2017-08-17 08:00:00
end: 2025-10-07 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT","balance":500000}]
*/
//@version=6
strategy(title='Bitcoin Halving Cycle Profit - Backtesting', shorttitle='BTC Halv', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1)
// ════════════════════════════════════════════════════════════════════════════════════════════════
// CONFIGURATION & INPUTS
// ════════════════════════════════════════════════════════════════════════════════════════════════
// Backtesting Settings
enableBacktesting = input.bool(true, "Enable Backtesting", group="Backtesting Settings")
enableShortTrades = input.bool(true, "Enable Short Trades", group="Backtesting Settings")
positionSize = input.float(100, "Position Size (%)", minval=10, maxval=100, group="Backtesting Settings")
slippage = input.float(0.05, "Slippage (%)", minval=0, maxval=1, group="Backtesting Settings")
// Main Settings
showHalvingLines = input.bool(true, "Show Halving Lines", group="Display Options")
showProfitZones = input.bool(true, "Show Profit Zones", group="Display Options")
showBackgroundGradient = input.bool(true, "Show Background Gradient", group="Display Options")
showLabels = input.bool(true, "Show Labels", group="Display Options")
showDCAZone = input.bool(true, "Show DCA Zone", group="Display Options")
showInfoTable = input.bool(true, "Show Info Table", group="Display Options")
showTradeSignals = input.bool(true, "Show Trade Signals", group="Display Options")
// Table Settings
tablePosition = input.string("Top Right", "Table Position", options=["Top Left", "Top Right", "Bottom Left", "Bottom Right"], group="Table Settings")
tableSize = input.string("Normal", "Table Size", options=["Small", "Normal", "Large"], group="Table Settings")
tableTransparency = input.int(10, "Table Transparency", minval=0, maxval=50, group="Table Settings")
// Professional Dark Theme Color Scheme
colorHalving = input.color(color.new(#ff6b35, 0), "Halving Line Color", group="Colors")
colorProfitStart = input.color(color.new(#4ecdc4, 0), "Profit Start Color", group="Colors")
colorProfitEnd = input.color(color.new(#ff6b6b, 0), "Profit End Color", group="Colors")
colorDCA = input.color(color.new(#ffd93d, 0), "DCA Color", group="Colors")
colorBackground = input.color(color.new(#4ecdc4, 92), "Background Color", group="Colors")
// Timing Settings
profitStartWeeks = input.int(40, "Profit Start (Weeks)", minval=1, group="Timing")
profitEndWeeks = input.int(80, "Profit End (Weeks)", minval=1, group="Timing")
dcaStartWeeks = input.int(135, "DCA Start (Weeks)", minval=1, group="Timing")
// ════════════════════════════════════════════════════════════════════════════════════════════════
// HELPER FUNCTIONS
// ════════════════════════════════════════════════════════════════════════════════════════════════
// Get table position
getTablePosition() =>
switch tablePosition
"Top Left" => position.top_left
"Top Right" => position.top_right
"Bottom Left" => position.bottom_left
"Bottom Right" => position.bottom_right
=> position.top_right
// Get table text size
getTableTextSize() =>
switch tableSize
"Small" => size.tiny
"Normal" => size.small
"Large" => size.normal
=> size.small
// Get table header text size
getTableHeaderSize() =>
switch tableSize
"Small" => size.small
"Normal" => size.normal
"Large" => size.large
=> size.normal
// Calculate weeks from halving date
weeksFromHalving(halvingTimestamp) =>
(time - halvingTimestamp) / (7 * 24 * 60 * 60 * 1000)
// Check if current time is within profit zone
inProfitZone(halvingTimestamp) =>
weeks = weeksFromHalving(halvingTimestamp)
weeks >= profitStartWeeks and weeks <= profitEndWeeks
// Check if current time is within DCA zone
inDCAZone(halvingTimestamp) =>
weeks = weeksFromHalving(halvingTimestamp)
weeks >= dcaStartWeeks
// ════════════════════════════════════════════════════════════════════════════════════════════════
// HALVING DATES & DATA
// ════════════════════════════════════════════════════════════════════════════════════════════════
// Historical halving dates
halving1 = timestamp(2012, 11, 28)
halving2 = timestamp(2016, 7, 9)
halving3 = timestamp(2020, 5, 11)
halving4 = timestamp(2024, 4, 19)
// Store halving data
type HalvingData
float timestamp
string label
string emoji
color lineColor
halvings = array.new<HalvingData>()
array.push(halvings, HalvingData.new(halving1, "1st Halving\n2012", "⛏️", colorHalving))
array.push(halvings, HalvingData.new(halving2, "2nd Halving\n2016", "⛏️⛏️", colorHalving))
array.push(halvings, HalvingData.new(halving3, "3rd Halving\n2020", "⛏️⛏️⛏️", colorHalving))
array.push(halvings, HalvingData.new(halving4, "4th Halving\n2024", "⛏️⛏️⛏️⛏️", colorHalving))
// Get current cycle status
getCurrentCycleStatus() =>
var string result = "⏳ Pre-Halving Phase"
for i = array.size(halvings) - 1 to 0 by 1
halvingData = array.get(halvings, i)
if time >= halvingData.timestamp
weeks = weeksFromHalving(halvingData.timestamp)
if weeks <= profitStartWeeks
result := "🔶 Accumulation Phase"
break
else if weeks <= profitEndWeeks
result := "🟢 Profit Taking Phase"
break
else if weeks <= dcaStartWeeks
result := "⚠️ Bear Market Phase"
break
else
result := "🟡 DCA Phase"
break
result
// Get weeks until next phase
getWeeksUntilNextPhase() =>
var float result = na
for i = array.size(halvings) - 1 to 0 by 1
halvingData = array.get(halvings, i)
if time >= halvingData.timestamp
weeks = weeksFromHalving(halvingData.timestamp)
if weeks <= profitStartWeeks
result := profitStartWeeks - weeks
break
else if weeks <= profitEndWeeks
result := profitEndWeeks - weeks
break
else if weeks <= dcaStartWeeks
result := dcaStartWeeks - weeks
break
else
result := na
break
result
// Get next phase date
getNextPhaseDate() =>
var float result = na
for i = array.size(halvings) - 1 to 0 by 1
halvingData = array.get(halvings, i)
if time >= halvingData.timestamp
weeks = weeksFromHalving(halvingData.timestamp)
if weeks <= profitStartWeeks
result := halvingData.timestamp + (profitStartWeeks * 7 * 24 * 60 * 60 * 1000)
break
else if weeks <= profitEndWeeks
result := halvingData.timestamp + (profitEndWeeks * 7 * 24 * 60 * 60 * 1000)
break
else if weeks <= dcaStartWeeks
result := halvingData.timestamp + (dcaStartWeeks * 7 * 24 * 60 * 60 * 1000)
break
else
result := na
break
result
// Get current phase name
getCurrentPhaseName() =>
var string result = "Pre-Halving"
for i = array.size(halvings) - 1 to 0 by 1
halvingData = array.get(halvings, i)
if time >= halvingData.timestamp
weeks = weeksFromHalving(halvingData.timestamp)
if weeks <= profitStartWeeks
result := "Accumulation"
break
else if weeks <= profitEndWeeks
result := "Profit Taking"
break
else if weeks <= dcaStartWeeks
result := "Bear Market"
break
else
result := "DCA"
break
result
// Get next phase name
getNextPhaseName() =>
var string result = "Accumulation"
for i = array.size(halvings) - 1 to 0 by 1
halvingData = array.get(halvings, i)
if time >= halvingData.timestamp
weeks = weeksFromHalving(halvingData.timestamp)
if weeks <= profitStartWeeks
result := "Profit Taking"
break
else if weeks <= profitEndWeeks
result := "Bear Market"
break
else if weeks <= dcaStartWeeks
result := "DCA"
break
else
result := "Next Halving"
break
result
// Get phase countdown variables
getPhaseCountdown() =>
var float currentHalvingTimestamp = na
var float profitStartWeeksLeft = na
var float profitEndWeeksLeft = na
var float dcaStartWeeksLeft = na
var string profitStartDateText = "N/A"
var string profitEndDateText = "N/A"
var string dcaStartDateText = "N/A"
var string nextPhaseName = "N/A"
var string nextPhaseDateText = "N/A"
for i = array.size(halvings) - 1 to 0 by 1
halvingData = array.get(halvings, i)
if time >= halvingData.timestamp
currentHalvingTimestamp := halvingData.timestamp
weeks = weeksFromHalving(halvingData.timestamp)
// Calculate countdowns
profitStartWeeksLeft := profitStartWeeks - weeks
profitEndWeeksLeft := profitEndWeeks - weeks
dcaStartWeeksLeft := dcaStartWeeks - weeks
// Calculate dates
profitStartDate = halvingData.timestamp + (profitStartWeeks * 7 * 24 * 60 * 60 * 1000)
profitEndDate = halvingData.timestamp + (profitEndWeeks * 7 * 24 * 60 * 60 * 1000)
dcaStartDate = halvingData.timestamp + (dcaStartWeeks * 7 * 24 * 60 * 60 * 1000)
profitStartDateText := str.format("{0,date,yyyy-MM-dd}", profitStartDate)
profitEndDateText := str.format("{0,date,yyyy-MM-dd}", profitEndDate)
dcaStartDateText := str.format("{0,date,yyyy-MM-dd}", dcaStartDate)
// Get next phase
if weeks <= profitStartWeeks
nextPhaseName := "Profit Taking"
nextPhaseDateText := profitStartDateText
break
else if weeks <= profitEndWeeks
nextPhaseName := "Bear Market"
nextPhaseDateText := profitEndDateText
break
else if weeks <= dcaStartWeeks
nextPhaseName := "DCA"
nextPhaseDateText := dcaStartDateText
break
else
nextPhaseName := "Next Halving"
nextPhaseDateText := "N/A"
break
[profitStartWeeksLeft, profitEndWeeksLeft, dcaStartWeeksLeft, profitStartDateText, profitEndDateText, dcaStartDateText, nextPhaseName, nextPhaseDateText]
// ════════════════════════════════════════════════════════════════════════════════════════════════
// BACKTESTING LOGIC
// ════════════════════════════════════════════════════════════════════════════════════════════════
// Variables for tracking signals
var bool longSignal = false
var bool shortSignal = false
var bool buyAtHalving = false
var bool buyAtDCA = false
var bool sellAtProfitEnd = false
var bool shortAtProfitEnd = false
var bool coverAtDCA = false
// Reset signals
longSignal := false
shortSignal := false
buyAtHalving := false
buyAtDCA := false
sellAtProfitEnd := false
shortAtProfitEnd := false
coverAtDCA := false
// Check for buy signals (Halving and DCA zones)
for i = 0 to array.size(halvings) - 1
halvingData = array.get(halvings, i)
weeks = weeksFromHalving(halvingData.timestamp)
// Buy at halving (within 1 week of halving)
if math.abs(weeks) < 1 and weeks >= 0
buyAtHalving := true
longSignal := true
// Buy at DCA start
if math.abs(weeks - dcaStartWeeks) < 0.5
buyAtDCA := true
longSignal := true
// Sell at profit end
if math.abs(weeks - profitEndWeeks) < 0.5
sellAtProfitEnd := true
if enableShortTrades
shortAtProfitEnd := true
shortSignal := true
// Cover short at DCA (same time as long entry)
if math.abs(weeks - dcaStartWeeks) < 0.5 and enableShortTrades
coverAtDCA := true
// Execute trades
if enableBacktesting
// Long entries
if longSignal and (buyAtHalving or buyAtDCA)
strategy.close("SHORT", comment="Cover Short")
strategy.entry("LONG", strategy.long, qty=positionSize/100 * strategy.equity/close, comment=buyAtHalving ? "Buy at Halving" : "Buy at DCA")
// Long exit and short entry
if sellAtProfitEnd and strategy.position_size > 0
strategy.close("LONG", comment="Sell at Profit End")
if enableShortTrades and shortAtProfitEnd
strategy.entry("SHORT", strategy.short, qty=positionSize/100 * strategy.equity/close, comment="Short at Profit End")
// Short cover (already handled above with long entry)
// ════════════════════════════════════════════════════════════════════════════════════════════════
// VISUAL ELEMENTS
// ════════════════════════════════════════════════════════════════════════════════════════════════
// Trade signals visualization
if showTradeSignals
if longSignal and buyAtHalving
label.new(bar_index, low, "🟢 BUY\nHALVING", style=label.style_label_up, color=color.new(color.green, 0), textcolor=color.white, size=size.normal)
if longSignal and buyAtDCA
label.new(bar_index, low, "🟢 BUY\nDCA", style=label.style_label_up, color=color.new(color.green, 0), textcolor=color.white, size=size.normal)
if sellAtProfitEnd
label.new(bar_index, high, "🔴 SELL\nPROFIT END", style=label.style_label_down, color=color.new(color.red, 0), textcolor=color.white, size=size.normal)
if shortAtProfitEnd and enableShortTrades
label.new(bar_index, high, "🔴 SHORT\nPROFIT END", style=label.style_label_down, color=color.new(color.orange, 0), textcolor=color.white, size=size.normal)
// Background gradient for profit zones
var bool showBgGradient = false
if showBackgroundGradient
for i = 0 to array.size(halvings) - 1
halvingData = array.get(halvings, i)
if inProfitZone(halvingData.timestamp)
showBgGradient := true
break
else
showBgGradient := false
bgcolor(showBackgroundGradient and showBgGradient ? colorBackground : na)
// ════════════════════════════════════════════════════════════════════════════════════════════════
// PROFESSIONAL DARK THEME TABLE - ALWAYS VISIBLE
// ════════════════════════════════════════════════════════════════════════════════════════════════
// Get position variables
var string currentPosition = "FLAT"
var color positionColor = color.new(#cccccc, 0)
var string positionEmoji = "⚪"
// Update position variables
currentPosition := strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "FLAT"
positionColor := strategy.position_size > 0 ? color.new(#00ff88, 0) : strategy.position_size < 0 ? color.new(#ff4444, 0) : color.new(#cccccc, 0)
positionEmoji := strategy.position_size > 0 ? "🟢" : strategy.position_size < 0 ? "🔴" : "⚪"
// Get phase countdown data
[profitStartWeeksLeft, profitEndWeeksLeft, dcaStartWeeksLeft, profitStartDateText, profitEndDateText, dcaStartDateText, nextPhaseName, nextPhaseDateText] = getPhaseCountdown()
// ════════════════════════════════════════════════════════════════════════════════════════════════
// ALERTS
// ════════════════════════════════════════════════════════════════════════════════════════════════
// Enhanced alerts with trade signals
for i = 0 to array.size(halvings) - 1
halvingData = array.get(halvings, i)
weeks = weeksFromHalving(halvingData.timestamp)
if math.abs(weeks) < 0.1 and weeks >= 0
alert("🟢 Bitcoin Halving Cycle: BUY SIGNAL at halving event!", alert.freq_once_per_bar)
if math.abs(weeks - profitEndWeeks) < 0.1
alert("🔴 Bitcoin Halving Cycle: SELL SIGNAL - Last call for profit taking! (" + str.tostring(profitEndWeeks) + " weeks post-halving)", alert.freq_once_per_bar)
if math.abs(weeks - dcaStartWeeks) < 0.1
alert("🟡 Bitcoin Halving Cycle: BUY SIGNAL - DCA accumulation phase has begun! (" + str.tostring(dcaStartWeeks) + " weeks post-halving)", alert.freq_once_per_bar)