
এই কৌশলটি একটি প্রবণতা ট্র্যাকিং ট্রেডিং সিস্টেম যা একাধিক চলমান গড় ক্রস এবং ওঠানামা ফিল্টারের উপর ভিত্তি করে। এটি বাজার প্রবণতা সনাক্ত করতে তিনটি ভিন্ন সময়ের চলমান গড় ব্যবহার করে এবং একটি চতুর্থ চলমান গড়কে একটি ষাঁড়ের বাজার হিসাবে বেঞ্চমার্ক হিসাবে ব্যবহার করে। এই কৌশলটি কম ওঠানামা পরিবেশে ট্রেডিং এড়ানোর জন্য ট্রেডিং ফিল্টার শর্ত হিসাবে ওঠানামা সূচকগুলিও প্রবর্তন করে। এই কৌশলটি ওভার এবং ডাউনকে সমর্থন করে এবং নমনীয় পজিশন ম্যানেজমেন্ট এবং স্টপ লস প্রক্রিয়া সরবরাহ করে।
চলমান গড় নির্বাচনঃ কৌশলটি প্রবণতা নির্ধারণের জন্য তিনটি প্রধান চলমান গড় ব্যবহার করে (সংক্ষিপ্ত, মাঝারি এবং দীর্ঘমেয়াদী) । ব্যবহারকারী ছয়টি পূর্বনির্ধারিত চলমান গড়ের মধ্যে থেকে চয়ন করতে পারেন, প্রতিটি চলমান গড়ের জন্য পৃথকভাবে পরামিতিগুলি কনফিগার করা যেতে পারে, যার মধ্যে রয়েছে গণনা সময়কাল, ডেটা উত্স এবং প্রকার (যেমন এসএমএ, ইএমএ ইত্যাদি) ।
প্রবণতা মূল্যায়নঃ
ষাঁড়-বীর বাজার বিচারঃ চতুর্থ চলমান গড়কে ষাঁড়-বীর বাজারকে বিভক্ত করার জন্য ব্যবহার করা যেতে পারে। যখন দাম এই লাইনের উপরে থাকে, তখন কেবলমাত্র আরও বেশি করার অনুমতি দেওয়া হয়; বিপরীতভাবে, কেবলমাত্র খালি করার অনুমতি দেওয়া হয়।
উর্ধ্বমুখীতা ফিল্টার করুনঃ সর্বোচ্চ এবং সর্বনিম্ন মূল্যের উপর ভিত্তি করে একটি উর্ধ্বমুখীতা সূচক ব্যবহার করুন। কৌশলটি কেবলমাত্র যখন উর্ধ্বমুখীতা ব্যবহারকারীর সেট করা থ্রেশহোল্ডের চেয়ে বেশি হয় তখনই ট্রেডিং সিগন্যাল দেয়।
ইনপুট লজিকঃ
আউট লজিকঃ
স্টপ লসঃ স্টপ লস শতাংশ ব্যবহার করে, ব্যবহারকারী কাস্টমাইজ করতে পারেন।
পজিশন ম্যানেজমেন্টঃ প্রতিটি পজিশন খোলার সময় অ্যাকাউন্টের অধিকার ও সুবিধার একটি নির্দিষ্ট শতাংশ ব্যবহারকারী কাস্টমাইজ করতে পারেন।
মাল্টি-ডাইমেনশনাল ট্রেন্ড অ্যানালাইসিসঃ একাধিক মুভিং এভারেজ ব্যবহার করে, কৌশলটি বাজারের প্রবণতাকে আরও ব্যাপকভাবে ক্যাপচার করতে এবং মিথ্যা সংকেত হ্রাস করতে পারে।
নমনীয় প্যারামিটার কনফিগারেশনঃ ব্যবহারকারী বিভিন্ন বাজার এবং লেনদেনের প্রজাতির বৈশিষ্ট্য অনুসারে নমনীয়ভাবে প্যারামিটারগুলি সামঞ্জস্য করতে পারেন, যার মধ্যে রয়েছে গড় লাইন প্রকার, সময়কাল এবং ডেটা উত্স ইত্যাদি।
উর্ধ্বমুখীতা ফিল্টারঃ উর্ধ্বমুখীতা সূচক প্রবর্তন করে, কৌশলটি কম উর্ধ্বমুখী পরিবেশে ট্রেডিং এড়াতে এবং সংকেতের গুণমান উন্নত করতে পারে।
বিয়ার বাউন্ডের সাথে মানিয়ে নেওয়াঃ বিয়ার বাউন্ডের সিদ্ধান্তের জন্য একটি বিকল্প রয়েছে যা কৌশলগুলিকে বিভিন্ন বাজারের অবস্থার সাথে আরও ভালভাবে মানিয়ে নিতে এবং বিপরীতমুখী লেনদেন হ্রাস করতে দেয়।
ডায়নামিক পজিশন ম্যানেজমেন্ট: অ্যাকাউন্টের অধিকার ও স্বার্থের উপর ভিত্তি করে পজিশন ম্যানেজমেন্ট পদ্ধতি, যা অ্যাকাউন্টের আকারের পরিবর্তনের সাথে সাথে স্বয়ংক্রিয়ভাবে লেনদেনের আকারকে সামঞ্জস্য করতে পারে।
একাধিক স্তরের ঝুঁকি নিয়ন্ত্রণঃ একাধিক ঝুঁকি নিয়ন্ত্রণ ব্যবস্থা যেমন ওঠানামা ফিল্টারিং, প্রবণতা নিশ্চিতকরণ, আংশিক সমান্তরাল এবং স্থায়ী স্টপ লস।
দ্বি-মুখী লেনদেনঃ মুদ্রা ও মুদ্রা বিনিময় সমর্থন করে, বিভিন্ন বাজারের পরিস্থিতিতে লেনদেনের সুযোগ খুঁজে বের করতে সক্ষম।
ভিজ্যুয়াল সহায়কঃ কৌশলটি চার্টগুলিতে মুভিং এভারেজ এবং ট্রেডিং সিগন্যাল ট্যাগগুলি আঁকেন যা সহজেই বিশ্লেষণ এবং প্রতিক্রিয়া জানাতে পারে।
পিছিয়ে পড়াঃ মুভিং এভারেজ মূলত একটি পিছিয়ে পড়া সূচক, যা প্রবেশাধিকার এবং প্রস্থান সময়কে কিছুটা বিলম্বিত করতে পারে, যা মুনাফার উপর প্রভাব ফেলে।
অস্থির বাজার দুর্বল পারফরম্যান্সঃ তির্যক অস্থির বাজারগুলিতে, কৌশলগুলি প্রায়শই ভুল সংকেত তৈরি করতে পারে, যার ফলে অত্যধিক লেনদেন এবং ক্ষতি হয়।
প্যারামিটার সংবেদনশীলতাঃ কৌশলটির কার্যকারিতা প্যারামিটার সেটিংয়ের উপর অত্যন্ত নির্ভরশীল, বিভিন্ন বাজার এবং সময় ফ্রেমগুলির জন্য বিভিন্ন প্যারামিটার সমন্বয় প্রয়োজন হতে পারে।
প্রত্যাহারের ঝুঁকিঃ প্রবণতা বিপরীত হলে, কৌশলটি সময়মতো সম্পূর্ণরূপে কার্যকর হতে পারে না, যার ফলে বৃহত্তর প্রত্যাহার ঘটে।
প্রযুক্তিগত সূচকগুলির উপর অত্যধিক নির্ভরশীলতাঃ কৌশলগুলি সম্পূর্ণরূপে প্রযুক্তিগত সূচকগুলির উপর ভিত্তি করে তৈরি করা হয়, মৌলিক বিষয়গুলি উপেক্ষা করা হয় এবং গুরুত্বপূর্ণ সংবাদ বা ঘটনা ঘটার সময় খারাপ পারফরম্যান্স হতে পারে।
তহবিল পরিচালনার ঝুঁকিঃ স্থির অনুপাতের পজিশন পরিচালনার পদ্ধতিটি ধারাবাহিক ক্ষতির ক্ষেত্রে অত্যধিক ঝুঁকির ফাঁক তৈরি করতে পারে।
স্টপ লস সেটিংঃ স্থির শতাংশ স্টপ লস সব বাজার পরিস্থিতিতে প্রযোজ্য নাও হতে পারে, উচ্চ অস্থিরতার সময়কালে এটি অকালে স্টপ লস হতে পারে।
স্বনির্ধারিত প্যারামিটারঃ স্বনির্ধারিত প্যারামিটার প্রবর্তন করা হয়েছে, বাজারের গতিশীলতার উপর ভিত্তি করে চলমান গড় প্যারামিটার এবং ওঠানামা হারের থ্রেশহোল্ডগুলিকে সামঞ্জস্য করা হয়েছে।
মাল্টি টাইম ফ্রেম বিশ্লেষণঃ দীর্ঘ এবং ছোট টাইম ফ্রেমের তথ্যের সাথে মিলিত হয়ে ট্রেন্ডের সঠিকতা বাড়ায়।
উর্ধ্বমুখীতা সূচক অপ্টিমাইজেশানঃ বাজার পরিস্থিতি আরও সঠিকভাবে মূল্যায়ন করার জন্য আরও জটিল উর্ধ্বমুখীতা সূচক যেমন ATR বা Bollinger Bandwidth ব্যবহার বিবেচনা করুন।
গতিশীলতার সূচক প্রবর্তন করুনঃ আরএসআই বা এমএসিডি এর মতো গতিশীলতার সূচকগুলির সাথে মিলিত হয়ে প্রবেশ এবং প্রস্থান সময়কে অনুকূলিত করুন।
ক্ষতির ব্যবস্থাপনা উন্নত করা হয়েছেঃ ট্রেকিং ক্ষতির ব্যবস্থা করা হয়েছে অথবা এটিআর-ভিত্তিক গতিশীল ক্ষতির ব্যবস্থা করা হয়েছে, যাতে বাজারের অস্থিরতার সাথে আরও ভালভাবে সামঞ্জস্য করা যায়।
মার্কেট সেন্টিমেন্ট ইন্টিগ্রেশনঃ মার্কেট সেন্টিমেন্ট ইন্ডিকেটর যেমন ভিআইএক্স প্রবর্তন করা, বিভিন্ন বাজারের পরিস্থিতিতে কর্মক্ষমতা অপ্টিমাইজ করার কৌশল।
পজিশন ম্যানেজমেন্ট অপ্টিমাইজ করুনঃ ঝুঁকি নিয়ন্ত্রণের জন্য অস্থিরতা বা বর্তমান লাভের উপর ভিত্তি করে গতিশীল পজিশন ম্যানেজমেন্ট বাস্তবায়ন করুন।
বেসিক ফিল্টার যুক্ত করুনঃ গুরুত্বপূর্ণ অর্থনৈতিক তথ্য প্রকাশ বা কোম্পানির আয়-ব্যয় হিসাবের মতো মৌলিক বিষয়গুলি বিবেচনা করুন এবং উচ্চ ঝুঁকির সময় ট্রেডিং এড়ান।
মেশিন লার্নিং অপ্টিমাইজেশানঃ মেশিন লার্নিং অ্যালগরিদম ব্যবহার করে প্যারামিটার প্যাকেজ এবং সিদ্ধান্তের নিয়মগুলিকে অপ্টিমাইজ করা, কৌশলগুলির অভিযোজনযোগ্যতা বাড়ানো।
ব্যাক-এন্ড ফরোয়ার্ড টেস্টিংঃ কৌশলটির স্থিতিশীলতা যাচাই করার জন্য আরও ব্যাপক ব্যাক-এন্ড এবং বিভিন্ন বাজার এবং সময়কালের মধ্যে ফরোয়ার্ড টেস্টিং করা।
মাল্টি-ওভারহেড ক্রস ট্রেন্ড ট্র্যাকিং এবং ওভারহোল রেট ফিল্টারিং কৌশলটি একটি বিস্তৃত এবং নমনীয় ট্রেডিং সিস্টেম যা একাধিক মুভিং এভারেজ, ওভারহোল রেট সূচক এবং ট্রেন্ড ট্র্যাকিং নীতিগুলিকে একত্রিত করে। বহু-মাত্রিক প্রবণতা বিশ্লেষণ এবং কঠোর ঝুঁকি নিয়ন্ত্রণের মাধ্যমে এই কৌশলটি বিভিন্ন বাজারের পরিবেশে ধারাবাহিক প্রবণতা ক্যাপচার করার সম্ভাবনা রয়েছে। যাইহোক, ব্যবহারকারীদের প্যারামিটার অপ্টিমাইজেশন এবং বাজারের অভিযোজনযোগ্যতার বিষয়ে মনোযোগ দিতে হবে এবং কৌশলটির কার্যকারিতা আরও বাড়ানোর জন্য আরও উন্নত প্রযুক্তিগত সূচক এবং ঝুঁকি ব্যবস্থাপনা প্রযুক্তি প্রবর্তন করার কথা বিবেচনা করতে হবে। সামগ্রিকভাবে, এটি একটি শক্ত কৌশলগত কাঠামো যা আরও গবেষণা এবং অপ্টিমাইজেশনের জন্য একটি ভাল ভিত্তি সরবরাহ করে।
/*backtest
start: 2023-07-23 00:00:00
end: 2024-07-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="WODIsMA Strategy", shorttitle="WMA_Strategy", overlay=true, overlay=true, pyramiding=2, default_qty_value=6, default_qty_type=strategy.fixed, initial_capital=1000, currency=currency.USD)
// 用户输入参数
capital_pct = input.float(20, title="每笔订单使用的资金百分比(%)", minval=0.1, maxval=100, group="Position") / 100
close_pct = input.float(20, title="每次平仓使用的百分比(%)", minval=0, maxval=100, group="Position") / 100
stop_loss_user = input.float(10, title="止损百分比(%)", minval=0, maxval=100, group="Position") / 100
allow_long = input.bool(true, title="是否做多", group="Position")
allow_short = input.bool(true, title="是否做空", group="Position")
// 用户选择的移动平均线
short_term_ma = input.string("MA 0", title="短期趋势均线", options=["MA 0", "MA 1", "MA 2", "MA 3", "MA 4", "MA 5"], group="TrendIdentify")
mid_term_ma = input.string("MA 1", title="中期趋势均线", options=["MA 0", "MA 1", "MA 2", "MA 3", "MA 4", "MA 5"], group="TrendIdentify")
long_term_ma = input.string("MA 2", title="长期趋势均线", options=["MA 0", "MA 1", "MA 2", "MA 3", "MA 4", "MA 5"], group="TrendIdentify")
bull_bear_ma = input.string("MA 3", title="牛熊趋势均线", options=["MA 0", "MA 1", "MA 2", "MA 3", "MA 4", "MA 5"], group="TrendIdentify")
enable_bull_bear = input.bool(false, title="是否启用牛熊趋势线", group="TrendIdentify")
// 波动率指标参数
volatility_k = input.int(60, title="波动率数值K线数" , group="volatility")
volatility_threshold = input.float(1, minval=0, title="波动率值 0则不使用(%)", group="volatility")
// 定义不同类型的移动平均线函数
ma(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
// 定义每根均线的输入参数和颜色
length0 = input.int(16, minval=1, title="Length 0", group="MA 0")
source0 = input.source(hl2, title="Source 0", group="MA 0")
type0 = input.string("SMA", title="Type 0", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 0")
timeframe0 = input.timeframe("", title="Timeframe 0", group="MA 0")
color0 = input.color(color.gray, title="Color 0", group="MA 0")
show0 = input.bool(true, title="Show MA 0", group="MA 0")
length1 = input.int(48, minval=1, title="Length 1", group="MA 1")
source1 = input.source(hl2, title="Source 1", group="MA 1")
type1 = input.string("SMA", title="Type 1", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 1")
timeframe1 = input.timeframe("", title="Timeframe 1", group="MA 1")
color1 = input.color(color.aqua, title="Color 1", group="MA 1")
show1 = input.bool(true, title="Show MA 1", group="MA 1")
length2 = input.int(144, minval=1, title="Length 2", group="MA 2")
source2 = input.source(hl2, title="Source 2", group="MA 2")
type2 = input.string("SMA", title="Type 2", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 2")
timeframe2 = input.timeframe("", title="Timeframe 2", group="MA 2")
color2 = input.color(color.orange, title="Color 2", group="MA 2")
show2 = input.bool(true, title="Show MA 2", group="MA 2")
length3 = input.int(432, minval=1, title="Length 3", group="MA 3")
source3 = input.source(hl2, title="Source 3", group="MA 3")
type3 = input.string("SMA", title="Type 3", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 3")
timeframe3 = input.timeframe("", title="Timeframe 3", group="MA 3")
color3 = input.color(color.green, title="Color 3", group="MA 3")
show3 = input.bool(true, title="Show MA 3", group="MA 3")
length4 = input.int(91, minval=1, title="Length 4", group="MA 4")
source4 = input.source(hl2, title="Source 4", group="MA 4")
type4 = input.string("SMA", title="Type 4", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 4")
timeframe4 = input.timeframe("D", title="Timeframe 4", group="MA 4")
color4 = input.color(color.rgb(159, 110, 208), title="Color 4", group="MA 4") // 浅紫色
style4 = input.string("step", title="Style 4", options=["line", "step"], group="MA 4")
show4 = input.bool(false, title="Show MA 4", group="MA 4")
length5 = input.int(182, minval=1, title="Length 5", group="MA 5")
source5 = input.source(hl2, title="Source 5", group="MA 5")
type5 = input.string("SMA", title="Type 5", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 5")
timeframe5 = input.timeframe("D", title="Timeframe 5", group="MA 5")
color5 = input.color(color.red, title="Color 5", group="MA 5")
style5 = input.string("step", title="Style 5", options=["line", "step"], group="MA 5")
show5 = input.bool(true, title="Show MA 5", group="MA 5")
// 计算每根均线的值
value0 = request.security(syminfo.tickerid, timeframe0, ma(source0, length0, type0))
value1 = request.security(syminfo.tickerid, timeframe1, ma(source1, length1, type1))
value2 = request.security(syminfo.tickerid, timeframe2, ma(source2, length2, type2))
value3 = request.security(syminfo.tickerid, timeframe3, ma(source3, length3, type3))
value4 = request.security(syminfo.tickerid, timeframe4, ma(source4, length4, type4))
value5 = request.security(syminfo.tickerid, timeframe5, ma(source5, length5, type5))
// 绘制每根均线
plot(show0 ? value0 : na, title="MA 0", color=color0)
plot(show1 ? value1 : na, title="MA 1", color=color1)
plot(show2 ? value2 : na, title="MA 2", color=color2)
plot(show3 ? value3 : na, title="MA 3", color=color3)
plot(show4 ? value4 : na, title="MA 4", color=color4, style=style4 == "step" ? plot.style_stepline : plot.style_line, linewidth=2)
plot(show5 ? value5 : na, title="MA 5", color=color5, style=style5 == "step" ? plot.style_stepline : plot.style_line, linewidth=2)
// 添加策略部分
// 选择均线值
get_ma_value(ma_name) =>
if (ma_name == "MA 0")
value0
else if (ma_name == "MA 1")
value1
else if (ma_name == "MA 2")
value2
else if (ma_name == "MA 3")
value3
else if (ma_name == "MA 4")
value4
else
value5
short_ma_value = get_ma_value(short_term_ma)
mid_ma_value = get_ma_value(mid_term_ma)
long_ma_value = get_ma_value(long_term_ma)
bull_bear_ma_value = get_ma_value(bull_bear_ma)
// 计算波动率
high_close = ta.highest(high, volatility_k)
low_close = ta.lowest(low, volatility_k)
volatility = 100 * (high_close - low_close) / low_close
// 波动率条件背景色
volatilityCondition = (volatility > volatility_threshold)
volatilityConditionBG = (volatility > volatility_threshold) and volatility_threshold != 0
bgcolor(volatilityConditionBG ? color.new(color.green, 90) : na, title="Volatility Background")
// 策略信号
long_condition = (short_ma_value > long_ma_value and ta.crossover(mid_ma_value, long_ma_value))
short_condition = (short_ma_value < long_ma_value and ta.crossunder(mid_ma_value, long_ma_value))
var float stop_level_long = na
var float stop_level_short = na
// 执行策略
if (volatilityCondition and allow_long and (not enable_bull_bear or close > bull_bear_ma_value))
if (long_condition and close > long_ma_value) // 判断是否立即触发止损
strategy.entry("Long", strategy.long, qty=capital_pct * strategy.equity / close)
label.new(bar_index, low*0.996, text="BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)
if (volatilityCondition and allow_short and (not enable_bull_bear or close < bull_bear_ma_value))
if (short_condition and close < long_ma_value) // 判断是否立即触发止损
strategy.entry("Short", strategy.short, qty=capital_pct * strategy.equity / close)
label.new(bar_index, high*1.004, text="SELL", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)
// 部分平仓逻辑
if (enable_bull_bear)
// 当当前价格处在牛熊趋势均线之下时
if (close < bull_bear_ma_value)
// 平所有多仓
if (strategy.position_size > 0)
strategy.close("Long", comment="平所有多仓")
label.new(bar_index, low*0.996, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_up, size=size.small)
// 当短期均线在长期均线之上时,中期均线向上穿过长期均线,平空
if (short_ma_value > long_ma_value and ta.crossover(mid_ma_value, long_ma_value) and volatilityCondition)
if (strategy.position_size < 0)
strategy.close("Short", qty=close_pct * strategy.position_size, comment="部分平空")
label.new(bar_index, high*1.004, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_down, size=size.small)
// 当当前价格处在牛熊趋势均线之上时
if (close > bull_bear_ma_value)
// 平所有空仓
if (strategy.position_size < 0)
strategy.close("Short", comment="平所有空仓")
label.new(bar_index, high*1.004, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_up, size=size.small)
// 当短期均线在长期均线之下时,中期均线向下穿过长期均线,平多
if (short_ma_value < long_ma_value and ta.crossunder(mid_ma_value, long_ma_value) and volatilityCondition)
if (strategy.position_size > 0)
strategy.close("Long", qty=close_pct * strategy.position_size, comment="部分平多")
label.new(bar_index, low*0.996, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_down, size=size.small)
else if (not enable_bull_bear and not (allow_long and allow_short))
// 当短期均线在长期均线之上时,中期均线向上穿过长期均线,平空
if (short_ma_value > long_ma_value and ta.crossover(mid_ma_value, long_ma_value) and volatilityCondition)
if (strategy.position_size < 0)
strategy.close("Short", qty=close_pct * strategy.position_size, comment="部分平空")
label.new(bar_index, low*0.996, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_up, size=size.small)
// 当短期均线在长期均线之下时,中期均线向下穿过长期均线,平多
if (short_ma_value < long_ma_value and ta.crossunder(mid_ma_value, long_ma_value) and volatilityCondition)
if (strategy.position_size > 0)
strategy.close("Long", qty=close_pct * strategy.position_size, comment="部分平多")
label.new(bar_index, high*1.004, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_down, size=size.small)
// 止损处理
if (strategy.position_size > 0)
stop_level_long_user = strategy.position_avg_price * (1 - stop_loss_user)
strategy.exit("Stop Loss", from_entry="Long", stop=stop_level_long_user)
else if (strategy.position_size < 0)
stop_level_short_user = strategy.position_avg_price * (1 + stop_loss_user)
strategy.exit("Stop Loss", from_entry="Short", stop=stop_level_short_user)