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

SMA EMA MACD
সৃষ্টির তারিখ: 2024-04-12 17:16:06 অবশেষে সংশোধন করুন: 2024-04-12 17:16:06
অনুলিপি: 0 ক্লিকের সংখ্যা: 790
1
ফোকাস
1617
অনুসারী

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

ওভারভিউ

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

কৌশল নীতি

  1. দ্রুত গড় লাইন এবং ধীর গড় লাইন 1 ক্রস আপ, যখন ক্লোজিং মূল্য ধীর গড় লাইন 2 এর উপরে থাকে, ম্যাকড কলামযুক্ত গ্রাফটি 0 এর চেয়ে বড়;
  2. দ্রুত গড় লাইন এবং ধীর গড় লাইন 1 ক্রস ডাউন, যখন ক্লোজিং মূল্য ধীর গড় লাইন 2 এর নীচে থাকে, MACD কলামের চার্টটি 0 এর চেয়ে কম এবং ফাঁকা থাকে;
  3. পজিশন খোলার সাথে সাথে একাধিক স্তরের স্টপ ও স্টপ লস সেট করুন, স্টপ লসটি ঝুঁকি পছন্দ অনুসারে সেট করুন এবং স্টপ লসটি পজিশন রাখার সময় অনুসারে ধীরে ধীরে লাভের জন্য লক করুন।
  4. গড় লাইন চক্র, MACD প্যারামিটার, স্টপ লস লেভেল ইত্যাদি বিভিন্ন বাজারের অবস্থার সাথে খাপ খাইয়ে নিতে পারে।

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

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

  1. সমান্তরাল ক্রসিং হল প্রচলিত ট্রেন্ড ট্র্যাকিং পদ্ধতি, যা সময়মত ট্রেন্ড গঠনের ধরন নেয়।
  2. মাল্টি-লেভেল গড়ের ব্যবহার প্রবণতার শক্তি এবং ধারাবাহিকতা সম্পর্কে আরও বিস্তৃতভাবে বিচার করতে দেয়;
  3. MACD সূচকটি প্রবণতা সনাক্ত করতে এবং গতিশীলতা বিচার করতে কার্যকরভাবে ব্যবহৃত হয়, যা গড় রেখার ক্রসিংয়ের একটি শক্তিশালী পরিপূরক হিসাবে কাজ করে;
  4. মাল্টি-লেভেল স্টপ এবং ডায়নামিক স্টপ-আউট সেটিংস যা ঝুঁকি নিয়ন্ত্রণ করে, মুনাফা চালায় এবং সিস্টেমের স্থিতিশীলতা বাড়ায়;
  5. প্যারামিটারগুলি সামঞ্জস্যযোগ্য, অভিযোজিত এবং বিভিন্ন জাত এবং সময়কালের জন্য নমনীয়ভাবে সেট করা যায়।

কৌশলগত ঝুঁকি

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

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

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

  1. প্রবণতা এবং সংকেত আরও নিশ্চিত করতে RSI, ব্রিন ব্যান্ড ইত্যাদির মতো আরও সূচকগুলি বিবেচনা করা যেতে পারে;
  2. স্টপ লস সেটিং এর জন্য আরও সূক্ষ্ম অপ্টিমাইজেশান করা যায়, যেমন ATR বা শতাংশ স্টপ লস বিবেচনা করা;
  3. বাজারের অস্থিরতার সাথে সামঞ্জস্য রেখে প্যারামিটারগুলিকে সামঞ্জস্য করার ক্ষমতা;
  4. একটি পজিশন ম্যানেজমেন্ট মডিউল চালু করা যেতে পারে, যা ঝুঁকির অবস্থার উপর ভিত্তি করে পজিশনের আকারকে সামঞ্জস্য করে;
  5. কৌশলগুলিকে একত্রিত করা যেতে পারে, ঝুঁকি বিচ্ছিন্ন করার জন্য কৌশলগুলির একটি পোর্টফোলিও তৈরি করা যেতে পারে।

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

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2023-04-06 00:00:00
end: 2024-04-11 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/
// © maxmirus

//@version=5
strategy("My strategy_Cross_SMA(EMA)+Macd,slow3",overlay=true)
// ver 4
// Date Inputs
startDate     = input(timestamp('2019-01-01T00:00:00+0300'), ''                              , inline='time1',
  tooltip=' Время первого бара расчета стратегии. Первый ордер может быть выставлен на следующем баре после стартового.')
finishDate    = input(timestamp('2044-01-01T00:00:00+0300'), ''                              , inline='time2',
  tooltip=' Время после которого больше не будут размещаться ордера входа в позицию.')

// Calculate start/end date and time condition
time_cond = true

