গড় বিপরীত গতির কৌশল

লেখক:চাওঝাং, তারিখঃ ২০২৩-১১-১৫ ১৭ঃ৪০ঃ৫৯
ট্যাগঃ

img

সারসংক্ষেপ

গড় বিপরীত গতির কৌশল একটি ট্রেন্ড ট্রেডিং কৌশল যা স্বল্পমেয়াদী মূল্য গড়গুলি ট্র্যাক করে। এটি মধ্যমেয়াদী বাজার প্রবণতা বিচার করতে গড় বিপরীত গতির সূচক এবং গতির সূচককে একত্রিত করে।

কৌশলগত যুক্তি

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

লং সিগন্যালের জন্য, দামটি একটি স্ট্যান্ডার্ড ডিভিয়েশন দ্বারা গড় বিপরীতমুখী রেখার নীচে থাকা দরকার, বন্ধের দামটি লং সময়কালের এসএমএর নীচে এবং ট্রেন্ড এসএমএর উপরে, যদি এই তিনটি শর্ত পূরণ করা হয় তবে একটি লং পজিশন খোলা হবে। বন্ধের শর্তটি যখন দামটি লং সময়ের এসএমএর উপরে ভেঙে যায়।

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

এই কৌশলটি মুনাফা গ্রহণ এবং স্টপ লস ম্যানেজমেন্টের জন্য শতকরা মুনাফা লক্ষ্যমাত্রা এবং শতকরা স্টপ লসকে একত্রিত করে।

প্রস্থান পদ্ধতিটি চলমান গড় ক্রসওভার বা রৈখিক রিগ্রেশন ক্রসওভারের মধ্যে বেছে নিতে পারে।

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

সুবিধা

  1. গড় বিপরীতমুখী সূচক মূল্য কেন্দ্র থেকে মূল্যের বিচ্যুতি কার্যকরভাবে বিচার করতে পারে।

  2. গতির সূচক এসএমএ স্বল্পমেয়াদী বাজারের গোলমাল ফিল্টার করতে পারে।

  3. দ্বিমুখী ট্রেডিং সমস্ত দিকের ট্রেন্ডের সুযোগগুলি পুরোপুরি ক্যাপচার করতে পারে।

  4. মুনাফা গ্রহণ এবং স্টপ লস প্রক্রিয়া কার্যকরভাবে ঝুঁকি নিয়ন্ত্রণ করতে পারে।

  5. বাজার অবস্থার সাথে খাপ খাইয়ে নেওয়ার জন্য নির্বাচিত প্রস্থান পদ্ধতিগুলি নমনীয় হতে পারে।

  6. একটি সম্পূর্ণ ট্রেন্ড ট্রেডিং কৌশল যা মধ্যমেয়াদী প্রবণতাকে আরও ভালভাবে ক্যাপচার করে।

ঝুঁকি

  1. গড় বিপরীতের সূচকটি পরামিতি সেটিংসে সংবেদনশীল, ভুল থ্রেশহোল্ড সেটিংগুলি মিথ্যা সংকেত সৃষ্টি করতে পারে।

  2. বাজারের অস্থির অবস্থার মধ্যে, স্টপ লস খুব ঘন ঘন সক্রিয় হতে পারে।

  3. পার্শ্ববর্তী প্রবণতা থাকলে, ট্রেডিং ফ্রিকোয়েন্সি খুব বেশি হতে পারে, যা ট্রেডিং খরচ এবং স্লিপিং ঝুঁকি বৃদ্ধি করে।

  4. যখন ট্রেডিং ইনস্ট্রুমেন্টের পর্যাপ্ত তরলতা নেই, তখন স্লিপজ কন্ট্রোল অপ্টিমাম হতে পারে না।

  5. দ্বি-দিকনির্দেশমূলক ট্রেডিংয়ের ঝুঁকি বেশি, তাই সতর্কতার সাথে অর্থ পরিচালনা করা প্রয়োজন।

এই ঝুঁকিগুলি প্যারামিটার অপ্টিমাইজেশান, স্টপ লস সমন্বয়, অর্থ ব্যবস্থাপনা ইত্যাদির মাধ্যমে নিয়ন্ত্রণ করা যেতে পারে।

অপ্টিমাইজেশান নির্দেশাবলী

  1. বিভিন্ন ট্রেডিং ইনস্ট্রুমেন্টের সাথে আরও ভালভাবে মানিয়ে নিতে গড় রিভার্সন এবং গতির সূচকগুলির প্যারামিটার সেটিংগুলি অনুকূলিত করুন।

  2. প্রবণতা সনাক্তকরণ ক্ষমতা উন্নত করার জন্য প্রবণতা সনাক্তকরণ সূচক যোগ করুন।

  3. স্টপ লস কৌশলকে অপ্টিমাইজ করা যাতে বাজারের উল্লেখযোগ্য ওঠানামা আরও ভালোভাবে সামঞ্জস্য করা যায়।

  4. বাজারের অবস্থার উপর ভিত্তি করে অবস্থানের আকারগুলি সামঞ্জস্য করার জন্য অবস্থান আকারের মডিউল যুক্ত করুন।

  5. আরও ঝুঁকি ব্যবস্থাপনা মডিউল যোগ করুন, যেমন সর্বোচ্চ ড্রাউন কন্ট্রোল, ইক্যুইটি কার্ভ কন্ট্রোল ইত্যাদি।

  6. কৌশলগত পরামিতিগুলি স্বয়ংক্রিয়ভাবে অপ্টিমাইজ করার জন্য মেশিন লার্নিং পদ্ধতিগুলি একত্রিত করার বিষয়টি বিবেচনা করুন।

