
इस रणनीति में सरल चलती औसत का उपयोग किया जाता है ताकि रुझान की दिशा का पता लगाया जा सके, लगातार बढ़ते समय अधिक व्यापार किया जा सके, और लगातार गिरावट के दौरान ऋण लिया जा सके, जिससे द्वि-दिशात्मक व्यापार किया जा सके।
यह रणनीति बाजार की दिशा निर्धारित करने के लिए भारित चलती औसत VWMA का उपयोग करती है। जब VWMA बढ़ता है, तो अधिक करें; जब VWMA गिरता है, तो कम करें।
विशेष रूप से, रणनीति पहले एक निश्चित अवधि के लिए वीडब्ल्यूएमए की गणना करती है, और फिर यह निर्धारित करती है कि क्या वीडब्ल्यूएमए 5 दिनों से अधिक बढ़ गया है, यदि हां, तो अधिक स्थिति खोलें; यदि वीडब्ल्यूएमए 5 दिनों से अधिक गिर गया है, तो स्थिति खोलें।
मासिक और वार्षिक आय की गणना करने के लिए, रणनीति मासिक और वार्षिक आय दर्ज करती है। इस रणनीति की तुलना बाजार के बेंचमार्क आय के साथ करके, आप रणनीति के सापेक्ष बाजार के प्रदर्शन को देख सकते हैं।
इस रणनीति के निम्नलिखित फायदे हैं:
VWMA का उपयोग करके प्रवृत्तियों का आकलन करें और बाजार के शोर को प्रभावी ढंग से फ़िल्टर करें और प्रमुख रुझानों को पकड़ें।
केवल प्रवृत्ति की पुष्टि के बाद ही स्थिति खोलने से प्रवृत्ति के उलट जाने के जोखिम से बचा जा सकता है।
द्वि-दिशात्मक ट्रेडिंग के माध्यम से, आप लाभ कमा सकते हैं, चाहे बाजार में कोई वृद्धि या गिरावट हो।
मासिक और वार्षिक आय को रिकॉर्ड करें ताकि रणनीति के प्रभाव का आकलन किया जा सके।
आय तालिका में बाज़ार के बेंचमार्क आय को जोड़ें ताकि आप रणनीतियों और बाज़ार के सापेक्ष प्रदर्शन की तुलना कर सकें।
इस रणनीति के कुछ जोखिम भी हैं:
VWMA का उपयोग करके ट्रेंड का आकलन किया जा सकता है, जो ट्रेंड के शुरुआती चरणों को याद कर सकता है।
ट्रेंड की पुष्टि के बाद ही स्थिति खोलें, कुछ Movement चूक सकते हैं।
द्वि-दिशात्मक लेनदेन के लिए स्टॉपलॉस को निर्धारित करना आवश्यक है, अन्यथा नुकसान बढ़ सकता है।
बड़े बाजारों में उतार-चढ़ाव के कारण स्टॉप लॉस ट्रिगर हो सकता है, जिससे पूरी तरह से ट्रेंड नहीं हो सकता है।
हालांकि, इस तरह के बदलावों से नुकसान में वृद्धि हो सकती है।
इस नीति को निम्नलिखित पहलुओं से अनुकूलित किया जा सकता हैः
VWMA चक्र पैरामीटर का अनुकूलन करें और रुझानों का आकलन करें।
प्रवृत्ति की पुष्टि करने के लिए दिनों की संख्या को समायोजित करना और समय को सुधारना।
एक स्टॉप लॉस रणनीति जोड़ें और एकल नुकसान को नियंत्रित करें।
अन्य संकेतकों के साथ मिलकर, यह निश्चितता को बढ़ाता है।
स्थिति प्रबंधन का अनुकूलन करें, बाजार की स्थिति के अनुसार स्थिति को समायोजित करें।
ट्रेडिंग लागत को ध्यान में रखते हुए, न्यूनतम लाभ निर्धारित करें
इस रणनीति की समग्र सोच स्पष्ट और सरल है, VWMA का उपयोग प्रवृत्ति की दिशा का आकलन करने के लिए किया जाता है, प्रवृत्ति की पुष्टि के बाद द्विपक्षीय व्यापार, बाजार की गति का प्रभावी ढंग से पालन किया जा सकता है। लेकिन कुछ जोखिम भी हैं, और अधिक परीक्षण और पैरामीटर को अनुकूलित करने, बाहर निकलने के तर्क को समायोजित करने और स्थिति के आकार को उचित रूप से नियंत्रित करने की आवश्यकता है। यह रणनीति द्विपक्षीय व्यापार रणनीति पर आधारित है, मात्रात्मक व्यापार के लिए आधार तैयार करती है, और अधिक शोध और सुधार के लायक है।
/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Monthly Returns in Strategies with Market Benchmark", shorttitle="Monthly P&L With Market", initial_capital= 1000, overlay=true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.1)
maLength= input(400)
wma= vwma(hl2,maLength)
uptrend= rising(wma, 5)
downtrend= falling(wma,5)
plot(wma)
if uptrend
strategy.entry("Buy", strategy.long)
else
strategy.close("Buy")//
///////////////////
// MONTHLY TABLE //
new_month = month(time) != month(time[1])
new_year = year(time) != year(time[1])
eq = strategy.equity
bar_pnl = eq / eq[1] - 1
bar_bh = (close-close[1])/close[1]
cur_month_pnl = 0.0
cur_year_pnl = 0.0
cur_month_bh = 0.0
cur_year_bh = 0.0
// Current Monthly P&L
cur_month_pnl := new_month ? 0.0 :
(1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1
cur_month_bh := new_month ? 0.0 :
(1 + cur_month_bh[1]) * (1 + bar_bh) - 1
// Current Yearly P&L
cur_year_pnl := new_year ? 0.0 :
(1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1
cur_year_bh := new_year ? 0.0 :
(1 + cur_year_bh[1]) * (1 + bar_bh) - 1
// Arrays to store Yearly and Monthly P&Ls
var month_pnl = array.new_float(0)
var month_time = array.new_int(0)
var month_bh = array.new_float(0)
var year_pnl = array.new_float(0)
var year_time = array.new_int(0)
var year_bh = array.new_float(0)
last_computed = false
if (not na(cur_month_pnl[1]) and (new_month or time_close + (time_close - time_close[1]) > timenow or barstate.islastconfirmedhistory))
if (last_computed[1])
array.pop(month_pnl)
array.pop(month_time)
array.push(month_pnl , cur_month_pnl[1])
array.push(month_time, time[1])
array.push(month_bh , cur_month_bh[1])
if (not na(cur_year_pnl[1]) and (new_year or time_close + (time_close - time_close[1]) > timenow or barstate.islastconfirmedhistory))
if (last_computed[1])
array.pop(year_pnl)
array.pop(year_time)
array.push(year_pnl , cur_year_pnl[1])
array.push(year_time, time[1])
array.push(year_bh , cur_year_bh[1])
last_computed := (time_close + (time_close - time_close[1]) > timenow or barstate.islastconfirmedhistory) ? true : nz(last_computed[1])
// Monthly P&L Table
var monthly_table = table(na)
getCellColor(pnl, bh) =>
if pnl > 0
if bh < 0 or pnl > 2 * bh
color.new(color.green, transp = 20)
else if pnl > bh
color.new(color.green, transp = 50)
else
color.new(color.green, transp = 80)
else
if bh > 0
color.new(color.red, transp = 20)
else if pnl < bh
color.new(color.red, transp = 50)
else
color.new(color.red, transp = 80)
if last_computed
monthly_table := table.new(position.bottom_right, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1)
table.cell(monthly_table, 0, 0, "", bgcolor = #cccccc)
table.cell(monthly_table, 1, 0, "Jan", bgcolor = #cccccc)
table.cell(monthly_table, 2, 0, "Feb", bgcolor = #cccccc)
table.cell(monthly_table, 3, 0, "Mar", bgcolor = #cccccc)
table.cell(monthly_table, 4, 0, "Apr", bgcolor = #cccccc)
table.cell(monthly_table, 5, 0, "May", bgcolor = #cccccc)
table.cell(monthly_table, 6, 0, "Jun", bgcolor = #cccccc)
table.cell(monthly_table, 7, 0, "Jul", bgcolor = #cccccc)
table.cell(monthly_table, 8, 0, "Aug", bgcolor = #cccccc)
table.cell(monthly_table, 9, 0, "Sep", bgcolor = #cccccc)
table.cell(monthly_table, 10, 0, "Oct", bgcolor = #cccccc)
table.cell(monthly_table, 11, 0, "Nov", bgcolor = #cccccc)
table.cell(monthly_table, 12, 0, "Dec", bgcolor = #cccccc)
table.cell(monthly_table, 13, 0, "Year", bgcolor = #999999)
for yi = 0 to array.size(year_pnl) - 1
table.cell(monthly_table, 0, yi + 1, tostring(year(array.get(year_time, yi))), bgcolor = #cccccc)
y_color = getCellColor(array.get(year_pnl, yi), array.get(year_bh, yi))
table.cell(monthly_table, 13, yi + 1, tostring(round(array.get(year_pnl, yi) * 100)) + " (" + tostring(round(array.get(year_bh, yi) * 100)) + ")", bgcolor = y_color)
for mi = 0 to array.size(month_time) - 1
m_row = year(array.get(month_time, mi)) - year(array.get(year_time, 0)) + 1
m_col = month(array.get(month_time, mi))
m_color = getCellColor(array.get(month_pnl, mi), array.get(month_bh, mi))
table.cell(monthly_table, m_col, m_row, tostring(round(array.get(month_pnl, mi) * 100)) + " (" + tostring(round(array.get(month_bh, mi) * 100)) +")", bgcolor = m_color)