
اس حکمت عملی کا بنیادی خیال یہ ہے کہ دو اسٹاپ پوائنٹس قائم کیے جائیں۔ جب پہلا اسٹاپ پوائنٹ ٹرگر کیا جاتا ہے تو اسٹاپ نقصان کو داخلے کی قیمت پر منتقل کیا جاتا ہے تاکہ اسٹاپ نقصان کو روکنے سے بچایا جاسکے۔
یہ حکمت عملی بورن بینڈ اور اسٹوکاسٹک اشارے پر مبنی ہے۔ جب قیمت بورن بینڈ سے زیادہ ہو تو اس میں کمی کی جائے اور جب اسٹوکاسٹک اشارے زیادہ فروخت ہونے کی نشاندہی کرے تو اس میں اضافہ کیا جائے۔
اس کے علاوہ، اس میں شامل ہونے کے لئے حکمت عملی کی منطق یہ ہے:
جب بند ہونے والی قیمت بلین بینڈ سے نیچے ہوتی ہے اور اسٹوکاسٹک K لائن ڈے لائن سے نیچے ہوتی ہے تو زیادہ داخلہ ہوتا ہے
جب بند ہونے کی قیمت بلین بینڈ سے زیادہ ہو اور اسٹوکاسٹک K لائن پر D لائن کو عبور کرتے ہوئے خالی اندراج ہو
اس حکمت عملی میں دو اسٹاپ پوائنٹس مقرر کیے گئے ہیں۔ پہلا اسٹاپ پوائنٹ 200 اور دوسرا اسٹاپ پوائنٹ 500 پر مقرر کیا گیا ہے۔
جب قیمت کی نقل و حرکت کے دوران پہلا اسٹاپ لسٹ ٹرگر کیا جاتا ہے تو یہ حکمت عملی اسٹاپ لسٹ کو داخلہ کی قیمت پر منتقل کرتی ہے۔ اس طرح پہلے مرحلے کے منافع کو لاک کیا جاسکتا ہے ، جبکہ اسٹاپ نقصان کو قیمت کے اتار چڑھاؤ سے بچایا جاسکتا ہے۔
جب دوسرا اسٹاپ ٹرگر ہوتا ہے یا اسٹاپ نقصان ہوتا ہے تو اس حکمت عملی کو مکمل طور پر ختم کردیا جاتا ہے۔
اس طرح کی دو مرحلے کی روک تھام کی حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ منافع کو لاک کرنے کی اجازت دی جاسکتی ہے ، جبکہ روک تھام کو قیمت کے اتار چڑھاؤ کے کنارے سے بچایا جاسکتا ہے۔ داخلے کی قیمت پر روک تھام کے نقطہ کو منتقل کرکے ، منافع کو بچانے کے لئے روک تھام کے کنارے کے امکانات کو کم کیا جاسکتا ہے۔
ایک اور فائدہ یہ ہے کہ اس حکمت عملی میں قیمتوں کے اتار چڑھاؤ کی حد کا تعین کرنے کے لئے برن بینڈ اشارے اور اوورلوڈ اوورلوڈ کا تعین کرنے کے لئے اسٹوکسٹک اشارے کا ایک مجموعہ حکمت عملی استعمال کیا گیا ہے۔ دونوں اشارے ایک دوسرے کی تکمیل کرتے ہیں اور انٹری کی درستگی کو بہتر بناتے ہیں۔
اس حکمت عملی کا بنیادی خطرہ یہ ہے کہ برن بینڈ اشارے اور اسٹوکاسٹک اشارے دونوں غلط سگنل دے سکتے ہیں۔ اگر برن بینڈ رینج کا حساب کتاب غلط ہو تو ، اس سے کھیل میں داخل ہونے کا وقت ضائع ہوجائے گا یا غلط سگنل پیدا ہوگا۔ اگر اسٹوکاسٹک اشارے میں جھوٹی پیشرفت ہو تو ، اس سے بھی غلط داخلہ پیدا ہوگا۔
اس کے علاوہ ، داخلے کی قیمت تک جانے والے اسٹاپ نقصان کو ایک بار پھر مارجن کرنے کا خطرہ ہے۔ اگر تجارت میں وی ٹرن آؤٹ ہوتا ہے تو ، اسٹاپ نقصان کو دوسری بار متحرک کیا جاسکتا ہے۔
ان خطرات کو کم کرنے کے لئے ، برن بینڈ پیرامیٹرز کو ایڈجسٹ کیا جاسکتا ہے ، اسٹوکاسٹک اشارے کے پیرامیٹرز کے مجموعے کو بہتر بنایا جاسکتا ہے ، اور اسٹاپ نقصان کی مدت کو مناسب طریقے سے بڑھایا جاسکتا ہے۔
اس طرح کی دو مرحلے کی روک تھام کی حکمت عملی کو مزید بہتر بنایا جاسکتا ہے:
مختلف پیرامیٹرز کے مجموعے کی جانچ کی جاسکتی ہے ، برن بینڈ پیرامیٹرز اور اسٹوکاسٹک پیرامیٹرز کو بہتر بنایا جاسکتا ہے ، تاکہ بہترین پیرامیٹرز کا مجموعہ تلاش کیا جاسکے۔
اسٹاپ اسٹاپ نقصان کی مختلف ترتیبات کی جانچ کی جاسکتی ہے ، اسٹاپ اسٹاپ نقصان کے سائز کو بہتر بنایا جاسکتا ہے ، اور بہترین ترتیب مل سکتی ہے۔
دوسرے اشارے شامل کیے جاسکتے ہیں ، جیسے چلتی اوسط وغیرہ ، جس سے کثیر اشارے کے مجموعے کی حکمت عملی تشکیل دی جاسکتی ہے ، جس سے داخلے کی درستگی میں اضافہ ہوتا ہے۔
اسٹاپ نقصان کی مختلف حرکت کی منطق کا مطالعہ کیا جاسکتا ہے ، جیسے کہ داخلے کی قیمت کے بجائے ایک خاص فاصلے سے آگے بڑھنا۔
سٹاپ نقصان کے نقطہ کی نقل و حرکت کی تعداد میں اضافہ کیا جا سکتا ہے، تین یا اس سے زیادہ مرحلے کی سٹاپ نقصان کی نقل و حرکت کو ترتیب دیا جا سکتا ہے۔
اس حکمت عملی میں برن بینڈ اشارے اور اسٹوکاسٹک اشارے کا استعمال کیا گیا ہے تاکہ اس میں داخل ہونے کا وقت معلوم کیا جاسکے۔ اس میں دو رکاوٹیں لگائی گئیں ، اور پہلی رکاوٹ کے بعد اسٹاپ نقصان کی قیمت میں داخل ہونے کی حکمت عملی تشکیل دی گئی۔ اس حکمت عملی سے منافع کو مؤثر طریقے سے لاک کیا جاسکتا ہے اور اسٹاپ نقصان کو روکنے سے بچا جاسکتا ہے۔ حکمت عملی کے فوائد نمایاں ہیں ، لیکن اس میں کچھ حد تک بہتری کی گنجائش بھی موجود ہے۔ اس حکمت عملی کو پیرامیٹرز کی اصلاح ، کثیر اشارے کا مجموعہ ، اسٹاپ نقصان کی منطق کو ایڈجسٹ کرنے وغیرہ کے ذریعہ مزید بہتر بنایا جاسکتا ہے۔
/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 00:00:00
period: 1d
basePeriod: 1h
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/
// © fpsd4ve
//@version=5
// Add Bollinger Bands indicator (close, 20, 2) manually to visualise trading conditions
strategy("2xTP, SL to entry",
overlay=false,
pyramiding=0,
calc_on_every_tick=false,
default_qty_type=strategy.percent_of_equity,
default_qty_value=25,
initial_capital=1000,
commission_type=strategy.commission.percent,
commission_value=0.01
)
// PARAMETERS
// Assumes quote currency is FIAT as with BTC/USDT pair
tp1=input.float(200, title="Take Profit 1")
tp2=input.float(500, title="Take Profit 2")
sl=input.float(200, title="Stop Loss")
stOBOS = input.bool(true, title="Use Stochastic overbought/oversold threshold")
// Colors
colorRed = #FF2052
colorGreen = #66FF00
// FUNCTIONS
// Stochastic
f_stochastic() =>
stoch = ta.stoch(close, high, low, 14)
stoch_K = ta.sma(stoch, 3)
stoch_D = ta.sma(stoch_K, 3)
stRD = ta.crossunder(stoch_K, stoch_D)
stGD = ta.crossover(stoch_K, stoch_D)
[stoch_K, stoch_D, stRD, stGD]
// VARIABLES
[bbMiddle, bbUpper, bbLower] = ta.bb(close, 20, 2)
[stoch_K, stoch_D, stRD, stGD] = f_stochastic()
// ORDERS
// Active Orders
// Check if strategy has open positions
inLong = strategy.position_size > 0
inShort = strategy.position_size < 0
// Check if strategy reduced position size in last bar
longClose = strategy.position_size < strategy.position_size[1]
shortClose = strategy.position_size > strategy.position_size[1]
// Entry Conditions
// Enter long when during last candle these conditions are true:
// Candle high is greater than upper Bollinger Band
// Stochastic K line crosses under D line and is oversold
longCondition = stOBOS ?
low[1] < bbLower[1] and stGD[1] and stoch_K[1] < 25 :
low[1] < bbLower[1] and stGD[1]
// Enter short when during last candle these conditions are true:
// Candle low is lower than lower Bollinger Band
// Stochastic K line crosses over D line and is overbought
shortCondition = stOBOS ?
high[1] > bbUpper[1] and stRD[1] and stoch_K[1] > 75 :
high[1] > bbUpper[1] and stRD[1]
// Exit Conditions
// Calculate Take Profit
longTP1 = strategy.position_avg_price + tp1
longTP2 = strategy.position_avg_price + tp2
shortTP1 = strategy.position_avg_price - tp1
shortTP2 = strategy.position_avg_price - tp2
// Calculate Stop Loss
// Initialise variables
var float longSL = 0.0
var float shortSL = 0.0
// When not in position, set stop loss using close price which is the price used during backtesting
// When in a position, check to see if the position was reduced on the last bar
// If it was, set stop loss to position entry price. Otherwise, maintain last stop loss value
longSL := if inLong and ta.barssince(longClose) < ta.barssince(longCondition)
strategy.position_avg_price
else if inLong
longSL[1]
else
close - sl
shortSL := if inShort and ta.barssince(shortClose) < ta.barssince(shortCondition)
strategy.position_avg_price
else if inShort
shortSL[1]
else
close + sl
// Manage positions
strategy.entry("Long", strategy.long, when=longCondition)
strategy.exit("TP1/SL", from_entry="Long", qty_percent=50, limit=longTP1, stop=longSL)
strategy.exit("TP2/SL", from_entry="Long", limit=longTP2, stop=longSL)
strategy.entry("Short", strategy.short, when=shortCondition)
strategy.exit("TP1/SL", from_entry="Short", qty_percent=50, limit=shortTP1, stop=shortSL)
strategy.exit("TP2/SL", from_entry="Short", limit=shortTP2, stop=shortSL)
// DRAW
// Stochastic Chart
plot(stoch_K, color=color.blue)
plot(stoch_D, color=color.orange)
// Circles
plot(stOBOS ? stRD and stoch_K >= 75 ? stoch_D : na : stRD ? stoch_D : na, color=colorRed, style=plot.style_circles, linewidth=3)
plot(stOBOS ? stGD and stoch_K <= 25 ? stoch_D : na : stGD ? stoch_K : na, color=colorGreen, style=plot.style_circles, linewidth=3)
// Levels
hline(75, linestyle=hline.style_dotted)
hline(25, linestyle=hline.style_dotted)