
ম্যাকড ট্রেন্ড ট্র্যাকিং শর্ট লাইন কৌশল হল চলমান গড়, ম্যাকড সূচক এবং উইলিয়ামস সূচকের সাথে সংযুক্ত একটি শর্ট লাইন ট্রেডিং কৌশল। এই কৌশলটি তিনটি সূচকের বিভিন্ন সংমিশ্রণ ব্যবহার করে, যা শর্ট লাইনের দামের প্রবণতার বৈশিষ্ট্যগুলি ধরার জন্য একটি বহুমুখী অবস্থানের প্রবেশ এবং প্রস্থান শর্ত তৈরি করে।
এই কৌশলটির মূল ট্রেডিং লজিক নিম্নলিখিত বিষয়গুলির উপর ভিত্তি করেঃ
যখন দাম এক্সপোনেন্সিয়াল মুভিং এভারেজ (ইএমএ) গড় লাইন অতিক্রম করে তখন বেশি দেখুন, যখন দাম নীচে অতিক্রম করে তখন নীচে দেখুন;
MACD-এর দ্রুত লাইনটি দীর্ঘ লাইনের চেয়ে বেশি হলে বেশি দেখুন, দ্রুত লাইনটি দীর্ঘ লাইনের চেয়ে কম হলে কম দেখুন;
উইলিয়ামস সূচকের দ্রুত চলমান গড়ের উচ্চতর গতির গতির গড়ের তুলনায় বেশি দেখা যায়, অন্যদিকে কম দেখা যায়;
এই তিনটি বিষয়ের সমন্বয়ে ভর্তির সিদ্ধান্ত নেওয়া হয়।
বিপরীত পরিস্থিতিতে বিচার করা।
ইএমএ দ্বারা একটি বড় প্রবণতার দিকনির্দেশনা এবং MACD দ্বারা স্বল্পমেয়াদী মূল্যের গতিশীলতার সংমিশ্রণ নির্ধারণ করে, এই কৌশলটি মূল্যের প্রবণতার বৈশিষ্ট্যগুলিকে ভাল প্রবেশের পয়েন্টগুলিতে ক্যাপচার করতে পারে, যার ফলে মুনাফা হয়। উইলিয়াম সূচকটি জাতের অতিরিক্ত ওভারসোলের বিষয়টি আরও যাচাই করতে ব্যবহার করা যেতে পারে, যাতে ভুয়া ব্রেকডাউন এড়ানো যায়।
এই মাল্টি-ইনডিকেটর প্যাকেজিং স্ট্রাকচারটি একটি সাধারণ সংক্ষিপ্ত-রেখা ট্রেন্ড ট্র্যাকিং কৌশল, যার প্রধান সুবিধা হলঃ
তিনটি সূচক একে অপরকে যাচাই করে, যা মিথ্যা সংকেতের সম্ভাবনা হ্রাস করে।
EMA মূল প্রবণতার দিকনির্দেশনা দেয়, MACD সংক্ষিপ্ত লাইনের শক্তিকে দুর্বল বলে মনে করে;
উইলিয়ামস সূচকটি তীব্র ওঠানামা এড়াতে পারে।
রিভার্সাল ইনডিকেটর পোর্টফোলিও সিদ্ধান্ত প্রত্যাহার, ঝুঁকি নিয়ন্ত্রণের সাথে ঘনিষ্ঠভাবে সংযুক্ত।
এই কৌশলটি নিম্নলিখিত প্রধান ঝুঁকির সাথেও জড়িতঃ
মাল্টি-ইনডিকেটর প্যাকেজ কাঠামো জটিল, এবং প্যারামিটার অপ্টিমাইজেশান কঠিন;
“অন্যান্য ব্যবসায়ীদের জন্য, এটি একটি ভাল ধারণা যে আপনি আপনার ব্যবসায়ের জন্য অর্থ প্রদান করবেন।
এই প্রবণতাকে সঠিকভাবে মূল্যায়ন করতে না পারলে, ক্ষতির ঝুঁকি রয়েছে।
প্যারামিটার অপ্টিমাইজেশান এবং স্টপ লস-এর ক্ষেত্রে সর্বোত্তম প্যারামিটার সমন্বয় খুঁজে বের করা এবং একক লেনদেনের সর্বাধিক ক্ষতি নিয়ন্ত্রণের জন্য উপযুক্ত স্তরের স্টপ লস সেট করা।
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে অপ্টিমাইজ করা যায়ঃ
আরও সূচকীয় প্যারামিটার সমন্বয় পরীক্ষা করা এবং সর্বোত্তম প্যারামিটার খুঁজে বের করা;
এই তথ্যের মাধ্যমে, আমরা আরও তথ্য সংগ্রহ করতে পারি, যেমন, ট্রান্সফারের পরিমাণ।
ডায়নামিক স্টপ লস বা ট্র্যাকিং স্টপ লস সেট করুন এবং ঝুঁকি নিয়ন্ত্রণ জোরদার করুন।
মেশিন লার্নিং মডেলের সাহায্যে প্রকৃত ট্রেন্ড রিভার্স পয়েন্ট নির্ণয় করা হয়েছে।
ম্যাকড ট্রেন্ড ট্র্যাকিং শর্ট লাইন কৌশলটি একাধিক সূচক ব্যবহারের সুবিধাগুলি সংযুক্ত করে সংক্ষিপ্ত লাইনের প্রবণতা নির্ধারণের জন্য একই সাথে ঝুঁকি নিয়ন্ত্রণ করে। প্যারামিটার অপ্টিমাইজেশন, স্টপ লস লেভেল সেট এবং আরও ডেটা উত্সের প্রবর্তনের মাধ্যমে কৌশলটির বিজয়ীতা এবং মুনাফা স্তরকে আরও বাড়িয়ে তুলতে পারে। এই কৌশলটি আরও বিস্তৃত এবং গভীর গবেষণার জন্য উপযুক্ত।
/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © platsn
//@version=5
strategy("MACD Willy Strategy", overlay=true, pyramiding=1, initial_capital=10000)
// ******************** Trade Period **************************************
startY = input(title='Start Year', defval=2011, group = "Trading window")
startM = input.int(title='Start Month', defval=1, minval=1, maxval=12, group = "Trading window")
startD = input.int(title='Start Day', defval=1, minval=1, maxval=31, group = "Trading window")
finishY = input(title='Finish Year', defval=2050, group = "Trading window")
finishM = input.int(title='Finish Month', defval=12, minval=1, maxval=12, group = "Trading window")
finishD = input.int(title='Finish Day', defval=31, minval=1, maxval=31, group = "Trading window")
timestart = timestamp(startY, startM, startD, 00, 00)
timefinish = timestamp(finishY, finishM, finishD, 23, 59)
// t1 = time(timeframe.period, "0945-1545:23456")
// window = time >= timestart and time <= timefinish and t1 ? true : false
// t2 = time(timeframe.period, "0930-1555:23456")
// window2 = time >= timestart and time <= timefinish and t2 ? true : false
leverage = input.float(1, title="Leverage (if applicable)", step=0.1, group = "Trading Options")
reinvest = input.bool(defval=false,title="Reinvest profit", group = "Trading Options")
reinvest_percent = input.float(defval=20, title = "Reinvest percentage", group="Trading Options")
// entry_lookback = input.int(defval=10, title="Lookback period for entry condition", group = "Trading Options")
// -------------------------------------------- Data Source --------------------------------------------
src = input(title="Source", defval=close)
// ***************************************************************************************************** Daily ATR *****************************************************
atrlen = input.int(14, minval=1, title="ATR period", group = "Daily ATR")
iPercent = input.float(5, minval=1, maxval=100, step=0.1, title="% ATR to use for SL / PT", group = "Daily ATR")
percentage = iPercent * 0.01
datr = request.security(syminfo.tickerid, "1D", ta.rma(ta.tr, atrlen))
datrp = datr * percentage
// plot(datr,"Daily ATR")
// plot(datrp, "Daily % ATR")
//*********************************************************** VIX volatility index ****************************************
VIX = request.security("BTC_USDT:swap", timeframe.period, close)
vix_thres = input.float(20.0, "VIX Threshold for entry", step=0.5, group="VIX Volatility Index")
// ************************************************ Volume ******************************************************
vol_len = input(50, 'Volume MA Period')
avg_vol = ta.sma(volume, vol_len)
//-------------------------------------------------------- Moving Average ------------------------------------
emalen1 = input.int(200, minval=1, title='EMA', group= "Moving Averages")
ema1 = ta.ema(src, emalen1)
// ------------------------------------------ MACD ------------------------------------------
// Getting inputs
fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Plot colors
col_macd = input(#2962FF, "MACD Line ", group="Color Settings", inline="MACD")
col_signal = input(#FF6D00, "Signal Line ", group="Color Settings", inline="Signal")
col_grow_above = input(#26A69A, "Above Grow", group="Histogram", inline="Above")
col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above")
col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below")
col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below")
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
// ---------------------------------------- William %R --------------------------------------
w_length = input.int(defval=34, minval=1)
w_upper = ta.highest(w_length)
w_lower = ta.lowest(w_length)
w_output = 100 * (close - w_upper) / (w_upper - w_lower)
fast_period = input(defval=5, title='Smoothed %R Length')
slow_period = input(defval=13, title='Slow EMA Length')
w_fast_ma = ta.wma(w_output,fast_period)
w_slow_ma = ta.ema(w_output,slow_period)
// ------------------------------------------------ Entry Conditions ----------------------------------------
L_entry1 = close > ema1 and hist > 0 and w_fast_ma > w_slow_ma
S_entry1 = close < ema1 and hist < 0 and w_fast_ma < w_slow_ma
// -------------------------------------------------- Entry -----------------------------------------------
strategy.initial_capital = 50000
profit = strategy.netprofit
trade_amount = math.floor(strategy.initial_capital*leverage / close)
if strategy.netprofit > 0 and reinvest
trade_amount := math.floor((strategy.initial_capital+(profit*reinvest_percent*0.01))*leverage / close)
else
trade_amount := math.floor(strategy.initial_capital*leverage/ close)
if L_entry1 //and window
strategy.entry("Long", strategy.long, trade_amount)
if S_entry1 //and window
strategy.entry("Short", strategy.short, trade_amount)
// --------------------------------------------------- Exit Conditions -------------------------------------
L_exit1 = hist < 0 and w_fast_ma < w_slow_ma and w_fast_ma < -20
S_exit1 = hist > 0 and w_fast_ma > w_slow_ma and w_fast_ma > -80
// ----------------------------------------------------- Exit ---------------------------------------------
if L_exit1 //and window2
strategy.close("Long")
if S_exit1 //and window2
strategy.close("Short")
// if time(timeframe.period, "1530-1600:23456")
// strategy.close_all()