MACD ইন্ডিকেটর ব্রেকআউট ট্রেডিং কৌশল


সৃষ্টির তারিখ: 2023-09-12 15:32:12 অবশেষে সংশোধন করুন: 2023-09-12 15:32:12
অনুলিপি: 1 ক্লিকের সংখ্যা: 789
1
ফোকাস
1617
অনুসারী

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

নীতিমালাঃ

  1. দ্রুত EMA এবং ধীর EMA গণনা করুন, যার পার্থক্য MACD কার্ভ গঠন করে।

  2. MACD কার্ভের উপর EMA মসৃণকরণ করে MACD সংকেত লাইন পাওয়া যায়।

  3. যখন MACD উপরে সিগন্যাল লাইন অতিক্রম করে তখন বেশি কাজ করে, যখন সিগন্যাল লাইন অতিক্রম করে তখন খালি থাকে।

  4. ঝুঁকি ব্যবস্থাপনার জন্য শতকরা ক্ষতি বন্ধের সীমা নির্ধারণ করুন।

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

  1. MACD ইন্ডিকেটর একটি একক EMA এর চেয়ে ভাল, যা ট্রেন্ডকে আরও পরিষ্কারভাবে বিচার করতে পারে।

  2. ট্রেডিং পদ্ধতিতে অগ্রগতি করে সময়মতো ট্রেন্ডিংয়ের সুযোগকে কাজে লাগানো।

  3. স্টপ লস স্টপ ব্যবস্থা ট্রেডিংয়ের ঝুঁকি নিয়ন্ত্রণে সহায়তা করে।

এই কৌশলের ঝুঁকিঃ

  1. MACD কার্ভের শূন্য অক্ষের কাছাকাছি আরও বেশি মিথ্যা ব্রেকিং সিগন্যাল দেখা দিতে পারে।

  2. বিভিন্ন ধরণের লেনদেনের জন্য প্যারামিটারগুলিকে অপ্টিমাইজ করা প্রয়োজন।

  3. ট্রেন্ডিং ট্রেডিং একটি অপ্রত্যাশিত ঘটনা দ্বারা প্রভাবিত হয়, এবং স্টপ লস সেট করা আবশ্যক।

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

কৌশল সোর্স কোড
/*backtest
start: 2023-01-01 00:00:00
end: 2023-09-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3 
strategy("uray MACD", overlay=false, pyramiding = 0, calc_on_every_tick=true, precision=2, currency="USD", default_qty_value=10, default_qty_type=strategy.cash,initial_capital=100,commission_type=strategy.commission.percent,commission_value=0.1) 

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 6, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 6, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
inTimeframe()  => true


isPosLong    = strategy.position_size > 0
isPosShort   = strategy.position_size < 0
isNoMarginPos= strategy.position_size == 0

fastLength    = input(12, minval = 1, title = "MACD fast")
slowlength    = input(26, minval = 1, title = "MACD slow")
MACDLength    = input( 9, minval = 1, title = "MACD length")
stopLoss      = input( 10, minval = 1, title = "Stop Loss (price %)", type=float)
takeProfit    = input( 50, minval = 1, title = "Take Profit (price %)", type=float)
src           = close   // Source of Calculations (Close of Bar)

MACD  = ta.ema(src, fastLength) - ta.ema(src, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD
stopLossValue      = close*(stopLoss/100)/syminfo.mintick
takeProfitValue    = close*(takeProfit/100)/syminfo.mintick
switchLongTrigger  = ta.crossover(delta, 0)
switchShortTrigger = ta.crossunder(delta, 0)
closeLongTrigger   = ta.crossunder(delta, 0)
closeShortTrigger  = ta.crossover(delta, 0)
entryLongTrigger   = ta.crossover(delta, 0)
entryShortTrigger  = ta.crossunder(delta, 0)

// if inTimeframe()
//     if isNoMarginPos
//         if entryLongTrigger
//             strategy.entry("Long", strategy.long,  comment="Entry Long")
//             strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue)   
//         if entryShortTrigger
//             strategy.entry("Short", strategy.short, comment="Entry Short")  
//             strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue)   
//     if isPosShort
//         if switchLongTrigger
//             strategy.close_all()    
//             strategy.entry("Long", strategy.long, comment="switch Long")
//             strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue)   
//         if closeLongTrigger
//             strategy.close_all()    
//     if isPosLong 
//         if switchShortTrigger
//             strategy.close_all()   
//             strategy.entry("Short", strategy.short, comment="switch Short")
//             strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue) 
//         if closeShortTrigger
//             strategy.close_all()   

if inTimeframe()
    strategy.entry("Long", strategy.long,  comment="Entry Long", when=entryLongTrigger)
    strategy.close("Long", when=entryShortTrigger)
    strategy.entry("Short", strategy.short,  comment="Entry Short", when=entryShortTrigger)
    strategy.close("Short", when=entryLongTrigger)
    strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryShortTrigger) 
    strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryLongTrigger)