یہ ایک مساوی متحرک اوسط پر مبنی ایک رجحان ٹریکنگ حکمت عملی ہے۔ اس میں ایکویلیو ، کوا فیوژن مساوی متحرک اوسط اور عین مطابق انٹری اور آؤٹ آؤٹ میکانزم کو ملا دیا گیا ہے ، جس کا مقصد منافع کی شرح کو بہتر بنانا ہے۔
یہ حکمت عملی بنیادی طور پر آخری ٹریڈنگ دن کی اختتامی قیمت اور صارف کی وضاحت کردہ ان پٹ پیرامیٹرز کے حساب سے ایک نظر میں متوازن حرکت پذیر اوسط کی تعمیر کرتی ہے۔ جب قیمت بڑھتی ہے تو اوسط سے تجاوز کرتی ہے ، اور جب قیمت گرتی ہے تو اوسط سے تجاوز کرتی ہے ، اور اس کی روک تھام کی قیمت مقرر کی جاتی ہے ، جب شرط پوری ہوجاتی ہے تو اس کی روک تھام کی جاتی ہے یا رک جاتی ہے۔
اس کے علاوہ ، اس حکمت عملی میں ایک نظر میں متوازن حرکت پذیر اوسط رنگ کا تعین کرنے والے بادل کی تصدیق کا طریقہ کار شامل کیا گیا ہے۔ صرف اس صورت میں زیادہ کام کریں جب ایک نظر میں متوازن حرکت پذیر اوسط رنگ سبز ہو ، اور رنگ سرخ ہونے پر خالی ہو ، جس سے کچھ غیر درست سگنلوں کو فلٹر کیا جاسکے ، اور حکمت عملی کے منافع بخش ہونے کے امکانات کو بہتر بنایا جاسکے۔
اس حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ اس میں میڈین لائن اور ایک نظر میں متوازن حرکت پذیر اوسط دونوں اشارے کا امتزاج کیا گیا ہے ، جس میں قیمت کی اوسط کی مجموعی حرکت کو مدنظر رکھا گیا ہے ، اور آخری ٹریڈنگ دن کے اختتامی قیمتوں میں فی صد تبدیلی پر بھی توجہ دی گئی ہے۔ اس کے علاوہ ، کلاؤڈ تصدیق کا طریقہ کار تجارت کے جھوٹے اشاروں سے بچنے میں بھی مدد کرتا ہے ، جس سے حکمت عملی کی استحکام میں اضافہ ہوتا ہے۔
پیرامیٹرز کو بہتر بنانے کے معاملے میں ، اسٹاپ لاس اسٹاپ کی ترتیب بھی اس حکمت عملی کے خطرات کو قابو میں رکھتی ہے۔ آخر میں ، ایک نئی تکنیکی اشارے کے طور پر پہلی بار متوازن حرکت پذیر اوسط ، جس سے بہت سے لوگ واقف نہیں ہیں ، اس حکمت عملی کے استعمال میں ابتدائی فائدہ فراہم کرتا ہے۔
اس حکمت عملی کا سب سے بڑا خطرہ پہلے نظر میں متوازن حرکت پذیر اوسط خود کی عدم استحکام ہے۔ نئے اشارے کے طور پر ، اس کی طویل مدتی افادیت اور پیرامیٹرز کو بہتر بنانے کی گنجائش پر تبادلہ خیال کیا جارہا ہے۔ اگر ماڈل کا فرض غلط ہوجاتا ہے تو ، بہت سارے غلط سگنل پیدا ہوجاتے ہیں۔
اس کے علاوہ ، کسی بھی حکمت عملی کے رجحانات کی پیروی کرنے والے رجحانات کے الٹ جانے کا خطرہ ہے۔ جب قیمت اوسط سے تجاوز کر جاتی ہے لیکن جلد ہی اس کا رخ موڑ دیتی ہے تو اس حکمت عملی کو زیادہ نقصان اٹھانا پڑتا ہے۔ لہذا ، اسٹاپ نقصان کی ترتیب بہت اہم ہے۔
اس حکمت عملی کو مزید بہتر بنانے کے لیے:
پہلی نظر میں متوازن حرکت پذیر اوسط کی لمبائی پیرامیٹر کو بہتر بنانے کے لئے ، بہترین توازن پوائنٹ تلاش کریں۔
اسٹاپ نقصان کے مختلف پیرامیٹرز کی ترتیبات کی جانچ کریں اور پیرامیٹرز کا بہترین مجموعہ طے کریں۔ زیادہ سے زیادہ اسٹاپ نقصان کی حد منافع کی حد کو محدود کرتی ہے ، اور بہت کم اسٹاپ نقصان کی حد بہت زیادہ خطرہ ہے۔
دیگر تکنیکی اشارے کے فیصلے کو شامل کریں ، جیسے کہ MACD ، KD ، وغیرہ ، ایک کثیر اشارے کی اتفاق رائے پیدا کریں ، اور غلط سگنل کو مزید بچائیں۔
مختلف اقسام اور ادوار پر نظر ثانی کی جائے تاکہ بہترین حکمت عملی کا اطلاق کیا جاسکے۔
مشین لرننگ ماڈل کو شامل کرنے پر غور کریں ، پیرامیٹرز کو متحرک طور پر بہتر بنانے اور حکمت عملی کو خود بخود ایڈجسٹ کریں۔
اس حکمت عملی میں میڈین لائن اور پہلی نظر میں متوازن چلتی اوسط کی طاقت کو مربوط کیا گیا ہے ، معقول اسٹاپ نقصان کا تعین کیا گیا ہے ، اور کلاؤڈ تصدیق کے طریقہ کار کو شامل کیا گیا ہے۔ اس حکمت عملی کو اسٹاک انڈیکس ، غیر ملکی کرنسی ، اجناس اور کریپٹو کرنسیوں جیسے مختلف اقسام میں وسیع پیمانے پر استعمال کیا جاسکتا ہے۔ یہ ایک قابل قدر مقدار کی حکمت عملی ہے۔
/*backtest
start: 2022-11-17 00:00:00
end: 2023-11-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
strategy("Ichimoku Backtester with TP and SL", overlay=true,
currency = currency.USD, default_qty_type = strategy.percent_of_equity,
default_qty_value = 95)
//@version=4
//Inputs
ts_bars = input(9, minval=1, title="Tenkan-Sen Bars")
ks_bars = input(26, minval=1, title="Kijun-Sen Bars")
ssb_bars = input(52, minval=1, title="Senkou-Span B Bars")
cs_offset = input(26, minval=1, title="Chikou-Span Offset")
ss_offset = input(26, minval=1, title="Senkou-Span Offset")
long_entry = input(true, title="Long Entry")
short_entry = input(true, title="Short Entry")
wait_for_cloud = input(true, title="Wait for Cloud Confirmation")
use_short_stop_loss = input(true, title="Use Short Stop Loss")
short_stop_loss = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.1,
defval=5) * 0.01
use_long_stop_loss = input(true, title="Use Long Stop Loss")
long_stop_loss = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.1,
defval=5) * 0.01
use_short_take_profit = input(true, title="Use Short Take Profit")
short_take_profit = input(title="Short Take Profit (%)", type=input.float, minval=0.0, step=0.1,
defval = 20) * .01
use_long_take_profit = input(true, title="Use Long Take Profit")
long_take_profit = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1,
defval = 20) * .01
// === INPUT SHOW PLOT ===
showDate = input(defval = false, title = "Show Date Range", type = input.bool)
// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12)
fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31)
fromYear = input(defval = 2020, title = "From Year", type = input.integer, minval = 1970)
thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12)
thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31)
thruYear = input(defval = 2112, title = "Thru Year", type = input.integer, minval = 1970)
// === FUNCTION EXAMPLE ===
start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
middle(len) => avg(lowest(len), highest(len))
// Ichimoku Components
tenkan = middle(ts_bars)
kijun = middle(ks_bars)
senkouA = avg(tenkan, kijun)
senkouB = middle(ssb_bars)
bgcolor(color = showDate and window() ? color.gray : na, transp = 90) // plot within time window
// Plot Ichimoku Kinko Hyo
plot(tenkan, color=#0496ff, title="Tenkan-Sen")
plot(kijun, color=#991515, title="Kijun-Sen")
plot(close, offset=-cs_offset+1, color=#459915, title="Chikou-Span")
sa=plot(senkouA, offset=ss_offset-1, color=color.green, title="Senkou-Span A")
sb=plot(senkouB, offset=ss_offset-1, color=color.red, title="Senkou-Span B")
fill(sa, sb, color = senkouA > senkouB ? color.green : color.red, title="Cloud color")
ss_high = max(senkouA[ss_offset-1], senkouB[ss_offset-1])
ss_low = min(senkouA[ss_offset-1], senkouB[ss_offset-1])
// Entry/Exit Signals
tk_cross_bull = tenkan > kijun
tk_cross_bear = tenkan < kijun
cs_cross_bull = mom(close, cs_offset-1) > 0
cs_cross_bear = mom(close, cs_offset-1) < 0
price_above_kumo = close > ss_high
price_below_kumo = close < ss_low
senkou_green = senkouA > senkouB ? true : false
bullish = tk_cross_bull and cs_cross_bull and price_above_kumo
bearish = tk_cross_bear and cs_cross_bear and price_below_kumo
if (wait_for_cloud)
bullish := bullish and senkou_green
bearish := bearish and not senkou_green
longStopPrice = strategy.position_avg_price * (1 - long_stop_loss)
shortStopPrice = strategy.position_avg_price * (1 + short_stop_loss)
longLimitPrice = strategy.position_avg_price * (1 + long_take_profit)
shortLimitPrice = strategy.position_avg_price * (1 - short_take_profit)
in_long = false
in_long := in_long[1]
open_long = bullish and not in_long
open_short = bearish and in_long
if (open_long)
in_long := true
if (open_short)
in_long := false
strategy.entry("Long", strategy.long, when=open_long and long_entry and (showDate ? window() : true))
strategy.entry("Short", strategy.short ,when=open_short and short_entry and (showDate ? window() : true))
if (strategy.position_size > 0.0)
if (use_long_stop_loss and not use_long_take_profit)
strategy.exit("Long", stop = longStopPrice)
if (use_long_take_profit and not use_long_stop_loss)
strategy.exit("Long", limit = longLimitPrice)
if (use_long_take_profit and use_long_stop_loss)
strategy.exit("Long", stop = longStopPrice, limit=longLimitPrice)
if (strategy.position_size < 0.0)
if (use_short_stop_loss and not use_short_take_profit)
strategy.exit("Short", stop = shortStopPrice)
if (use_short_take_profit and not use_short_stop_loss)
strategy.exit("Short", limit = shortLimitPrice)
if (use_short_take_profit and use_short_stop_loss)
strategy.exit("Short", stop = shortStopPrice, limit = shortLimitPrice)
strategy.close("Long", when=bearish and not short_entry and (showDate ? window() : true))
strategy.close("Short", when=bullish and not long_entry and (showDate ? window() : true))