
এই কৌশলটি একটি প্রবণতা ট্র্যাকিং কৌশল যা স্বয়ংক্রিয়ভাবে চলমান গড়ের উপর ভিত্তি করে তৈরি করা হয়েছে। এটি দুটি ভিন্ন পিরিয়ডের DEMA চলমান গড় ব্যবহার করে একটি ক্রয়-বিক্রয় সংকেত তৈরি করে। কৌশলটি স্বয়ংক্রিয়ভাবে বিভিন্ন পিরিয়ডের উপর ভিত্তি করে বিশ্লেষণের কণার সাথে মানিয়ে নেয়, যা একাধিক সময় ফ্রেমের ট্র্যাকিং সক্ষম করে।
DEMA দ্রুত লাইন এবং DEMA ধীর লাইন ব্যবহার করে ট্রেডিং সিগন্যাল তৈরি করার কৌশল। দ্রুত লাইনটি টিএফ, ধীর লাইনটি টিএফ*2। যখন দ্রুত লাইনটি ধীর লাইনটি অতিক্রম করে তখন একটি ক্রয় সংকেত উত্পন্ন হয়; যখন দ্রুত লাইনটি ধীর লাইনটি অতিক্রম করে তখন একটি বিক্রয় সংকেত উত্পন্ন হয়। এইভাবে মধ্য-দীর্ঘ লাইন প্রবণতা অনুসরণ করা যায়। এছাড়াও, কৌশলটি ডাবল-মোবাইল হুল সমান্তরাল ফিল্টার ব্যবহার করে যাতে শব্দ লেনদেন হ্রাস করা যায়। কেবলমাত্র যখন হুল ফিল্টার একই দিকে থাকে তখনই লেনদেনের সংকেত দেওয়া হয়।
এই কৌশলটির সবচেয়ে বড় সুবিধা হ’ল এটি বিভিন্ন সময়কালের সাথে খাপ খাইয়ে নিতে পারে। এটি অ-চক্রীয়তার ভিত্তিতে স্বয়ংক্রিয়ভাবে গ্রানুলার বিশ্লেষণ নির্বাচন করে। এটি সূর্যের রেখা থেকে ঘূর্ণিরেখা পর্যন্ত ব্যবহার করা যেতে পারে। এটি কৌশলটিকে একাধিক বাজার পরিবেশে প্রয়োগ করতে দেয়। এছাড়াও, দ্বৈত সমান্তরাল কাঠামো কার্যকরভাবে প্রবণতা অনুসরণ করতে পারে, দ্বৈত ফিল্টার সংকেতের গুণমানকে বাড়িয়ে তোলে। সুতরাং, এই কৌশলটি দীর্ঘ-রেখা প্রবণতা অনুসরণ করার জন্য উপযুক্ত।
এই কৌশলটির মূল ঝুঁকিটি প্রবণতা বিপরীত হওয়া থেকে আসে। যখন বাজার একটি ষাঁড়ের বাজার থেকে একটি ভাল বাজারে প্রবেশ করে, দ্রুত এবং ধীর লাইনগুলি তীব্র নীচে ক্রস করতে পারে, যার ফলে বিশাল ক্ষতি হয়। এছাড়াও, ডাবল-লাইন ফিল্টারগুলি কিছু অর্থ উপার্জনের সুযোগগুলিও মুছে ফেলতে পারে। যদি ফিল্টারের দিকটি মূল্যের বিপরীত হয় তবে সেই সংকেতগুলিও এড়িয়ে যেতে পারে। সুতরাং, কৌশলটি মূলত স্থিতিশীল মধ্য-দীর্ঘ-লাইন প্রবণতা বাজারকে লক্ষ্য করে।
ফিল্টার প্যারামিটারগুলি সামঞ্জস্য করে বা অন্যান্য সূচকগুলির সাথে প্রতিস্থাপনের মাধ্যমে কৌশলটি অনুকূলিত করা যেতে পারে। উদাহরণস্বরূপ, হুলএমএ-র পরিবর্তে এমএসিডি পরীক্ষা করা যেতে পারে, বা হুলএমএ-র সময়কালের প্যারামিটারগুলি সামঞ্জস্য করা যেতে পারে। আরও মিলিত ট্রেডিং নিয়মের সন্ধানের জন্য বিভিন্ন প্যারামিটার সমন্বয় পরীক্ষা করা যেতে পারে। এছাড়াও, পজিশন স্কেল নিয়ন্ত্রণের জন্য অস্থিরতার সূচকগুলির সাথে মিলিত হতে পারে। যখন বাজারের অস্থিরতা বৃদ্ধি পায়, তখন পজিশনটি যথাযথভাবে ছোট করা যেতে পারে।
সামগ্রিকভাবে, এই কৌশলটি একটি খুব কার্যকর স্ব-অনুকূলিত প্রবণতা ট্র্যাকিং কৌশল। এটি স্বয়ংক্রিয়ভাবে বিভিন্ন সময়সীমার ব্যবসায়ের জন্য বিশ্লেষণের সময়কালকে সামঞ্জস্য করতে পারে। দ্বি-সমান্তরাল কাঠামোটি প্রবণতাকে স্থিতিশীলভাবে ট্র্যাক করতে পারে এবং ফিল্টারগুলি সংকেতের গুণমানকে উন্নত করে।
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
//
//---------------------------------------------
//* Author - PPSingnal
//* http://ppsignal.com
//---------------------------------------------
//
//
strategy (title="PPSignal V4 (Auto Adaptive Times)", shorttitle="PPSignal V4", overlay=true)
delayOffset = input(defval = 0, title = "Delay Open/Close MA (Forces Non-Repainting)", minval = 0, step = 1)
//---------------------------------------- INICIO PPI ----------------------------------------
// - PARÁMETROS DE ENTRADA
// SE DEFINE LA RESOLUCIÓN
useRes1 = true
setRes1 = true
tf = timeframe.period == "60" ? 4 : timeframe.period == "240" ? 4 : timeframe.period == "D" ? 4 : timeframe.period == "W" ?4 : 4
// PRIMER DEMA
type = "DEMA"
src = close
len = tf
off = 0
lsma = 0
// SEGUNDA DEMA
type2 = "DEMA"
src2 = open
len2 = tf
off2 = 0
lsma2 = 0
// - INPUTS END
//---------------------------------------- INICIO FUNCIONES ----------------------------------------
// RETORNA UNA MEDIA MOVIL (TYPE=TIPO / SRC = TIPO DE PRECIO / LEN=LONGITUD / LSMA=0)
variant(type, src, len, lsma) =>
v1 = sma(src, len) // Simple
v2 = ema(src, len) // Exponential
v3 = wma(src, len) // Weighted
v4 = vwma(src, len) // Volume Weighted
v5 = na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len // Smoothed
v6 = 2 * v2 - ema(v2, len) // Double Exponential
v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len) // Triple Exponential
v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) // Hull
v9 = linreg(src, len, lsma) // Least Squares
// return variant, defaults to SMA if input invalid.
type=="EMA"?v2 : type=="WMA"?v3 : type=="VWMA"?v4 : type=="SMMA"?v5 : type=="DEMA"?v6 : type=="TEMA"?v7 : type=="HullMA"?v8 : type=="LSMA"?v9 : v1
// SuperSmoother filter
// © 2013 John F. Ehlers
a1 = exp(-1.414*3.14159 / len)
b1 = 2*a1*cos(1.414*3.14159 / len)
c2 = b1
c3 = (-a1)*a1
c1 = 1 - c2 - c3
v12 = 0.0
v12 := c1*(src + nz(src[1])) / 2 + c2*nz(v12[1]) + c3*nz(v12[2])
// RETORNA LA RESOLUCIÓN SETEADA Y SINO LA DEFAULT
// 3H: 1min - 3min - 5min - 15min
// DIARIO: 30 - 45 - 60
// SEMANAL: 120 - 180 - 240 - D
reso(exp, use, res) => use ? request.security(syminfo.tickerid, timeframe.period=="1" ? "D" : timeframe.period=="3" ? "D" : timeframe.period=="5" ? "D" : timeframe.period=="15" ? "D" : timeframe.period=="30" ? "D" : timeframe.period=="45" ? "W" : timeframe.period=="60" ? "W" : timeframe.period=="120" ? "W" : timeframe.period=="180" ? "W" : timeframe.period=="240" ? "W" : timeframe.period=="D" ? "W" : "W", exp) : exp
//---------------------------------------- FIN FUNCIONES ----------------------------------------
//---------------------------------------- INICIO VARIABLES ----------------------------------------
// DEMAS
ma_short = reso(variant(type, src[off], len, lsma), useRes1, setRes1)
ma_long = reso(variant(type2, src2[off2], len2, lsma2), useRes1, setRes1)
//---------------------------------------- FIN VARIABLES ----------------------------------------
//---------------------------------------- FIN PPI ----------------------------------------
//---------------------------------------- PRIMER FILTRO ----------------------------------------
// Double HullMA
scolor = false
n=1
n2ma=2*wma(close,round(n/2))
nma=wma(close,n)
diff=n2ma-nma
sqn=round(sqrt(n))
n2ma1=2*wma(close[1],round(n/2))
nma1=wma(close[1],n)
diff1=n2ma1-nma1
sqn1=round(sqrt(n))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
//---------------------------------------- FIN PRIMER FILTRO ----------------------------------------
//---------------------------------------- INICIO CONDICIONES ----------------------------------------
// CONDICION CON FILTRO
cruce= (ma_short > ma_long) and n1>n2 ? true : ma_short < ma_long ? false : cruce[1]
// Condition
// FONDO DE COLOR
bground = cruce ? white : red
bgcolor(bground, transp=90)
// BARRAS COLOREADAS
barcol = cruce ? yellow : red
barcolor(barcol, transp=0)
closePlot = plot(ma_short, title = "Zone 1", color = gray, circles = 0, style = circles, transp = 100)
openPlot = plot(ma_long, title = "Zone 2", color = green, circles = 0, style = circles, transp = 100)
trendState = ma_short > ma_long ? true : ma_short < ma_long ? false : trendState[1]
// channel fill
closePlotU = plot(trendState ? ma_short : na, transp = 100, editable = false)
openPlotU = plot(trendState ? ma_long : na, transp = 100, editable = false)
closePlotD = plot(trendState ? na : ma_short, transp = 100, editable = false)
openPlotD = plot(trendState ? na : ma_long, transp = 100, editable = false)
fill(openPlotU, closePlotU, title = "Up Trend Fill", color = yellow, transp = 70)
fill(openPlotD, closePlotD, title = "Down Trend Fill", color = red, transp = 70)
//---------------------------------------- FIN CONDICIONES ----------------------------------------
//---------------------------------------- INICIO ESTRATEGIA ----------------------------------------
//CONDICION COMPRA
longCond = (ma_short > ma_long) and n1>=n2
//CONDICION VENTA
shortCond = (ma_short < ma_long)
//ABRO COMPRA A
strategy.entry("Bull Trend", strategy.long, when = longCond)
//ABRO VENTA A
strategy.entry("Bearish Trend", strategy.short, when = shortCond)
//CIERRO VENTA A
strategy.exit("Exit Short", from_entry = "Bull Trend", when = shortCond)
//CIERRO COMPRA A
strategy.exit("Exit Long", from_entry = "Bearish Trend", when = longCond)
//---------------------------------------- FIN ESTRATEGIA ----------------------------------------