মোমেন্টাম মুভিং এভারেজ ক্রসওভার কৌশল


সৃষ্টির তারিখ: 2023-09-21 21:29:22 অবশেষে সংশোধন করুন: 2023-09-21 21:29:22
অনুলিপি: 1 ক্লিকের সংখ্যা: 596
1
ফোকাস
1617
অনুসারী

ওভারভিউ

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

কৌশল নীতি

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

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

বিশেষ অপারেশন সিগন্যাল সেটিং নিম্নরূপঃ

  1. দ্রুতগতির লাইন, নীচে থেকে উপরে, ধীরগতির লাইন ভেঙে, আরও কিছু করুন

  2. দ্রুতগতির লাইনটি ধীরগতির লাইনটি ভেঙে উপরে থেকে নীচে নেমে যায় এবং খালি হয়ে যায়

  3. দাম দ্রুত প্রস্থান লাইন থেকে নেমে গেছে, প্যাকেজিং বেশি

  4. দাম আবারও দ্রুত প্রস্থান লাইন অতিক্রম করে, আবারও বেশি কাজ করে

কৌশলগত সুবিধা

  • ব্যবহার করা সহজ, শুধুমাত্র দুটি চলমান গড় প্যারামিটার কনফিগার করা প্রয়োজন, খুব সহজেই বাস্তবায়ন করা যায়

  • রিটার্নিং ডেটা পর্যাপ্ত, ব্যবহার করা সূচকগুলি কৌশলগুলির কার্যকারিতা মূল্যায়ন করার জন্য আরও সাধারণ

  • অনেকগুলি কনফিগারযোগ্য প্যারামিটার রয়েছে যা প্যারামিটারগুলি সামঞ্জস্য করে কৌশলগুলিকে অনুকূলিত করতে পারে

  • দ্রুত সরানো গড়ের স্টপ লস সেটিং ব্যবহার করে ঝুঁকি নিয়ন্ত্রণ করা যায়

  • “এটি একটি দুর্দান্ত কৌশল, এবং আমি মনে করি এটি একটি দুর্দান্ত কৌশল।

  • মাঝারি ফ্রিকোয়েন্সি ব্যবহার করুন, খুব বেশি লেনদেন করবেন না

কৌশলগত ঝুঁকি

  • প্রবণতা অনুসরণ করার কৌশল হিসাবে, প্রবণতা অস্পষ্ট হলে, আরো মিথ্যা সংকেত তৈরি করা হয়

  • স্লাইডিং এভারেজ নিজেই পিছিয়ে আছে এবং সম্ভবত একটি বিপরীত বিন্দু মিস করেছে

  • ফিক্সড প্যারামিটার সেটিং বাজারের পরিবর্তনের সাথে খাপ খাইয়ে নিতে পারে না, প্যারামিটার অপ্টিমাইজেশান ব্যবহার করা উচিত

  • স্টপ-ড্যামেজ সেটিং খুব দুর্বল এবং সময়মত স্টপ-ড্যামেজ করতে পারে না

  • কৌশলগত সংকেত ঘন, লেনদেনের খরচ বেশি হতে পারে

  • ট্রেডিং সিগন্যালের বিপরীত হতে পারে, যা অন্যান্য সূচকগুলির সাথে একত্রিত হওয়া উচিত

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

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

  • চলমান গড়ের প্যারামিটারগুলিকে বর্তমান বাজারের বৈশিষ্ট্যগুলির সাথে আরও সামঞ্জস্যপূর্ণ করার জন্য অনুকূলিতকরণ পরীক্ষা করা যায়

  • আরও সূচক যুক্ত করা যেতে পারে, যা আরও শক্তিশালী কৌশলগত ব্যবস্থা তৈরি করতে পারে

  • বাজারের উপর ভিত্তি করে রিয়েল-টাইম প্যারামিটারগুলি সামঞ্জস্য করার জন্য স্বনির্ধারিত প্যারামিটার সেটিংস সেট করা যেতে পারে

  • মেশিন লার্নিং অ্যালগরিদমের মাধ্যমে কৌশলগত অপ্টিমাইজেশানকে আরও স্মার্ট করে তোলা।

  • ডায়নামিক স্টপ সেট করুন, স্টপ ট্র্যাক করুন এবং ঝুঁকি নিয়ন্ত্রণ করুন

  • ক্যালকুলেটরগুলিকে সংযুক্ত করা যায়, যাতে ত্রুটির কারণে ত্রুটিগুলি এড়ানো যায়

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2023-01-01 00:00:00
end: 2023-02-03 00:00:00
period: 1d
basePeriod: 1h
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/
// © ehaarjee, ECHKAY, JackBauer007

//@version=4
//study(title="Tale_indicators", overlay=true)
strategy("Tale Indicators Strategy", overlay=true, precision=8, max_bars_back=200, pyramiding=0, initial_capital=20000, commission_type="percent", commission_value=0.1)

len_fast = input(3, minval=1, title="FAST EMA")
src_fast = input(close, title="Source for Fast")
fastMA = ema(src_fast, len_fast)
plot(fastMA, title="Slow EMA", color=color.orange)