সংক্ষিপ্তসার

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


/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 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/
// © GlobalMarketSignals

//@version=4
strategy("GMS: Mean Reversion Strategy", overlay=true)

LongShort       = input(title="Long Only or Short Only or Both?", type=input.string, defval="Both", options=["Both", "Long Only", "Short Only"])
Lookback        = input(title="Length", type=input.integer, defval=10, minval=0)
LThr1           = input(title="Upper threshold", type=input.float, defval=1, minval=0)
LThr            = input(title="Lower threshold", type=input.float, defval=-1, maxval=0)
src             = input(title="Source", type=input.source, defval=close)
LongShort2      = input(title="Linear Regression Exit or Moving Average Exit?", type=input.string, defval="MA", options=["LR", "MA"])
SMAlenL         = input(title="MA/LR Exit Length", type = input.integer ,defval=10)
SMALen2         = input(title="Trend SMA Length", type = input.integer ,defval=200)
AboveBelow      = input(title="Above or Below Trend SMA?", type=input.string, defval="Above", options=["Above", "Below", "Don't Include"])
PTbutton        = input(title="Profit Target On/Off", type=input.bool, defval=true)
ProfitTarget    = input(title="Profit Target %", type=input.float, defval=1, step=0.1, minval=0)
SLbutton        = input(title="Stop Loss On/Off", type=input.bool, defval=true)
StopLoss        = input(title="Stop Loss %", type=input.float, defval=-1, step=0.1, maxval=0)

x               = (src-linreg(src,Lookback,0))/(stdev(src,Lookback))

plot(linreg(src,Lookback,0))

//PROFIT TARGET & STOPLOSS

if PTbutton == true and SLbutton == true
    strategy.exit("EXIT", profit=((close*(ProfitTarget*0.01))/syminfo.mintick), loss=((close*(StopLoss*-0.01))/syminfo.mintick))
else
    if PTbutton == true and SLbutton == false
        strategy.exit("PT EXIT", profit=((close*(ProfitTarget*0.01))/syminfo.mintick))
    else
        if PTbutton == false and SLbutton == true
            strategy.exit("SL EXIT", loss=((close*(StopLoss*-0.01))/syminfo.mintick))
        else    
            strategy.cancel("PT EXIT")


////////////////////////
//MOVING AVERAGE EXIT//
//////////////////////

if LongShort=="Long Only" and AboveBelow=="Above" and LongShort2 =="MA"
    strategy.entry("LONG", true, when = x<LThr and close<sma(close,SMAlenL) and close>sma(close,SMALen2))
    strategy.close("LONG", when = close>sma(close,SMAlenL))

if LongShort=="Long Only" and AboveBelow=="Below" and LongShort2 =="MA"
    strategy.entry("LONG", true, when = x<LThr and close<sma(close,SMAlenL) and close<sma(close,SMALen2))
    strategy.close("LONG", when = close>sma(close,SMAlenL))

if LongShort=="Long Only" and AboveBelow=="Don't Include" and LongShort2 =="MA"
    strategy.entry("LONG", true, when = x<LThr and close<sma(close,SMAlenL) )
    strategy.close("LONG", when = close>sma(close,SMAlenL))
    
///////    
    
if LongShort=="Short Only" and AboveBelow=="Above" and LongShort2 =="MA"
    strategy.entry("SHORT", false, when = x>LThr1 and close>sma(close,SMAlenL) and close>sma(close,SMALen2))
    strategy.close("SHORT", when = close<sma(close,SMAlenL))

if LongShort=="Short Only" and AboveBelow=="Below" and LongShort2 =="MA"
    strategy.entry("SHORT", false, when = x>LThr1 and close>sma(close,SMAlenL)   and close<sma(close,SMALen2))
    strategy.close("SHORT", when = close<sma(close,SMAlenL))

if LongShort=="Short Only" and AboveBelow=="Don't Include" and LongShort2 =="MA"
    strategy.entry("SHORT", false, when = x>LThr1  and close>sma(close,SMAlenL)  )
    strategy.close("SHORT", when = close<sma(close,SMAlenL))
    
//////

if LongShort=="Both" and AboveBelow=="Above" and LongShort2 =="MA"
    strategy.entry("LONG", true, when = x<LThr and close<sma(close,SMAlenL) and close>sma(close,SMALen2))
    strategy.close("LONG", when = close>sma(close,SMAlenL))

