কনফিগারযোগ্য মাল্টি-এমএ ক্রসওভার ভোটিং সিস্টেম

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

সারসংক্ষেপ

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

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

মূল উপাদান এবং নিয়মগুলি হলঃ

  1. একাধিক দ্রুত / ধীর গতির এমএঃ এসএমএ, ডাব্লুএমএ, ভিডাব্লুএমএ ইত্যাদি ব্যবহার করে

  2. লং সিগন্যালঃ সব দ্রুত এমএ ধীর এমএ উপরে ক্রসিং।

  3. প্রস্থান সংকেতঃ ধীর গতির মেরুর নিচে যেকোনো দ্রুত মেরু অতিক্রম।

  4. মুনাফা/হানি পয়েন্টঃ ATR এর উপর ভিত্তি করে স্থির পয়েন্ট।

  5. কনফিগারযোগ্যঃ একাধিক এমএ জোড়ার নমনীয় কনফিগারেশন।

একাধিক এমএ সহ ভোট-ভিত্তিক এন্ট্রি সংকেতের নির্ভরযোগ্যতা উন্নত করে। কাস্টম কনফিগারেশনগুলি নমনীয়তা সরবরাহ করে।

সুবিধা

একক এমএ কৌশলগুলির তুলনায়, সুবিধাগুলি হলঃ

  1. একাধিক এমএ আরও বিস্তৃত প্রবণতা মূল্যায়ন প্রদান করে।

  2. ভোটের মাধ্যমে গোলমাল থেকে মিথ্যা সংকেত এড়ানো যায়।

  3. কাস্টম এমএ কনফিগারেশন থেকে বড় টিউনিং স্পেস।

  4. বিভিন্ন ধরনের অনুমোদনের জন্য সমর্থন অভিযোজনযোগ্যতা বৃদ্ধি করে।

  5. ট্রেডিং ঝুঁকি/প্রতিদান অনুযায়ী লাভ/হানি পয়েন্ট নিয়ন্ত্রণ সংজ্ঞায়িত।

  6. দীর্ঘ সময়সীমার জন্য ভাল কাজ করে, কম বক্ররেখা whipsaws.

  7. সহজ এবং স্বজ্ঞাত যুক্তি, বাস্তবায়ন এবং পরিচালনা করা সহজ।

  8. একক এমএ এর তুলনায় সামগ্রিকভাবে দীর্ঘায়ু সহ আরও স্থিতিশীল।

ঝুঁকি

যাইহোক, কিছু ঝুঁকি আছেঃ

  1. একাধিক এমএ-র সাথে জটিলতা বৃদ্ধি পায়।

  2. অতিরিক্ত অপ্টিমাইজেশনের ঝুঁকি।

  3. প্রবণতা পরিবর্তন চিহ্নিত করতে মৌলিক বিলম্ব।

  4. কোন ভলিউম বিবেচনা করা হয় না, ফাঁদে পড়া ঝুঁকি.

  5. মুনাফা/হানি পয়েন্ট অপ্রয়োজনীয় প্রস্থান হতে পারে।

  6. পারফরম্যান্স বাজার ব্যবস্থার পরিবর্তনের সাপেক্ষে।

  7. রিওয়ার্ড/রিস্ক রেসিও এবং কার্ভের মসৃণতা পর্যবেক্ষণ করতে হবে।

  8. বিভিন্ন যন্ত্রপাতিগুলির মধ্যে স্থিতিশীলতা যাচাইকরণের প্রয়োজন।

উন্নতি

বিশ্লেষণের উপর ভিত্তি করে, উন্নতিগুলি নিম্নলিখিতগুলি অন্তর্ভুক্ত করতে পারেঃ

  1. বিভিন্ন যন্ত্রের মধ্যে পরামিতি স্থিতিশীলতা পরীক্ষা করা।

  2. ভলিউম বা অস্থিরতা নিশ্চিতকরণ যোগ করা।

  3. লাভ/হানি পয়েন্ট অপ্টিমাইজ করা।

  4. সর্বোচ্চ অনুমোদিত ব্যবহারের সীমা নির্ধারণ করা।

  5. গতিশীল অবস্থানের আকারের মডেল তৈরি করা।

  6. মেশিন লার্নিং প্রবর্তনের প্রভাব মূল্যায়ন করা।

  7. সর্বাধিক ড্রাউন এবং বক্ররেখা মসৃণতা পর্যবেক্ষণ।

  8. অতিরিক্ত ফিটিং এড়ানোর জন্য ক্রমাগত পুনরাবৃত্তি।

সিদ্ধান্ত

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


/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 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/
// © levieux

//@version=5
strategy(title='Configurable Multi MA Crossover Voting System', shorttitle='Configurable Multi MA Crossover Voting System', initial_capital=1000, overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
crossoverConfig= input.string(defval="2x4,3x5,4x6", title="Crossover Config")
source= input.source(high)
maType= input.string("WMA", title="Moving Average Type", options=["WMA","SMA","VWMA"])
atrPeriod= input(14, title="ATR Period")
profitAtr = input(10, title="Profit ATR x")
lossAtr = input(5, title="Loss ATR x")


ma(src,length,type) => 
    float ma = switch type
	    "SMA" => ta.sma(src, length)
	    "WMA" => ta.wma(src, length)
	    "VWMA" => ta.vwma(src, length)

crossoverGroups= str.split(crossoverConfig, ",")
crossoverCount= array.size(crossoverGroups)
crossovers= array.new_string(crossoverCount)
positions= array.new_int(crossoverCount, 0)
longVotes= 0
for i= 0 to crossoverCount-1
    crossover= str.tostring(array.get(crossoverGroups, i))
    crossoverBoundaries= str.split(crossover, "x")
    int fastLength= math.round(str.tonumber(array.get(crossoverBoundaries, 0)))
    int slowLength= math.round(str.tonumber(array.get(crossoverBoundaries, 1)))
    wmaFast= ma(source,fastLength,maType)
    wmaSlow= ma(source,slowLength,maType)
    if wmaFast>wmaSlow
        longVotes:= longVotes + 1
        array.set(positions, i, 1)

longCondition= longVotes==crossoverCount and strategy.position_size==0


//profitTicks = profitAtr*ta.atr(atrPeriod)/syminfo.mintick
//lossTicks = lossAtr*ta.atr(atrPeriod)/syminfo.mintick
profitPrice= close+profitAtr*ta.atr(atrPeriod)
lossPrice= close-lossAtr*ta.atr(atrPeriod)

if strategy.position_size>0
    profitPrice:= profitPrice[1]
    lossPrice:= lossPrice[1]

plot(profitPrice, color=color.green)
plot(lossPrice, color=color.red)

if longCondition and profitPrice>0
    strategy.entry("Long", strategy.long)

if longVotes<crossoverCount and strategy.position_size>0 and (high>profitPrice or low<lossPrice)
    strategy.close("Long")
    
longVotes:= 0

আরো