//SMA(EMA) Inputs

fast=input.int(12, title="Fastlength",group="MA")
slow1=input.int(54,title="Slowlength1",group="MA")
slow2=input.int(100, title="Slowlength2",group="MA")
slow3=input.int(365, title="Slowlength3",group="MA")

fastma=input.string(title="Fastlength", defval="EMA",options=["SMA","EMA"],group="MA")
slowma1=input.string(title="Slowlength1", defval="EMA",options=["SMA","EMA"],group="MA")
slowma2=input.string(title="Slowlength2", defval="EMA",options=["SMA","EMA"],group="MA")
slowma3=input.string(title="Slowlength3", defval="EMA",options=["SMA","EMA"],group="MA")

fastlength = fastma == "EMA" ? ta.ema(close, fast) : ta.sma(close, fast)
slowlength1 = slowma1 == "EMA" ? ta.ema(close, slow1) : ta.sma(close, slow1)
slowlength2 = slowma2 == "EMA" ? ta.ema(close, slow2) : ta.sma(close, slow2)
slowlength3 = slowma3 == "EMA" ? ta.ema(close, slow3) : ta.sma(close, slow3)

//Macd Inputs

macdfastline = input.int(12, title="FastMacd",group="MACD")
macdslowline = input.int(26,title="SlowMacd",group="MACD")
macdhistline = input.int(9,title="HistMacd",group="MACD")
src=input(defval=close,title="Source",group="MACD")
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"],group="MACD")
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"],group="MACD")


fast_ma = sma_source == "SMA" ? ta.sma(src, macdfastline) : ta.ema(src, macdfastline)
slow_ma = sma_source == "SMA" ? ta.sma(src, macdslowline) : ta.ema(src, macdslowline)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, macdhistline) : ta.ema(macd, macdhistline)
hist = macd - signal
//fastMACD = ta.ema(close, macdline) - ta.ema(close, signalline)
//signalMACD = ta.ema(MACD, histline)
//histMACD = MACD - aMACD

//EMA Plot

plot(fastlength,title="SMAfast",color=color.blue)
plot(slowlength1,title="SMAslow1",color=color.orange)
plot(slowlength2,title="SMAslow2",color=color.red)
plot(slowlength3,title="SMAslow3",color=color.black)

//Macd plot
//col_macd = input(#2962FF, "MACD Line  ", group="Color Settings", inline="MACD")
//col_signal = input(#FF6D00, "Signal Line  ", group="Color Settings", inline="Signal")
//col_grow_above = input(#26A69A, "Above   Grow", group="Histogram", inline="Above")
//col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above")
//col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below")
//col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below")

//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
//plot(macd, title="MACD", color=col_macd)
//plot(signal, title="Signal", color=col_signal)

//Take profit
tp1=input.float(5.1,title="Take Profit1_%",step=0.1)/100
tp2=input.float(10.1,title="Take Profit2_%",step=0.1)/100

//Stop loss
sl1=input.float(5.1,title="Stop loss1_%",step=0.1)/100
sl2=input.float(0.1,title="Stop loss2_%",step=0.1)/100
sl3=input.float(-5.5,title="Stop loss3_%", step=0.1)/100

//Qty closing position

Qty1 = input.float(0.5, title="QtyClosingPosition1",step=0.01)
Qty2 = input.float(0.25, title="QtyClosingPosition2",step=0.01)

//Take profit Long and Short

LongTake1=strategy.position_avg_price*(1+tp1)
LongTake2=strategy.position_avg_price*(1+tp2)

ShortTake1=strategy.position_avg_price*(1-tp1)
ShortTake2=strategy.position_avg_price*(1-tp2)

//Plot Levels Take 
plot(strategy.position_size > 0 ? LongTake1 : na,color=color.green,style=plot.style_linebr)
plot(strategy.position_size > 0 ? LongTake2 : na,color=color.green,style=plot.style_linebr)
plot(strategy.position_size < 0 ? ShortTake1 : na,color=color.green,style=plot.style_linebr)
plot(strategy.position_size < 0 ? ShortTake2 : na,color=color.green,style=plot.style_linebr)

//Stop loss long and short

LongStop1=strategy.position_avg_price*(1-sl1)
LongStop2=strategy.position_avg_price*(1-sl2)
LongStop3=strategy.position_avg_price*(1-sl3)
ShortStop1=strategy.position_avg_price*(1+sl1)
ShortStop2=strategy.position_avg_price*(1+sl2)
ShortStop3=strategy.position_avg_price*(1+sl3)
//Stop=strategy.position_avg_price