if LongShort=="Both" and AboveBelow=="Below" and LongShort2 =="MA"
    strategy.entry("LONG", true, when = x<LThr and close<sma(close,SMAlenL) and close<sma(close,SMALen2))
    strategy.close("LONG", when = close>sma(close,SMAlenL))

if LongShort=="Both" and AboveBelow=="Don't Include" and LongShort2 =="MA"
    strategy.entry("LONG", true, when = x<LThr and close<sma(close,SMAlenL) )
    strategy.close("LONG", when = close>sma(close,SMAlenL))
    
///////    
    
if LongShort=="Both" and AboveBelow=="Above" and LongShort2 =="MA"
    strategy.entry("SHORT", false, when = x>LThr1 and close>sma(close,SMAlenL) and close>sma(close,SMALen2))
    strategy.close("SHORT", when = close<sma(close,SMAlenL))

if LongShort=="Both" and AboveBelow=="Below" and LongShort2 =="MA"
    strategy.entry("SHORT", false, when = x>LThr1 and close>sma(close,SMAlenL) and close<sma(close,SMALen2))
    strategy.close("SHORT", when = close<sma(close,SMAlenL))

if LongShort=="Both" and AboveBelow=="Don't Include" and LongShort2 =="MA"
    strategy.entry("SHORT", false, when = x>LThr1 and close>sma(close,SMAlenL) )
    strategy.close("SHORT", when = close<sma(close,SMAlenL))
    
/////////////////
//LIN REG EXIT//
///////////////

if LongShort=="Long Only" and AboveBelow=="Above" and LongShort2 =="LR"
    strategy.entry("LONG", true, when = x<LThr and close<linreg(close,SMAlenL,0) and close>sma(close,SMALen2))
    strategy.close("LONG", when = close>linreg(close,SMAlenL,0))

if LongShort=="Long Only" and AboveBelow=="Below" and LongShort2 =="LR"
    strategy.entry("LONG", true, when = x<LThr and close<linreg(close,SMAlenL,0) and close<sma(close,SMALen2))
    strategy.close("LONG", when = close>linreg(close,SMAlenL,0))

if LongShort=="Long Only" and AboveBelow=="Don't Include" and LongShort2 =="LR"
    strategy.entry("LONG", true, when = x<LThr and close<linreg(close,SMAlenL,0) )
    strategy.close("LONG", when = close>linreg(close,SMAlenL,0))
    
///////    
    
if LongShort=="Short Only" and AboveBelow=="Above" and LongShort2 =="LR"
    strategy.entry("SHORT", false, when = x>LThr1 and close>linreg(close,SMAlenL,0) and close>sma(close,SMALen2))
    strategy.close("SHORT", when = close<linreg(close,SMAlenL,0))

if LongShort=="Short Only" and AboveBelow=="Below" and LongShort2 =="LR"
    strategy.entry("SHORT", false, when = x>LThr1 and close>linreg(close,SMAlenL,0)   and close<sma(close,SMALen2))
    strategy.close("SHORT", when = close<linreg(close,SMAlenL,0))

if LongShort=="Short Only" and AboveBelow=="Don't Include" and LongShort2 =="LR"
    strategy.entry("SHORT", false, when = x>LThr1  and close>linreg(close,SMAlenL,0)  )
    strategy.close("SHORT", when = close<linreg(close,SMAlenL,0))
    
//////

if LongShort=="Both" and AboveBelow=="Above" and LongShort2 =="LR"
    strategy.entry("LONG", true, when = x<LThr and close<linreg(close,SMAlenL,0) and close>sma(close,SMALen2))
    strategy.close("LONG", when = close>linreg(close,SMAlenL,0))

if LongShort=="Both" and AboveBelow=="Below" and LongShort2 =="LR"
    strategy.entry("LONG", true, when = x<LThr and close<linreg(close,SMAlenL,0) and close<sma(close,SMALen2))
    strategy.close("LONG", when = close>linreg(close,SMAlenL,0))

if LongShort=="Both" and AboveBelow=="Don't Include" and LongShort2 =="LR"
    strategy.entry("LONG", true, when = x<LThr and close<linreg(close,SMAlenL,0) )
    strategy.close("LONG", when = close>linreg(close,SMAlenL,0))
    
///////    
    
if LongShort=="Both" and AboveBelow=="Above" and LongShort2 =="LR"
    strategy.entry("SHORT", false, when = x>LThr1 and close>linreg(close,SMAlenL,0) and close>sma(close,SMALen2))
    strategy.close("SHORT", when = close<linreg(close,SMAlenL,0))

if LongShort=="Both" and AboveBelow=="Below" and LongShort2 =="LR"
    strategy.entry("SHORT", false, when = x>LThr1 and close>linreg(close,SMAlenL,0) and close<sma(close,SMALen2))
    strategy.close("SHORT", when = close<linreg(close,SMAlenL,0))

if LongShort=="Both" and AboveBelow=="Don't Include" and LongShort2 =="LR"
    strategy.entry("SHORT", false, when = x>LThr1 and close>linreg(close,SMAlenL,0) )
    strategy.close("SHORT", when = close<linreg(close,SMAlenL,0))






আরো