সমান্তরাল ক্রস কৌশল


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

ওভারভিউ

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

কৌশল নীতি

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

বিশেষত, এই কৌশলটি প্রথমে 50 দিনের গড় এবং 200 দিনের গড় লাইন সংজ্ঞায়িত করে। তারপরে মাল্টি-হেড প্রবেশের শর্তটি দ্রুত গড়ের উপরে ধীর গড়ের মধ্য দিয়ে এবং খালি প্রবেশের শর্তটি দ্রুত গড়ের নীচে ধীর গড়ের মধ্য দিয়ে চলে। লেনদেনের ওভারল্যাপ এড়াতে, কৌশলটি isEntry এবং isExit লোগো পয়েন্ট ব্যবহার করে নিয়ন্ত্রণ করে। প্রবেশের শর্তটি পূরণ হলে, isEntry সত্য হিসাবে সেট করুন এবং যখন প্রস্থান শর্তটি পূরণ হয়, তখন isExit সত্য হিসাবে সেট করুন। কেবলমাত্র যখন isEntry মিথ্যা হয় এবং ক্রয় সংকেত উপস্থিত হয় তখনই মাল্টি-হেড পজিশন খোলা হয়; কেবলমাত্র যখন isExit মিথ্যা হয় এবং বিক্রয় সংকেত উপস্থিত হয় তখনই খালি মাথা খোলা হয়।

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

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

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

  1. এটি সহজ এবং বাস্তবায়নের জন্য সহজ। এটি কেবলমাত্র সমান্তরাল ক্রসিংয়ের উপর নির্ভর করে ট্রেড করতে পারে, যা কোনও ট্রেডিংয়ের অভিজ্ঞতা নেই এমন নতুনদের জন্য উপযুক্ত।

  2. মুভিং গড় লাইন স্বল্পমেয়াদী দামের অস্থিরতাকে কার্যকরভাবে ফিল্টার করতে পারে এবং সুদ বাজারজাত করা এড়াতে পারে।

  3. কাস্টমাইজযোগ্য প্যারামিটার, বহুমুখী। ব্যবহারকারী নিজেই গড় লাইন প্যারামিটার এবং স্টপ-স্টপ-ক্ষতির মান সেট করতে পারেন, কৌশলটি অনুকূলিতকরণের প্যারামিটারগুলি।

  4. কৌশলটি সরাসরি চার্টটিতে মূল গড়রেখা, প্রবেশের পয়েন্ট, স্টপ লস পয়েন্টগুলিকে অঙ্কিত করে, যা চোখের সামনে দেখা যায়।

  5. স্কেলেবলঃ এই কৌশলটির কাঠামোটি সম্পূর্ণ এবং কৌশলটি উন্নত করার জন্য কেবলমাত্র গুরুত্বপূর্ণ ট্রেডিং সিগন্যালগুলি পরিবর্তন করা, সূচক যুক্ত করা ইত্যাদি প্রয়োজন।

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

এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ

  1. বাজারের অপ্রত্যাশিত ঘটনাগুলির ফলে বিপুল মুনাফা হয়, যা থামানো যায় না। দ্রুত গড় মূল্যের পরিবর্তনের জন্য সংবেদনশীল এবং অপ্রত্যাশিত ঘটনার কার্যকর প্রতিক্রিয়া জানাতে পারে না।

  2. যদি আপনি দীর্ঘমেয়াদী বাজারের অস্থিরতা অনুভব করেন তবে আপনি ক্ষতির পুনরাবৃত্তি করতে পারেন।

  3. ট্রেডিং খরচ বিবেচনা করা হয় না। প্রকৃত লেনদেনের সময় চার্জ এবং স্লাইড পয়েন্টের ক্ষতি লাভের উপর মারাত্মক প্রভাব ফেলে।

  4. রিটার্নিং ডেটা ফিটনেস ঝুঁকি. রিয়েল-টাইম পরিস্থিতি জটিল এবং পরিবর্তনশীল, রিটার্নিং ফলাফল বাস্তব যুদ্ধের পারফরম্যান্সের প্রতিনিধিত্ব করে না।

