
এই কৌশলটি ট্রেডিং সিগন্যাল হিসাবে চাঁদের ফেজ চক্রের উপর ভিত্তি করে, আরএসআই, এমএসিডি, ওবিভি এবং অন্যান্য একাধিক সূচকগুলির সাথে একত্রিত হয়ে বিটকয়েন এবং অন্যান্য ডিজিটাল মুদ্রার ব্যবসায়ের সুযোগগুলি সনাক্ত করে। এই কৌশলটির প্রধান সুবিধা হ’ল ট্রেডিং সূচক হিসাবে চাঁদের ফেজের এই বাহ্যিক উপাদানটি ব্যবহার করা, যা বেশিরভাগ কৌশলগুলির বিপরীতে কেবলমাত্র প্রযুক্তিগত সূচকগুলির উপর নির্ভর করে, বাজার ম্যানিপুলেশনকে কিছুটা এড়াতে পারে।
এই কৌশলটির কেন্দ্রীয় যুক্তি হল চাঁদের ধাপের চক্রের বিভিন্ন পর্যায়ে ভিত্তি করে সিদ্ধান্ত নেওয়া হয় যে এটি অতিরিক্ত বা কম করার জন্য উপযুক্ত কিনা। চাঁদের ধাপ গণনা করার সূত্রটি হলঃ
চাঁদের ধাপের দৈর্ঘ্য = ২৯.৫৩০৫৮৮২ দিন কোন পূর্ণিমার সময় জানা থাকলে, সেই পূর্ণিমার দিন থেকে বর্তমান সময়ের দিন গণনা করা যায় চাঁদের ফেজের বয়স = পূর্ণিমার দিন থেকে দূরত্বের % চাঁদের ফেজ চক্রের দৈর্ঘ্য চাঁদের ধাপের মান = ((1 + cos ((চাঁদের ধাপের বয়স/চাঁদের ধাপের সময়কাল)*2*π))/2
চাঁদের ধাপের মানের আকারের উপর ভিত্তি করে নির্ধারণ করা যায় যে বর্তমানে কোন চাঁদের ধাপ রয়েছে। চাঁদের ধাপ 0 থেকে 1 এর মধ্যে পরিবর্তিত হয়, মানটি যত বড় হবে তত পূর্ণ চাঁদের কাছাকাছি হবে এবং মানটি যত ছোট হবে তত নতুন চাঁদের কাছাকাছি হবে।
কৌশলটি নির্ধারণ করা হয় যে, মাসিক ফেজ প্রান্তিকের মানের উপর ভিত্তি করে কি অতিরিক্ত বা খালি করার শর্ত রয়েছে। যদি মাসিক ফেজ প্রান্তিকের মানটি অতিরিক্ত প্রান্তিকের মানের চেয়ে বেশি হয় (ডিফল্ট 0.51), তবে অতিরিক্ত করার সুযোগ রয়েছে; যদি মাসিক ফেজ প্রান্তিকের মানটি খালি করার প্রান্তিকের মানের চেয়ে কম হয় (ডিফল্ট 0.49), তবে খালি করার সুযোগ রয়েছে।
এছাড়াও, কৌশলটি ট্রেডিং ভলিউম, আরএসআই, এমএসিডি ইত্যাদির মতো সূচকগুলির সাথে মিলিত হয় যাতে অপ্রত্যাশিত পরিস্থিতিতে ট্রেডিং সংকেত না দেওয়া হয়। ট্রেডিং ভলিউম বৃদ্ধি পেলে এবং আরএসআই এবং এমএসিডি উপযুক্ত হলেই কেবল পজিশন খোলা হবে।
এই কৌশলটির প্রধান সুবিধাগুলো হলঃ
সামগ্রিকভাবে, এই কৌশলটি চাঁদের ধাপের অনন্য সুবিধাটি পুরোপুরি ব্যবহার করে এবং ঝুঁকি নিয়ন্ত্রণের মাধ্যমে কার্যকরভাবে লেনদেনের ঝুঁকি নিয়ন্ত্রণের জন্য উচ্চ-সম্ভাব্যতার লেনদেনের সুযোগগুলি সনাক্ত করার জন্য একাধিক প্রযুক্তিগত সূচক দ্বারা সমর্থিত।
এই কৌশলটি নিম্নলিখিত ঝুঁকির সাথে জড়িতঃ
এই ঝুঁকি নিয়ন্ত্রণের জন্য, নিম্নলিখিত পদক্ষেপগুলি গ্রহণ করা যেতে পারেঃ
প্যারামিটার অপ্টিমাইজেশান এবং সমন্বিত সূচক প্রয়োগের মাধ্যমে ট্রেডিংয়ের ঝুঁকি এড়ানো যায়।
এই কৌশলটি আরও উন্নত করার সুযোগ রয়েছেঃ
এই কৌশলটি মূলধারার প্রযুক্তিগত সূচকগুলির সাথে একত্রিত হয়ে মাসিক পর্যায়ে অনন্য ট্রেডিং সংকেত ব্যবহার করে বিটকয়েন ট্রেডিংয়ের দক্ষতা অর্জন করে। একক সূচক কৌশলগুলির তুলনায় এই কৌশলটি বাজার ম্যানিপুলেশন ঝুঁকির বিরুদ্ধে আরও ভাল প্রতিরোধ করতে পারে এবং এর একটি অনন্য সুবিধা রয়েছে। ঝুঁকি প্রতিরোধ এবং অপ্টিমাইজেশন প্যারামিটারগুলি বন্ধ করে দিয়ে স্থিতিশীলভাবে আরও ভাল লাভ অর্জন করা যায়। এই কৌশলটি আরও উন্নত হতে পারে এবং এর ব্যবহারের সম্ভাবনা রয়েছে।
/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Lunar Phase Strategy by Symphoenix", overlay=true)
// Input parameters
start_year = input(2023, title="Start year")
end_year = input(2023, title="End year")
longPhaseThreshold = input(0.51, title="Long Phase Threshold")
shortPhaseThreshold = input(0.49, title="Short Phase Threshold")
riskPerTrade = input(0.05, title="Risk Per Trade (as a % of Equity)")
stopLossPerc = input(0.01, title="Stop Loss Percentage")
atrLength = input(21, title="ATR Length for Volatility")
trailPerc = input(0.1, title="Trailing Stop Percentage")
maxDrawdownPerc = input(0.1, title="Maximum Drawdown Percentage")
volumeLength = input(7, title="Volume MA Length")
// Constants for lunar phase calculation and ATR
atr = ta.atr(atrLength)
volMA = ta.sma(volume, volumeLength) // Volume moving average
// Improved Lunar Phase Calculation
calculateLunarPhase() =>
moonCycleLength = 29.5305882
daysSinceKnownFullMoon = (time - timestamp("2019-12-12T05:12:00")) / (24 * 60 * 60 * 1000)
lunarAge = daysSinceKnownFullMoon % moonCycleLength
phase = ((1 + math.cos(lunarAge / moonCycleLength * 2 * math.pi)) / 2)
phase
lunarPhase = calculateLunarPhase()
// Advanced Volume Analysis
priceChange = ta.change(close)
obv = ta.cum(priceChange > 0 ? volume : priceChange < 0 ? -volume : 0)
// Additional Technical Indicators
rsi = ta.rsi(close, 14)
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
// Calculate Position Size based on Volatility and Account Equity
calculatePositionSize() =>
equity = strategy.equity
riskAmount = equity * riskPerTrade
positionSize = riskAmount / atr
if positionSize > 1000000000000
positionSize := 1000000000000
positionSize
positionSize = calculatePositionSize()
// Maximum Drawdown Tracking
var float maxPortfolioValue = na
maxPortfolioValue := math.max(maxPortfolioValue, strategy.equity)
drawdown = (maxPortfolioValue - strategy.equity) / maxPortfolioValue
// Check for maximum drawdown
if drawdown > maxDrawdownPerc
strategy.close_all()
strategy.cancel_all()
// Volume Analysis
isVolumeConfirmed = volume > volMA
// Date Check for Backtesting Period
isWithinBacktestPeriod = year >= start_year and year <= end_year
// Entry and Exit Conditions
// Adjusted Entry and Exit Conditions
longCondition = lunarPhase > longPhaseThreshold and lunarPhase < 0.999 and isVolumeConfirmed and obv > obv[1] and rsi < 70 and macdLine > signalLine and isWithinBacktestPeriod
shortCondition = lunarPhase < shortPhaseThreshold and lunarPhase > 0.001 and isVolumeConfirmed and obv < obv[1] and rsi > 30 and macdLine < signalLine and isWithinBacktestPeriod
if longCondition
if strategy.position_size < 0
strategy.close_all()
if strategy.position_size < positionSize
strategy.entry("Long", strategy.long, qty=positionSize)
strategy.exit("Exit Long", "Long", trail_offset=atr * trailPerc, trail_points=atr)
if shortCondition
if strategy.position_size > 0
strategy.close_all()
if strategy.position_size > -positionSize
strategy.entry("Short", strategy.short, qty=positionSize)
strategy.exit("Exit Short", "Short", trail_offset=atr * trailPerc, trail_points=atr)
// Implementing Stop-Loss Logic
longStopLoss = strategy.position_avg_price * (1 - stopLossPerc)
shortStopLoss = strategy.position_avg_price * (1 + stopLossPerc)
if strategy.position_size > 0 and close < longStopLoss
strategy.close("Long")
if strategy.position_size < 0 and close > shortStopLoss
strategy.close("Short")