اسٹوکاسٹک اور ایم اے سی ڈی اشارے پر مبنی ریورس ٹریڈنگ کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-09-21 21:39:34
ٹیگز:

جائزہ

اس حکمت عملی میں اسٹوکاسٹک اشارے کو شامل کیا گیا ہے تاکہ زیادہ خریدنے اور زیادہ فروخت ہونے والے الٹ پوائنٹس کا تعین کیا جاسکے اور رجحان کی تبدیلیوں کی نشاندہی کرنے کے لئے ایم اے سی ڈی اشارے کو شامل کیا گیا ہے ، جس کا مقصد الٹ ٹریڈنگ کے ذریعہ کم خریدنا اور زیادہ فروخت کرنا ہے۔ یہ منافع کو مقفل کرنے اور خطرات کو مؤثر طریقے سے کنٹرول کرنے کے لئے ٹریلنگ اسٹاپ بھی طے کرتا ہے۔

حکمت عملی منطق

  1. اسٹوکاسٹک اشارے کا استعمال زیادہ خریدنے اور زیادہ فروخت ہونے کی حالتوں کی نشاندہی کرنے کے لئے کریں۔ 20 سے نیچے کی پڑھنے سے زیادہ فروخت کی سطح ظاہر ہوتی ہے جبکہ 80 سے اوپر سے زیادہ خریدنے والے زون کی نشاندہی ہوتی ہے ، جو الٹ جانے کے اشارے بناتے ہیں۔

  2. ایم اے سی ڈی گولڈن کراسز پر طویل اور ایم اے سی ڈی موت کراسز پر مختصر جائیں۔ سگنل لائن کے اوپر ایم اے سی ڈی کراسنگ سے مراد اوسط حرکت پذیر الٹ ہے اور اس کا مطلب یہ ہے کہ رجحان الٹ ہے۔

  3. جب اسٹوکاسٹک ریورس MACD ریورس سگنلز کے ساتھ سیدھا ہو تو طویل یا مختصر پوزیشنیں لیں.

  4. ٹریلنگ اسٹاپ نقصان کو نافذ کریں۔ رجحان میں داخل ہونے کے بعد ، جب قیمت ایک خاص منافع فیصد تک پہنچ جاتی ہے تو ، ٹریلنگ اسٹاپ کو متحرک کیا جاتا ہے۔ اسٹاپ کی سطح پھر اوپر کی قیمت کے چینل کو پیچھے چھوڑ دیتی ہے۔

  5. موجودہ پوزیشنوں کو بند کر دیا جاتا ہے اور جب ایک نیا ریورس سگنل ظاہر ہوتا ہے تو اسٹاپ نقصان کو دوبارہ ترتیب دیا جاتا ہے۔

فوائد

  • متعدد اشارے کی تصدیق سے سگنل کی درستگی میں اضافہ ہوتا ہے

  • اسٹوکاسٹک مؤثر طریقے سے overbought / oversold زون کی نشاندہی کرتا ہے

  • ایم اے سی ڈی حرکت پذیر اوسط کی واپسی کو جلدی پکڑتا ہے

  • ٹریلنگ سٹاپ منافع میں اچھی طرح سے مقفل

  • واضح حکمت عملی سگنل کے ساتھ کافی بیک ٹسٹنگ ڈیٹا

  • آسان ایڈجسٹمنٹ کے لئے بہتر پیرامیٹرز

خطرات

  • متعدد اشارے کو بہتر بنانے میں دشواری

  • الٹ سگنل غلط اندازہ لگایا جا سکتا ہے اور توثیق کی ضرورت ہے

  • مزید اعداد و شمار کی ضرورت ہے ٹیسٹ اور ٹیلنگ اسٹاپ کو بہتر بنانے کے لئے

  • اسٹوکاسٹک اور ایم اے سی ڈی کی پسماندہ نوعیت

  • کثرت سے تجارت سے زیادہ اخراجات پیدا ہو سکتے ہیں

بہتری

  • ایک مضبوط تجارتی نظام کی تعمیر کے لئے مزید اشارے شامل کریں

  • بہترین مجموعے تلاش کرنے کے لئے مختلف پیرامیٹر ادوار کی جانچ کریں

  • ریئل ٹائم میں اپ ڈیٹ کرنے والے موافقت پذیر پیرامیٹرز تیار کریں

  • زیادہ سے زیادہ واپسی کو محدود کرنے کے لئے ڈراونگ اسٹاپ نقصان مقرر کریں

  • فرق سے غلط سگنل سے بچنے کے لئے حجم شامل کریں

  • تجارتی اخراجات کے اثرات پر غور کریں اور کم سے کم منافع کا ہدف مقرر کریں