সমাধানঃ

  1. আরো নমনীয় স্ট্যান্ডার্ড সেট করা যেতে পারে, অথবা অতিরিক্ত ব্রেকথ্রু স্ট্যান্ডার্ড যুক্ত করা যেতে পারে।

  2. গড় রেখার দূরত্ব যথাযথভাবে প্রশস্ত করা, লেনদেনের ঘনত্ব হ্রাস করা বা অন্যান্য সূচক দ্বারা সংকেতগুলি ফিল্টার করা যায়।

  3. প্রকৃত লেনদেনের খরচ বিবেচনায় নেওয়ার জন্য, আরও প্রশস্ত স্টপ স্পেস স্থাপন করা উচিত।

  4. বাজারের পরিবর্তিত পরিবেশকে পুরোপুরি বিবেচনা করা উচিত, প্যারামিটারগুলি অপ্টিমাইজ করা উচিত এবং ধীরে ধীরে সামঞ্জস্যতা হ্রাস করা উচিত।

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

এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে উন্নত করা যেতে পারেঃ

  1. বিভিন্ন প্যারামিটার সমন্বয় পরীক্ষা করে, সর্বোত্তম প্যারামিটার খুঁজুন। আপনি ধীরে ধীরে গড় দৈর্ঘ্য পরীক্ষা করতে পারেন, প্যারামিটার সমন্বয় ইত্যাদি।

  2. অন্যান্য সূচকগুলিকে ফিল্টার করুন যাতে অস্থিরতার সময় ভুল লেনদেন এড়ানো যায়। যেমন MACD, KD ইত্যাদি সূচকগুলি।

  3. স্টপ-অফ স্টপ কৌশলগুলিকে অপ্টিমাইজ করুন, যাতে ঝুঁকি ব্যবস্থাপনা আরও কার্যকর হয়। উদাহরণস্বরূপ, স্টপ ট্র্যাকিং, স্টপ হোল্ডিং ইত্যাদি।

  4. পজিশনের আকার বাড়ান, লিভারেজ ব্যবহার করুন, লাভের সুযোগ বাড়ান। তবে ঝুঁকি নিয়ন্ত্রণ করুন।

  5. রিয়েল-ডিস্কের লেনদেনের খরচ বিবেচনা করে, প্রতিক্রিয়া পরামিতিগুলিকে সামঞ্জস্য করে এবং কৌশলগত পরামিতিগুলিকে বাস্তব যুদ্ধে আরও উপযুক্ত করে তোলে।

  6. পরিসংখ্যানগত পদ্ধতির সাথে মিলিত প্যারামিটারের স্থায়িত্বের মূল্যায়ন, ডেটা ফিট করার ঝুঁকি হ্রাস এবং স্থায়িত্ব বাড়ায়।

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2023-10-02 00:00:00
end: 2023-10-09 00:00:00
period: 3m
basePeriod: 1m
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/
// © gjfsdrtytru

//@version=4
strategy("Backtest Engine", "Backtest", overlay=true, commission_type=strategy.commission.percent, commission_value=0.07, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD)


// Start code here...
fastMA = sma(close,50)
slowMA = sma(close,200)

plot(fastMA, "Fast MA",  color.blue)
plot(slowMA, "Slow MA",  color.red)

// Long Enrty/Exit
longCondition = crossover(fastMA,slowMA)
closeLong = crossover(slowMA,fastMA)

// Short Enrty/Exit
shortCondition = crossover(slowMA,fastMA)
closeShort = crossover(fastMA,slowMA)


// Bot web-link alert - {{strategy.order.comment}}
botLONG = "ENTRY LONG ALERT"
botCLOSELONG = "CLOSE LONG ALERT"
botSHORT = "ENTRY SHORT ALERT"
botCLOSESHORT = "CLOSE SHORT ALERT"

