
এই কৌশলটি মূল্যের প্রবণতা সনাক্ত করতে এবং ট্রেন্ড ট্র্যাকিং পদ্ধতি ব্যবহার করে ট্রেড করার জন্য একটি মসৃণ অস্থিরতার সূচকের উপর ভিত্তি করে। দাম যখন সূচক লাইনটি ভেঙে যায় তখন ওভারহেড করুন এবং যখন দাম সূচক লাইনটি ভেঙে যায় তখন শর্ট হেড করুন।
এই কৌশলটি দামের প্রবণতা সনাক্ত করতে কাস্টমাইজড মসৃণতা ওড়না সূচক ব্যবহার করে। সূচকটি বর্তমান কে লাইনের বিপরীত ওভারহেড মূল্য গণনা করে, অর্থাৎ তত্ত্বগত মূল্য যা লাভজনকতা এবং ট্র্যাজেডির রঙকে বিপরীত করতে পারে। তারপরে এই বিপরীত ওভারহেড মূল্যকে মসৃণভাবে চিকিত্সা করা হয় এবং চূড়ান্ত মসৃণতা ওড়না সূচক লাইন পাওয়া যায়। যখন দামটি সূচক লাইনের উপরে (বা নীচে) থাকে, তখন এটি নির্দেশ করে যে এটি একটি (উত্থান) প্রবণতা রয়েছে।
কৌশলটি একটি পজিশন তৈরির সংকেত হিসাবে সূচক লাইনটি ভেঙে দেয়। যখন দাম সূচক লাইনটি ভেঙে যায় তখন অতিরিক্ত করুন এবং যখন দাম সূচক লাইনটি ভেঙে যায় তখন শূন্য করুন। স্টপ লিনিয়ারটি প্রবেশের দামের একটি নির্দিষ্ট শতাংশ হিসাবে সেট করুন, মুনাফা লক করতে এবং ঝুঁকি নিয়ন্ত্রণ করতে।
এই কৌশলটির সামগ্রিক ধারণাটি পরিষ্কার, কাস্টমাইজড সূচকগুলি ট্রেন্ড সনাক্ত করে এবং ট্রেন্ড ট্র্যাকিং পদ্ধতিতে লেনদেন করে। রিটার্নিংয়ের ফলাফল অনুসারে, কৌশলটি ভাল পারফরম্যান্স করছে এবং এর কিছু রিয়েল-স্টোর ব্যবহারের সম্ভাবনা রয়েছে। তবে কেবলমাত্র একটি একক সূচকের উপর নির্ভর করে এবং একটি নির্দিষ্ট পশ্চাদপসরণ রয়েছে, সংকেতের গুণমান এখনও যাচাই করা দরকার। এছাড়াও, স্টপ লস প্রক্রিয়াটি আরও পরীক্ষার এবং অপ্টিমাইজেশনের প্রয়োজন। সামগ্রিকভাবে, কৌশলটির ধারণাটি কার্যকর, তবে রিয়েল-স্টোর অপারেটিং ক্ষমতা বাড়ানোর জন্য আরও কাজ করা দরকার।
/*backtest
start: 2023-12-19 00:00:00
end: 2023-12-26 00:00:00
period: 10m
basePeriod: 1m
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/
// © TraderHalai
// This is a backtest of the Smoothed Heikin Ashi Trend indicator, which computes the reverse candle close price required to flip a heikin ashi trend from red to green and vice versa. Original indicator can be found on the scripts section of my profile.
// Default testing parameters are 10% of equity position size, with a 1% stop loss on short and long strategy.opentrades.commission
// This particular back test uses this indicator as a Trend trading tool with a tight stop loss. The equity curve as tested seems promising but requires further work to refine. Note in an actual trading setup, you may wish to use this with volatilty filters as most of the losses are in sideways, low volatility markets.
//@version=5
strategy("Smoothed Heikin Ashi Trend on Chart - TraderHalai BACKTEST", " SHA Trend - BACKTEST", overlay=true)
//Inputs
i_useSmooth = input ( true, "Use smoothing Heikin Ashi")
i_smoothingMethod = input.string("SMA", "Method", options=["SMA", "EMA", "HMA", "VWMA", "RMA"])
i_smoothingPeriod = input ( 10, "Smoothing period")
i_infoBox = input ( true, "Show Info Box" )
i_decimalP = input ( 2, "Prices Decimal Places")
i_boxOffSet = input ( 5, "Info Box Offset" )
i_repaint = input (false, "Repaint - Keep on for live / Off for backtest")
i_longLossPerc = input.float(title="Long Stop Loss (%)",minval=0.0, step=0.1, defval=1) * 0.01
i_shortLossPerc = input.float(title="Short Stop Loss (%)", minval=0.0, step=0.1, defval=1) * 0.01
timeperiod = timeframe.period
//Security functions to avoid repaint, as per PineCoders
f_secureSecurity(_symbol, _res, _src) => request.security(_symbol, _res, _src[1], lookahead = barmerge.lookahead_on)
f_security(_symbol, _res, _src, _repaint) => request.security(_symbol, _res, _src[_repaint ? 0 : barstate.isrealtime ? 1 : 0])[_repaint ? 0 : barstate.isrealtime ? 0 : 1]
f_secSecurity2(_symbol, _res, _src) => request.security(_symbol, _res, _src[1])
candleClose = f_security(syminfo.tickerid, timeperiod, close, i_repaint)
candleOpen = f_security(syminfo.tickerid, timeperiod, open, i_repaint)
candleLow = f_security(syminfo.tickerid, timeperiod, low, i_repaint)
candleHigh = f_security(syminfo.tickerid, timeperiod, high, i_repaint)
haTicker = ticker.heikinashi(syminfo.tickerid)
haClose = f_security(haTicker, timeperiod, close, i_repaint)
haOpen = f_security(haTicker, timeperiod, open, i_repaint)
haLow = f_security(haTicker, timeperiod, low, i_repaint)
haHigh= f_security(haTicker, timeperiod, high, i_repaint)
reverseClose = (2 * (haOpen[1] + haClose[1])) - candleHigh - candleLow - candleOpen
if(reverseClose < candleLow)
reverseClose := (candleLow + reverseClose) / 2
if(reverseClose > candleHigh)
reverseClose := (candleHigh + reverseClose) / 2
//Smoothing
smaSmoothed = ta.sma(reverseClose, i_smoothingPeriod)
emaSmoothed = ta.ema(reverseClose, i_smoothingPeriod)
hmaSmoothed = ta.hma(reverseClose, i_smoothingPeriod)
vwmaSmoothed = ta.vwma(reverseClose, i_smoothingPeriod)
rmaSmoothed = ta.rma(reverseClose, i_smoothingPeriod)
shouldApplySmoothing = i_useSmooth and i_smoothingPeriod > 1
smoothedReverseClose = reverseClose
if(shouldApplySmoothing)
if(i_smoothingMethod == "SMA")
smoothedReverseClose := smaSmoothed
else if(i_smoothingMethod == "EMA")
smoothedReverseClose := emaSmoothed
else if(i_smoothingMethod == "HMA")
smoothedReverseClose := hmaSmoothed
else if(i_smoothingMethod == "VWMA")
smoothedReverseClose := vwmaSmoothed
else if(i_smoothingMethod == "RMA")
smoothedReverseClose := rmaSmoothed
else
smoothedReverseClose := reverseClose // Default to non-smoothed for invalid smoothing type
haBull = candleClose >= smoothedReverseClose
haCol = haBull ? color.green : color.red
//Overall trading strategy
if(ta.crossover(candleClose, smoothedReverseClose))
strategy.entry("LONG", strategy.long, stop=smoothedReverseClose)
else
strategy.cancel("LONG")
if(ta.crossunder(candleClose, smoothedReverseClose))
strategy.entry("SHORT", strategy.short, stop=smoothedReverseClose)
else
strategy.cancel("SHORT")
longStopPrice = strategy.position_avg_price * (1 - i_longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + i_shortLossPerc)
plot(series=(strategy.position_size > 0) ? longStopPrice : na,
color=color.red, style=plot.style_cross,
linewidth=2, title="Long Stop Loss")
plot(series=(strategy.position_size < 0) ? shortStopPrice : na,
color=color.red, style=plot.style_cross,
linewidth=2, title="Short Stop Loss")
plot(smoothedReverseClose, color=haCol)
if (strategy.position_size > 0)
strategy.exit(id="XL STP", stop=longStopPrice)
if (strategy.position_size < 0)
strategy.exit(id="XS STP", stop=shortStopPrice)