
এটি একটি ট্রেডিং কৌশল যা একটি চলমান গড় লিনিয়ার ফর্ক ফর্ম্যাট ব্যবহার করে এবং প্রবণতা লাইনের ক্রমাগত উত্থান-পতনের সাথে কাজ করে। যখন দ্রুত লাইনটি নীচের দিক থেকে ধীর লাইনটি ভেঙে দেয়, তখন একটি সোনার ফর্ক সংকেত তৈরি হয়। যদি সোনার ফর্কের পরে প্রবণতা অব্যাহত থাকে তবে এই পর্যায়ে আরও পজিশন খোলা যেতে পারে। যখন দামটি স্টপ লস লাইন বা স্টপ লস লাইনে পৌঁছে যায়, তখন স্টপ লস বা স্টপ লস নির্বাচন করা যেতে পারে।
এই কৌশলটি মূলত মুভিং এভারেজের গোল্ডফোর্ক আকৃতির উপর ভিত্তি করে প্রবেশের সময় নির্ধারণ করে। বিশেষত, একটি দ্রুত চলমান গড় MA1 এবং একটি ধীর চলমান গড় MA2 সংজ্ঞায়িত করে। যখন MA1 নীচের দিক থেকে MA2 কে ভেঙে দেয়, তখন অতিরিক্ত সংকেত দেওয়া হয়।
স্বল্পমেয়াদী গোল্ডফর্কের কারণে মিথ্যা সংকেত এড়ানোর জন্য, কৌশলটি একটি কোণীয় হ্রাসের বিচার যুক্ত করে, যা কেবলমাত্র যখন এমএ 2 এর কোণটি সেট করা হ্রাসের চেয়ে বড় হয় তখনই কেনার সংকেত ট্রিগার করে। এটি কিছু অ-প্রবণতার স্বল্পমেয়াদী উত্থানকে ফিল্টার করতে পারে।
কৌশলটি একই সাথে স্টপ লস এবং স্টপ ব্রেক লাইন সেট করে। স্টপ লস বাজারকে হঠাৎ করে ঘুরিয়ে দেওয়ার ফলে ক্ষতি এড়াতে ব্যবহৃত হয় এবং স্টপ ব্রেক লাইন লাভজনক প্রস্থানকে লক করার জন্য ব্যবহৃত হয়। এটি প্রবেশের দামের নির্দিষ্ট শতাংশের পরিসীমা হিসাবে নির্দিষ্ট করা হয়েছে।
যখন দাম বৃদ্ধি স্টপ স্টপ পয়েন্টে পৌঁছায়, কৌশলটি স্টপ স্টপ অবলম্বন করে। একই সময়ে, যদি এই রাউন্ডের দাম বৃদ্ধি শক্তিশালী হয় তবে কৌশলটি আবারও বিপরীত অপারেশন করে।
এটি একটি সহজ এবং স্বজ্ঞাত ট্রেন্ড ট্র্যাকিং কৌশল। এর কিছু সুবিধা রয়েছেঃ
এই কৌশলটির কিছু ঝুঁকি রয়েছে যা সম্পর্কে সতর্ক থাকা দরকারঃ
এই কৌশলটি আরও উন্নত করা যেতে পারে নিম্নলিখিত উপায়েঃ
সামগ্রিকভাবে, এটি একটি সহজ এবং ব্যবহারিক প্রবণতা ট্র্যাকিং কৌশল। এটির কিছু সুবিধা রয়েছে তবে ঝুঁকিগুলিও বিবেচনা করা দরকার। আরও প্যারামিটার অপ্টিমাইজেশন, সূচক পছন্দ, স্টপ লস স্টপ সেটিং ইত্যাদির মাধ্যমে উন্নতি করা যায়, যা আরও ভাল স্থিতিশীল আয় অর্জন করতে পারে। তবে কোনও কৌশলই বাজার ব্যবস্থার ঝুঁকিকে পুরোপুরি এড়াতে পারে না, ঝুঁকি সচেতনতা তৈরি করা এবং সতর্কতার সাথে বাণিজ্য করা প্রয়োজন।
/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//written by [email protected]
//@version=5
strategy(title="MJ-Dual Moving Average",initial_capital=10000,overlay=false)
// import TradingView/ZigZag/6 as ZigZagLib
// // Create Zig Zag instance from user settings.
// var zigZag = ZigZagLib.newInstance(
// ZigZagLib.Settings.new(
// input.float(5.0, "Price deviation for reversals (%)", 0.00001, 100.0, 0.5, "0.00001 - 100"),
// input.int(10, "Pivot legs", 2),
// input(#2962FF, "Line color"),
// input(true, "Extend to last bar"),
// input(true, "Display reversal price"),
// input(true, "Display cumulative volume"),
// input(true, "Display reversal price change", inline = "priceRev"),
// input.string("Absolute", "", ["Absolute", "Percent"], inline = "priceRev"),
// true)
// )
// // Update 'zigZag' object on each bar with new pivots, volume, lines, labels.
// zigZag.update()
// // plot(zigZag.pivots, "zigZag")
ma1= ta.sma(close,8)
ma2= ta.sma(close,21)
angleCriteria = input.int(title="Angle", defval=7, minval=1, maxval=13)
i_lookback = input.int(2, "Angle Period", minval = 1)
i_atrPeriod = input.int(10, "ATR Period", minval = 1)
i_angleLevel = input.int(6, "Angle Level", minval = 1)
i_maSource = input.source(close, "MA Source")
TP = input.float(1, "TP", minval = 0.1)
SL = input.float(1, "SL", minval = 0.1)
f_angle(_src, _lookback, _atrPeriod) =>
rad2degree = 180 / 3.141592653589793238462643 //pi
ang = rad2degree * math.atan((_src[0] - _src[_lookback]) / ta.atr(_atrPeriod)/_lookback)
ang
_angle = f_angle(ma2, i_lookback, i_atrPeriod)
plot(ta.atr(i_atrPeriod), "atr")
// plot(ma1,color=#FF0000)
// plot(ma2,color=#00FF00)
crosso=ta.crossover(ma1,ma2)
crossu=ta.crossunder(ma1,ma2)
_lookback = 15
f_somethingHappened(_cond, _lookback) =>
bool _crossed = false
for i = 1 to _lookback
if _cond[i]
_crossed := true
_crossed
longcrossed = f_somethingHappened(crosso,_lookback)
shortcrossed = f_somethingHappened(crossu,_lookback)
atr_factor = 1
atr = ta.atr(i_atrPeriod)
e = atr * atr_factor
afr = close
afr := nz(afr[1], afr)
atr_factoryHigh = close + e
atr_factoryLow = close - e
if atr_factoryLow > afr
afr := atr_factoryLow
if atr_factoryHigh < afr
afr := atr_factoryHigh
// plot(afr, "afr", display = display.data_window)
// plot(atr_factoryHigh, "afr", color = color.yellow, display = display.all)
// plot(atr_factoryLow, "afr", color = color.green, display = display.all)
inLong() => strategy.position_size > 0
inShort() => strategy.position_size < 0
inZero() => not inLong() and not inShort()
long = longcrossed and _angle > angleCriteria
short= shortcrossed and _angle < -(angleCriteria)
plotshape(long, "Buy", shape.arrowup, location.belowbar, color = #FF0000)
plotshape(short, "Sell", shape.arrowdown, location.abovebar, color = #00FF00)
var longTp = 0.0
var longSl = 0.0
var shortTp = 0.0
var shortSl = 0.0
[b_middle, b_high, b_low] = ta.bb(close, 20, 2)
entry_price = strategy.opentrades.entry_price(0)
if inZero()
if short
longTp := close * (1 + TP/100)
longSl := close * (1 - SL/100)
strategy.entry("LONG",strategy.long, comment = "tp:" + str.tostring(longTp) + " sl:" + str.tostring(longSl))
if long
shortTp := close * (1 - TP/100)
shortSl := close * (1 + SL/100)
strategy.entry("SHORT",strategy.short, comment = "tp:" + str.tostring(shortTp) + " sl:" + str.tostring(shortSl))
if inLong()
// if close - entry_price > close * 0.005
// longSl := entry_price + close * 0.001
if high > longTp
strategy.close("LONG")
if (close - open) > close * 0.014
shortTp := close * (1 - TP/100)
shortSl := close * (1 + SL/100)
strategy.entry("SHORT",strategy.short, comment = "tp:" + str.tostring(shortTp) + " sl:" + str.tostring(shortSl))
if close < longSl
strategy.close("LONG")
if open >= b_high and close >= b_high
strategy.close("LONG")
// if high > b_high and entry_price < high
// strategy.close("LONG")
if inShort()
// if entry_price - close > close * 0.005
// shortSl := entry_price - close * 0.001
if low < shortTp
strategy.close("SHORT")
if (open - close) > close * 0.014
longTp := close * (1 + TP/100)
longSl := close * (1 - SL/100)
strategy.entry("LONG",strategy.long, comment = "tp:" + str.tostring(longTp) + " sl:" + str.tostring(longSl))
if close > shortSl
strategy.close("SHORT")
if open < b_low and close < b_low
strategy.close("SHORT")
// if low < b_low and entry_price > low
// strategy.close("SHORT")