len_slow = input(15, minval=1, title="SLOW EMA")
src_slow = input(close, title="Source for Slow")
slowMA = ema(src_slow, len_slow)
plot(slowMA, title="Fast EMA", color=color.blue)

len_fast_exit = input(3, minval=1, title="FAST EMA Exit")
src_fast_exit = input(close, title="Source for Fast Exit")
fastMAE = ema(src_fast_exit, len_fast_exit)
plot(fastMAE, title="Fast EMA Ex", color=color.red)


src_slow_enter_short = input(low, title="Source for Short Entry")
slowMASEn = ema(src_slow_enter_short, len_slow)

src_slow_enter_long = input(high, title="Source for Long Entry")
slowMALEn = ema(src_slow_enter_long, len_slow)

src_slow_exit_short = input(low, title="Source for Short Exit")
slowMASEx = ema(src_slow_enter_short, len_slow)

src_slow_exit_long = input(high, title="Source for Long Exit")
slowMALEx = ema(src_slow_enter_long, len_slow)

enter_long = crossover(fastMA, slowMALEn)
enter_short = crossunder(fastMA, slowMASEn)
exit_long = crossunder(fastMAE, slowMALEx)
exit_short = crossover(fastMAE, slowMALEx)

out_enter = iff(enter_long == true, 1, iff(enter_short == true, -1, 0))
plotarrow(out_enter, "Plot Enter Points", colorup=color.green, colordown=color.red, maxheight = 30)

bull = fastMA > slowMALEn
bear = fastMA < slowMASEn

c = bull ? color.green : bear ? color.red  : color.white
bgcolor(c)

exit_tuner = input(0.005, title="Exit Tuner to touch slowEMA")

bull_exit = (bull and (low>(fastMAE*(1+exit_tuner)))) or exit_long or (not(bear) and (fastMAE>high))
bear_exit = (bear and ((fastMAE*(1-exit_tuner))>high)) or exit_short or (not(bull) and (low>fastMAE))

bull_r = (bull and ((bull_exit[1]) or (bull_exit[2] and bull_exit[1])) and (low<=fastMAE))
bear_r = (bear and ((bear_exit[1]) or (bull_exit[2] and bull_exit[1])) and (fastMAE<=high))

bull_re = (bull and (low<slowMALEn)) and not(enter_long)
bear_re = (bear and (high>slowMASEn)) and not(enter_short)

bull_ree = (bull and ((low<slowMALEn) and not(bull_re[1] or enter_long[1]))) 
bear_ree = (bear and ((high>slowMASEn) and not(bear_re[1] or enter_short[1])))

bull_reenter =  (bull_r) and not(enter_long)
bear_reenter =  (bear_r) and not(enter_short)

plotshape(bull_exit, "Plot Bull Exit", style = shape.arrowdown, color=color.green, size=size.small, text="ExL", location=location.abovebar)
plotshape(bear_exit, "Plot Bear Exit", style = shape.arrowup, color=color.red, size=size.small, text="ExS", location=location.belowbar)

plotshape(bull_reenter, "Plot Bull ReEnter", style = shape.arrowup, color=color.green, size=size.small, text="ReL", location=location.belowbar)
plotshape(bear_reenter, "Plot Bear ReEnter", style = shape.arrowdown, color=color.red, size=size.small, text="ReS", location=location.abovebar)

run_strategy = input(true, title="Run Strategy")
// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 2000)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2100, title = "Thru Year",       type = input.integer, minval = 2000)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)
// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

var long_position_open = false
var short_position_open = false


if (enter_long and not(bull_exit) and not(long_position_open))
//    strategy.entry("LO", strategy.long, qty=4)
    long_position_open := true
    if (short_position_open)
//        strategy.close("SO")
        short_position_open := false

if (bull_reenter and not(long_position_open))  
//    strategy.entry("LO", strategy.long, qty=1)
    long_position_open := true

if (bull_exit and long_position_open)
//  strategy.close("LO")
    long_position_open := false
    
if (enter_short and not(bear_exit) and not(short_position_open))
//    strategy.entry("SO", strategy.short, qty=4)
    short_position_open := true
    if(long_position_open)
//        strategy.close("LO")
        long_position_open := false

if (bear_reenter and not(short_position_open))  
//    strategy.entry("SO", strategy.long, qty=1)
    long_position_open := true

if (bear_exit and short_position_open)
//    strategy.close("SO")
    short_position_open := false

if(run_strategy)
    strategy.entry("LO", strategy.long, when=(window() and enter_long), qty=4)
    strategy.entry("LO", strategy.long, when=(window() and bull_reenter and not(long_position_open)), qty=1)
    strategy.close("LO", when=(window() and bull_exit and long_position_open))
    strategy.entry("SO", strategy.short, when=(window() and enter_short), qty=4)
    strategy.entry("SO", strategy.short, when=(window() and bear_reenter and not(short_position_open)), qty=1)
    strategy.close("SO", when=(window() and bear_exit and short_position_open))