//Plot Levels Stop
plot(strategy.position_size > 0 ? LongStop1 : na,color=color.red,style=plot.style_linebr)
plot(strategy.position_size > 0 ? LongStop2 : na,color=color.red,style=plot.style_linebr)
plot(strategy.position_size > 0 ? LongStop3 : na,color=color.red,style=plot.style_linebr)
plot(strategy.position_size < 0 ? ShortStop1 : na,color=color.red,style=plot.style_linebr)
plot(strategy.position_size < 0 ? ShortStop2 : na,color=color.red,style=plot.style_linebr)
plot(strategy.position_size < 0 ? ShortStop3 : na,color=color.red,style=plot.style_linebr)


//Entry condition

LongCondition1 = ta.crossover(fastlength, slowlength1)
LongCondition2 = close>slowlength2
LongCondition3 = time_cond
LongCondition4=close>slowlength3
//LongCondition5=slowlength100>slowlength3
LongCondition6 = hist > 0
buy=(LongCondition1 and LongCondition2 and LongCondition3 and LongCondition4 and LongCondition6 ) and strategy.position_size<=0
//longCondition3 = nz(strategy.position_size) == 0//если отсутствует открытая позиция


ShortCondition1 = ta.crossunder(fastlength, slowlength1)
ShortCondition2 = close<slowlength2
ShortCondition3 = time_cond
ShortCondition4=close<slowlength3
//ShortCondition5=slowlength100<slowlength3
ShortCondition6=hist < 0
sell=(ShortCondition1 and ShortCondition2 and ShortCondition3 and ShortCondition4 and ShortCondition6 ) and strategy.position_size>=0



//Strategy entry

strategy.cancel_all(not strategy.position_size)

if(buy)
    strategy.cancel_all()
    strategy.entry("Buy",strategy.long)
if(sell)
    strategy.cancel_all()
    strategy.entry("Sell",strategy.short)
    
//Strategy Long exit    

var int exitCounter=0

exitCounter := not strategy.position_size or strategy.position_size > 0 and strategy.position_size[1] < 0 or strategy.position_size < 0  and strategy.position_size[1] > 0 ? 0:
               strategy.position_size > 0 and strategy.position_size[1]>strategy.position_size?  exitCounter[1] + 1:
               strategy.position_size < 0 and strategy.position_size[1]<strategy.position_size?  exitCounter[1] - 1:
               exitCounter[1]
if strategy.position_size > 0 and strategy.position_size[1]<=0
    strategy.order("Take Long1",strategy.short, qty=math.abs(strategy.position_size*Qty1), limit=LongTake1, oca_name='Long1', oca_type=strategy.oca.cancel)
if strategy.position_size > 0  and strategy.position_size[1]<=0   
    strategy.order("Take Long2",strategy.short, qty=math.abs(strategy.position_size*Qty2), limit=LongTake2, oca_name='Long2', oca_type=strategy.oca.cancel)

    
if strategy.position_size > 0  and strategy.position_size[1]<=0   
    strategy.order("Stop Long1",strategy.short, qty=math.abs(strategy.position_size),stop=LongStop1,oca_name='Long1',oca_type=strategy.oca.cancel)
if ta.change(exitCounter) and exitCounter==1
    strategy.order("Stop Long2",strategy.short, qty=math.abs(strategy.position_size),stop=LongStop2,oca_name='Long2',oca_type=strategy.oca.cancel)
if ta.change(exitCounter) and exitCounter==2
    strategy.order("Stop Long3",strategy.short, qty=math.abs(strategy.position_size),stop=LongStop3)
    
    
    
    
//  Strategy Short exit  
    
    
if strategy.position_size < 0 and strategy.position_size[1]>=0
    strategy.order("Take Short1", strategy.long, qty=math.abs(strategy.position_size*Qty1), limit=ShortTake1, oca_name='Short1', oca_type=strategy.oca.cancel)
if strategy.position_size < 0 and strategy.position_size[1]>=0 
    strategy.order("Take Short2", strategy.long, qty=math.abs(strategy.position_size*Qty2), limit=ShortTake2, oca_name='Short2', oca_type=strategy.oca.cancel)


    
if strategy.position_size < 0 and strategy.position_size[1]>=0
    strategy.order("Stop Short1",strategy.long, qty=math.abs(strategy.position_size),stop=ShortStop1,oca_name='Short1',oca_type=strategy.oca.cancel)
if ta.change(exitCounter) and exitCounter==-1
    strategy.order("Stop Short2",strategy.long, qty=math.abs(strategy.position_size),stop=ShortStop2,oca_name='Short2',oca_type=strategy.oca.cancel)
if ta.change(exitCounter) and exitCounter==-2
    strategy.order("Stop Short3",strategy.long,qty=math.abs(strategy.position_size),stop=ShortStop3)