//////////////////////////////////////////////////////////////////
//////////////////////// BACKTEST ENGINE \\\\\\\\\\\\\\\\\\\\\\\\\
/////////////////// [NO USER INPUT REQUIRED] /////////////////////
//////////////////////////////////////////////////////////////////

// Time period
testStartYear = input(2020, "Backtest Start Year")
testStartMonth = input(5, "Backtest Start Month")
testStartDay = input(11, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

periodLength = input(3650, "Backtest Period (days)", minval=0,tooltip="Days until strategy ends") * 86400000 // convert days into UNIX time
testPeriodStop = testPeriodStart + periodLength

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

// Convert Take profit and Stop loss to percentage
longTP = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
longSL = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
shortTP = input(title="Short Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
shortSL = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options

// 0% TP/SL = OFF (a value of 0 turns off TP/SL feature)
longProfitPerc = longTP == 0 ? 1000 : longTP
longStopPerc = longSL == 0 ? 1 : longSL
shortProfitPerc = shortTP == 0 ? 1 : shortTP
shortStopPerc = shortSL == 0 ? 1000 : shortSL

// Determine TP/SL price based on percentage given
longProfitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
longStopPrice  = strategy.position_avg_price * (1 - longStopPerc)
shortProfitPrice  = strategy.position_avg_price * (1 - shortProfitPerc)
shortStopPrice  = strategy.position_avg_price * (1 + shortStopPerc)

// Anti-overlap
isEntry_Long = false
isEntry_Long := nz(isEntry_Long[1], false)
isExit_Long = false
isExit_Long := nz(isExit_Long[1], false)
isEntry_Short = false
isEntry_Short := nz(isEntry_Short[1], false)
isExit_Short = false
isExit_Short := nz(isExit_Short[1], false)

entryLong = not isEntry_Long and longCondition
exitLong = not isExit_Long and closeLong
entryShort = not isEntry_Short and  shortCondition
exitShort = not isExit_Short and closeShort

if (entryLong)
    isEntry_Long := true
    isExit_Long := false
if (exitLong)
    isEntry_Long := false
    isExit_Long := true
if (entryShort)
    isEntry_Short := true
    isExit_Short := false
if (exitShort)
    isEntry_Short := false
    isExit_Short := true

// Order Execution
if testPeriod() 
    if entryLong
        strategy.entry(id="Long", long=true, when = entryLong, comment=botLONG) // {{strategy.order.comment}}
    if entryShort
        strategy.entry(id="Short", long=false, when = entryShort, comment=botSHORT) // {{strategy.order.comment}}


// TP/SL Execution
if (strategy.position_size > 0)
    strategy.exit(id="Long SL/TP", from_entry="Long", limit=longProfitPrice, stop=longStopPrice)
    strategy.close(id="Long", when=exitLong, comment=botCLOSELONG) // {{strategy.order.comment}}

if (strategy.position_size < 0)
    strategy.exit(id="Short TP/SL", from_entry="Short", limit=shortProfitPrice, stop=shortStopPrice)
    strategy.close(id="Short", when=exitShort, comment=botCLOSESHORT) // {{strategy.order.comment}}
    
// Draw Entry, TP and SL Levels for Long Positions
plot(strategy.position_size > 0 ? longTP == 0 ? na : longProfitPrice : na, style=plot.style_linebr, color=color.green, title="Long TP")
plot(strategy.position_size > 0 ? strategy.position_avg_price : na, style=plot.style_linebr, color=color.blue, title="Long Entry")
plot(strategy.position_size > 0 ? longSL == 0 ? na : longStopPrice : na, style=plot.style_linebr, color=color.red, title="Long SL")
// Draw Entry, TP and SL Levels for Short Positions
plot(strategy.position_size < 0 ? shortTP == 0 ? na : shortProfitPrice : na, style=plot.style_linebr, color=color.green, title="Short TP")
plot(strategy.position_size < 0 ? strategy.position_avg_price : na, style=plot.style_linebr, color=color.blue, title="Short Entry")
plot(strategy.position_size < 0 ? shortSL == 0 ? na : shortStopPrice : na, style=plot.style_linebr, color=color.red, title="Short SL")