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

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

img

সারসংক্ষেপ

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

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

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

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

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

সুতরাং, কৌশলএর ট্রেডিং সিগন্যালগুলি স্বল্পমেয়াদী এবং দীর্ঘমেয়াদী চলমান গড়ের ক্রসওভার এবং বন্ধের মূল্য এবং প্রস্থান চলমান গড়ের মধ্যে সম্পর্ক থেকে আসে।

সুবিধা বিশ্লেষণ

এই কৌশলটির সুবিধাগুলো হল:

  1. সহজ এবং বাস্তবায়ন করা সহজ।

  2. কাস্টমাইজযোগ্য পরামিতিগুলি বিভিন্ন বাজারের অবস্থার সাথে খাপ খায়।

  3. চলমান গড়গুলি শব্দকে ফিল্টার করে এবং মূল প্রবণতাটি ধরা দেয়।

  4. আরও অপ্টিমাইজ করার জন্য প্রবণতা, সমর্থন / প্রতিরোধের মতো অন্যান্য প্রযুক্তিগত সূচক অন্তর্ভুক্ত করতে পারে।

  5. নিয়ন্ত্রণযোগ্য ঝুঁকি-প্রতিদান অনুপাত, স্টপ লস প্রক্রিয়া আছে।

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

ঝুঁকিগুলি হলঃ

  1. ট্রেন্ডিং নয় এমন কনসোল্ডেশন মার্কেটে মিথ্যা সংকেত প্রবণতা।

  2. অনুপযুক্ত প্যারামিটার সেটিংগুলি অনুপস্থিত প্রবণতা বা খুব বেশি অবৈধ ট্রেডের কারণ হতে পারে।

  3. ভুল স্টপ লস প্লেসমেন্ট ক্ষতি বাড়িয়ে তুলতে পারে।

  4. ব্যর্থ পলাতকতা ক্ষতির কারণ হতে পারে।

  5. বাজারের পরিবর্তনের জন্য পরামিতিগুলিকে সময়মতো সামঞ্জস্য করতে হবে।

সমাধানগুলির মধ্যে রয়েছে প্যারামিটার অপ্টিমাইজ করা, অন্যান্য ফিল্টার অন্তর্ভুক্ত করা, স্টপগুলি সামঞ্জস্য করা, ট্রেডিংয়ের আগে প্রবণতা নিশ্চিত হওয়ার জন্য অপেক্ষা করা ইত্যাদি।

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

এই কৌশল উন্নত করা যেতে পারেঃ

  1. প্রবণতা নির্ধারণের ব্যবস্থা গড়ে তোলা এবং শুধুমাত্র প্রবণতা নিশ্চিত হওয়ার পরই বাণিজ্য করা।

  2. ভলিউম বা ভল্যাটিলিটি এর মত ফিল্টার যোগ করা।

  3. চলমান গড় সময়ের গতিশীল অপ্টিমাইজেশান।

  4. স্টপ লস মেকানিজমের অপ্টিমাইজেশান করা হচ্ছে।

  5. সমর্থন/প্রতিরোধ এবং অন্যান্য সূচক অন্তর্ভুক্ত করা যাতে সংকেতগুলি আরও নিশ্চিত করা যায়।

  6. বিভিন্ন পণ্য এবং সময়সীমার উপর ভিত্তি করে পরামিতিগুলি সামঞ্জস্য করা।

সিদ্ধান্ত

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


/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 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/
// © TwoChiefs

//@version=4
strategy("John EMA Crossover Strategy", overlay=true)
////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////

//CREATE USER-INPUT VARIABLES

periodShort = input(13, minval=1, title="Enter Period for Short Moving Average")
smoothingShort = input(title="Choose Smoothing Type for Short Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])

periodLong = input(48, minval=1, title="Enter Period for Long Moving Average")
smoothingLong = input(title="Choose Smoothing Type for Long Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])

periodExit = input(30, minval=1, title="Enter Period for Exit Moving Average")
smoothingExit = input(title="Choose Smoothing Type for Exit Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])


src1 = close
pivot = (high + low + close) / 3

//MA CALCULATION FUNCTION
ma(smoothing, src, length) => 
    if smoothing == "RMA"
        rma(src, length)
    else
        if smoothing == "SMA"
            sma(src, length)
        else 
            if smoothing == "EMA"
                ema(src, length)
            else 
                if smoothing == "WMA"
                    wma(src, length)
				else
					if smoothing == "VWMA"
						vwma(src, length)
					else
						if smoothing == "SMMA"
							na(src[1]) ? sma(src, length) : (src[1] * (length - 1) + src) / length
						
						else
							if smoothing == "HullMA"
								wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length)))




//ASSIGN A MOVING AVERAGE RESULT TO A VARIABLE
shortMA=ma(smoothingShort, pivot, periodShort)
longMA=ma(smoothingLong, pivot, periodLong)
exitMA=ma(smoothingExit, pivot, periodExit)

//PLOT THOSE VARIABLES
plot(shortMA, linewidth=4, color=color.yellow,title="The Short Moving Average")
plot(longMA, linewidth=4, color=color.blue,title="The Long Moving Average")
plot(exitMA, linewidth=1, color=color.red,title="The Exit CrossUnder Moving Average")



//BUY STRATEGY
buy = crossover(shortMA,longMA) ? true : na
exit = crossunder(close,exitMA) ? true : na


strategy.entry("long",true,when=buy and time_cond)
strategy.close("long",when=exit and time_cond)


if (not time_cond)
    strategy.close_all()


আরো