نتیجہ

یہ حکمت عملی سازگار الٹ ٹریڈنگ پوائنٹس کی نشاندہی کرنے میں اسٹوکاسٹک اور ایم اے سی ڈی کی طاقتوں کو یکجا کرتی ہے۔ ٹریلنگ اسٹاپ میکانزم بھی منافع میں مؤثر طریقے سے مقفل کرتا ہے۔ لیکن الٹ ٹریڈنگ میں اب بھی موروثی خطرات ہوتے ہیں جن کی زیادہ اشارے سے توثیق اور پیرامیٹر کی مزید اصلاح کی ضرورت ہوتی ہے۔ مستحکم پیرامیٹرز اور مناسب سرمایہ انتظام کے ساتھ ، یہ حکمت عملی ایک انتہائی موثر قلیل مدتی تجارتی نظام بن سکتی ہے۔


/*backtest
start: 2022-09-14 00:00:00
end: 2023-06-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
// @CoinDigger
//
// Credits for the base strategy go to HPotter
//
// I've just added a trail stop, basic leverage simulation and stop loss
//
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 28/01/2021
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// MACD – Moving Average Convergence Divergence. The MACD is calculated 
// by subtracting a 26-day moving average of a security's price from a 
// 12-day moving average of its price. The result is an indicator that 
// oscillates above and below zero. When the MACD is above zero, it means 
// the 12-day moving average is higher than the 26-day moving average. 
// This is bullish as it shows that current expectations (i.e., the 12-day 
// moving average) are more bullish than previous expectations (i.e., the 
// 26-day average). This implies a bullish, or upward, shift in the supply/demand 
// lines. When the MACD falls below zero, it means that the 12-day moving average 
// is less than the 26-day moving average, implying a bearish shift in the 
// supply/demand lines.
// A 9-day moving average of the MACD (not of the security's price) is usually 
// plotted on top of the MACD indicator. This line is referred to as the "signal" 
// line. The signal line anticipates the convergence of the two moving averages 
// (i.e., the movement of the MACD toward the zero line).
// Let's consider the rational behind this technique. The MACD is the difference 
// between two moving averages of price. When the shorter-term moving average rises 
// above the longer-term moving average (i.e., the MACD rises above zero), it means 
// that investor expectations are becoming more bullish (i.e., there has been an 
// upward shift in the supply/demand lines). By plotting a 9-day moving average of 
// the MACD, we can see the changing of expectations (i.e., the shifting of the 
// supply/demand lines) as they occur.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

MACD(fastLength,slowLength,signalLength) =>
    pos = 0.0
    fastMA = ema(close, fastLength)
    slowMA = ema(close, slowLength)
    macd = fastMA - slowMA
    signal = sma(macd, signalLength)
    pos:= iff(signal < macd , 1,
	       iff(signal > macd, -1, nz(pos[1], 0))) 
    pos
strategy(title="Combo Backtest 123 Reversal & MACD Crossover with Trail and Stop", shorttitle="ComboReversal123MACDWithStop", overlay = false, precision=8,default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, currency="USD", commission_type=strategy.commission.percent, commission_value=0.075)

leverage=input(2,"leverage",step=1)
percentOfEquity=input(100,"percentOfEquity",step=1)

sl_trigger = input(10, title='Stop Trail Trigger %', type=input.float)/100
sl_trail = input(5, title='Stop Trail %', type=input.float)/100
sl_inp = input(10, title='Stop Loss %', type=input.float)/100

Length = input(100, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(2, minval=1)
Level = input(1, minval=1)
//-------------------------
fastLength = input(10, minval=1)
slowLength = input(19,minval=1)
signalLength=input(24,minval=1)
xSeria = input(title="Source", type=input.source, defval=close)
reverse = input(false, title="Trade reverse")


////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2015, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2999, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate
 
////////////////////////////////////////////////////////////////////////////////



////////////////////// STOP LOSS CALCULATIONS //////////////////////////////
///////////////////////////////////////////////////


cond() => barssince(strategy.position_size[1] == 0 and (strategy.position_size > 0 or strategy.position_size < 0)) > 0

lastStopLong = 0.0
lastStopLong := lastStopLong[1] != strategy.position_avg_price - (strategy.position_avg_price * (sl_inp)) and lastStopLong[1]  != 0.0 ? lastStopLong[1]  : strategy.position_size > 0 ? (cond() and close > strategy.position_avg_price + (strategy.position_avg_price * (sl_trigger)) ? strategy.position_avg_price + (strategy.position_avg_price * (sl_trail)) : strategy.position_avg_price - (strategy.position_avg_price * (sl_inp))) : 0
lastStopShort = 0.0
lastStopShort := lastStopShort[1] != strategy.position_avg_price + (strategy.position_avg_price * (sl_inp)) and lastStopShort[1]  != 9999999999.0 ? lastStopShort[1]  : strategy.position_size < 0 ? (cond() and close < strategy.position_avg_price - (strategy.position_avg_price * (sl_trigger)) ? strategy.position_avg_price - (strategy.position_avg_price * (sl_trail)) : strategy.position_avg_price + (strategy.position_avg_price * (sl_inp))) : 9999999999.0

longStopPrice = 0.0
longStopPrice2 = 0.0
longStopPrice3 = 0.0
shortStopPrice = 0.0
longStopPrice := if strategy.position_size > 0
    originalStop = strategy.position_avg_price - (strategy.position_avg_price * (sl_inp))
    trigger = strategy.position_avg_price + (strategy.position_avg_price * (sl_trigger))
    trail = strategy.position_avg_price + (strategy.position_avg_price * (sl_trail))
    stopValue = high > trigger ? trail : 0
    max(stopValue, originalStop, longStopPrice[1])
else
    0

longStopPrice2 := if strategy.position_size > 0
    originalStop = strategy.position_avg_price - (strategy.position_avg_price * (sl_inp))
    trigger = strategy.position_avg_price + (strategy.position_avg_price * (sl_trigger*2))
    trail = strategy.position_avg_price + (strategy.position_avg_price * (sl_trail*2))
    stopValue = high > trigger ? trail : 0
    max(stopValue, originalStop, longStopPrice2[1])
else
    0


longStopPrice3 := if strategy.position_size > 0
    originalStop = strategy.position_avg_price - (strategy.position_avg_price * (sl_inp))
    trigger = strategy.position_avg_price + (strategy.position_avg_price * (sl_trigger*4))
    trail = strategy.position_avg_price + (strategy.position_avg_price * (sl_trail*3))
    stopValue = high > trigger ? trail : 0
    max(stopValue, originalStop, longStopPrice3[1])
else
    0
    
shortStopPrice := if strategy.position_size < 0
    originalStop = strategy.position_avg_price + (strategy.position_avg_price * (sl_inp))
    trigger = strategy.position_avg_price - (strategy.position_avg_price * (sl_trigger))
    trail = strategy.position_avg_price - (strategy.position_avg_price * (sl_trail))
    stopValue = low < trigger ? trail : 999999
    min(stopValue, originalStop, shortStopPrice[1])
else
    999999
    
///////////////////////////////////////////////////
///////////////////////////////////////////////////


posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posMACD = MACD(fastLength,slowLength, signalLength)
pos = iff(posReversal123 == 1 and posMACD == 1 , 1,
	   iff(posReversal123 == -1 and posMACD == -1, -1, 0)) 
	   
possig = pos

quantity = max(0.000001,min(((strategy.equity*(percentOfEquity/100))*leverage/open),100000000))

if (possig == 1 and time_cond)
    strategy.entry("Long", strategy.long, qty=quantity)
if (possig == -1 and time_cond)
    strategy.entry("Short", strategy.short, qty=quantity) 
if (strategy.position_size > 0 and possig == -1 and time_cond)   
    strategy.close_all()
if (strategy.position_size < 0 and possig == 1 and time_cond)   
    strategy.close_all()
if ((strategy.position_size < 0 or strategy.position_size > 0) and possig == 0)   
    strategy.close_all()

//EXIT TRADE @ TSL
if strategy.position_size > 0
    strategy.exit(id="Long", stop=longStopPrice)
if strategy.position_size < 0
    strategy.exit(id="Short", stop=shortStopPrice)



مزید