মুভিং এভারেজ ডাবল-ক্লিক গোল্ডেন ক্রস কন্টিনিউয়াস রাইজ কৌশল


সৃষ্টির তারিখ: 2023-11-13 10:47:48 অবশেষে সংশোধন করুন: 2023-11-13 10:47:48
অনুলিপি: 0 ক্লিকের সংখ্যা: 649
1
ফোকাস
1617
অনুসারী

মুভিং এভারেজ ডাবল-ক্লিক গোল্ডেন ক্রস কন্টিনিউয়াস রাইজ কৌশল

ওভারভিউ

এটি একটি ট্রেডিং কৌশল যা একটি চলমান গড় লিনিয়ার ফর্ক ফর্ম্যাট ব্যবহার করে এবং প্রবণতা লাইনের ক্রমাগত উত্থান-পতনের সাথে কাজ করে। যখন দ্রুত লাইনটি নীচের দিক থেকে ধীর লাইনটি ভেঙে দেয়, তখন একটি সোনার ফর্ক সংকেত তৈরি হয়। যদি সোনার ফর্কের পরে প্রবণতা অব্যাহত থাকে তবে এই পর্যায়ে আরও পজিশন খোলা যেতে পারে। যখন দামটি স্টপ লস লাইন বা স্টপ লস লাইনে পৌঁছে যায়, তখন স্টপ লস বা স্টপ লস নির্বাচন করা যেতে পারে।

কৌশল নীতি

এই কৌশলটি মূলত মুভিং এভারেজের গোল্ডফোর্ক আকৃতির উপর ভিত্তি করে প্রবেশের সময় নির্ধারণ করে। বিশেষত, একটি দ্রুত চলমান গড় MA1 এবং একটি ধীর চলমান গড় MA2 সংজ্ঞায়িত করে। যখন MA1 নীচের দিক থেকে MA2 কে ভেঙে দেয়, তখন অতিরিক্ত সংকেত দেওয়া হয়।

স্বল্পমেয়াদী গোল্ডফর্কের কারণে মিথ্যা সংকেত এড়ানোর জন্য, কৌশলটি একটি কোণীয় হ্রাসের বিচার যুক্ত করে, যা কেবলমাত্র যখন এমএ 2 এর কোণটি সেট করা হ্রাসের চেয়ে বড় হয় তখনই কেনার সংকেত ট্রিগার করে। এটি কিছু অ-প্রবণতার স্বল্পমেয়াদী উত্থানকে ফিল্টার করতে পারে।

কৌশলটি একই সাথে স্টপ লস এবং স্টপ ব্রেক লাইন সেট করে। স্টপ লস বাজারকে হঠাৎ করে ঘুরিয়ে দেওয়ার ফলে ক্ষতি এড়াতে ব্যবহৃত হয় এবং স্টপ ব্রেক লাইন লাভজনক প্রস্থানকে লক করার জন্য ব্যবহৃত হয়। এটি প্রবেশের দামের নির্দিষ্ট শতাংশের পরিসীমা হিসাবে নির্দিষ্ট করা হয়েছে।

যখন দাম বৃদ্ধি স্টপ স্টপ পয়েন্টে পৌঁছায়, কৌশলটি স্টপ স্টপ অবলম্বন করে। একই সময়ে, যদি এই রাউন্ডের দাম বৃদ্ধি শক্তিশালী হয় তবে কৌশলটি আবারও বিপরীত অপারেশন করে।

সামর্থ্য বিশ্লেষণ

এটি একটি সহজ এবং স্বজ্ঞাত ট্রেন্ড ট্র্যাকিং কৌশল। এর কিছু সুবিধা রয়েছেঃ

  1. চলমান গড়ের সংমিশ্রণ ব্যবহার করে বাজারের গোলমালকে ফিল্টার করুন এবং প্রবণতার দিকটি লক করুন
  2. কোণীয় ঘাটতিগুলি স্বল্পমেয়াদী কম্পনের দ্বারা বিভ্রান্ত হওয়া এড়াতে পারে
  3. দু’দিকের অপারেশন, ঝড়ের সময় লাভজনক
  4. স্টপ লস স্টপ সেট করুন, ঝুঁকি নিয়ন্ত্রণ করুন

ঝুঁকি বিশ্লেষণ

এই কৌশলটির কিছু ঝুঁকি রয়েছে যা সম্পর্কে সতর্ক থাকা দরকারঃ

  1. মুভিং এভারেজ পিছিয়ে আছে, দামের বিপর্যয় ঘটাতে পারে
  2. স্টপ লস থাকলেও, বাজারে স্টপ লস অতিক্রম করার সম্ভাবনা রয়েছে
  3. দ্বিপাক্ষিক লেনদেনের ঝুঁকি দ্বিগুণ, বিক্রয় কেন্দ্রের ভুল নির্বাচন ক্ষতির কারণ হতে পারে
  4. ভুল প্যারামিটার সেট, যেমন মুভিং এভারেজ পিরিয়ড নির্বাচন, যা কৌশলটির কার্যকারিতা প্রভাবিত করতে পারে

অপ্টিমাইজেশান দিক

এই কৌশলটি আরও উন্নত করা যেতে পারে নিম্নলিখিত উপায়েঃ

  1. MACD, বুলিন ব্যান্ড ইত্যাদির মতো ট্রেন্ড-নির্ণয়কারী সূচকগুলি বৃদ্ধি করুন, অবস্থান নির্ধারণের নির্ভুলতা বাড়ান
  2. মেশিন লার্নিং এবং অন্যান্য পদ্ধতি ব্যবহার করে চলমান গড়ের গতিশীল অপ্টিমাইজেশনের সময়কালের প্যারামিটার
  3. স্টপ লস স্টপ সেটিং, যেমন ট্র্যাকিং স্টপ
  4. লেনদেনের পরিমাণ নিয়ন্ত্রণ করুন এবং অত্যধিক ক্ষতি এড়িয়ে চলুন
  5. এই রাউন্ডের প্রবণতার শক্তি নির্ণয় করার জন্য পর্বের সূচকগুলির সাথে একত্রিত করুন, পজিশন খোলার শক্তিকে গতিশীলভাবে সামঞ্জস্য করুন

সারসংক্ষেপ

সামগ্রিকভাবে, এটি একটি সহজ এবং ব্যবহারিক প্রবণতা ট্র্যাকিং কৌশল। এটির কিছু সুবিধা রয়েছে তবে ঝুঁকিগুলিও বিবেচনা করা দরকার। আরও প্যারামিটার অপ্টিমাইজেশন, সূচক পছন্দ, স্টপ লস স্টপ সেটিং ইত্যাদির মাধ্যমে উন্নতি করা যায়, যা আরও ভাল স্থিতিশীল আয় অর্জন করতে পারে। তবে কোনও কৌশলই বাজার ব্যবস্থার ঝুঁকিকে পুরোপুরি এড়াতে পারে না, ঝুঁকি সচেতনতা তৈরি করা এবং সতর্কতার সাথে বাণিজ্য করা প্রয়োজন।

কৌশল সোর্স কোড
/*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")