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


تخلیق کی تاریخ: 2023-09-21 21:39:34 آخر میں ترمیم کریں: 2023-09-21 21:39:34
کاپی: 0 کلکس کی تعداد: 728
1
پر توجہ دیں
1617
پیروکار

جائزہ

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

حکمت عملی کا اصول

  1. اسٹوکاسٹک اشارے کا استعمال کرتے ہوئے اوورلوڈ اور اوور سیل کی صورتحال کا تعین کریں۔ 9 تاریخ کی لائن 20 بجے سے کم اوورلوڈ زون ہے ، 80 بجے سے زیادہ اوورلوڈ زون ہے ، جس میں الٹ کا اشارہ ہوتا ہے۔

  2. MACD اشارے گولڈ فورک زیادہ ہے ، ڈیڈ فورک خالی ہے۔ MACD لائن توڑنے والی سگنل لائن اوسط لائن کی الٹ کی پیش گوئی کرتی ہے ، رجحان کی الٹ کی تجویز کرتی ہے۔

  3. جب اسٹاکسٹک ریورس سگنل اور MACD ریورس سگنل ایک ساتھ ہوتے ہیں تو ، زیادہ خالی کریں۔

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

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

اسٹریٹجک فوائد

  • متعدد پیمائش کے فیصلوں کو ملا کر سگنل کی درستگی کو بہتر بنایا جاسکتا ہے

  • اسٹاکسٹک اشارے اوور بیئر اوور سیل علاقوں کی مؤثر شناخت کرتے ہیں

  • میڈین لائن کی تبدیلی کو پکڑنے کے لئے MACD پہلے سے ہی رجحان کی تبدیلی کو پکڑ سکتا ہے

  • ٹریکنگ سٹاپ نقصانات کے ساتھ منافع کی حفاظت

  • ڈیٹا کافی ہے، حکمت عملی کا اشارہ واضح ہے

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

اسٹریٹجک رسک

  • کثیر پیکیج کو بہتر بنانا مشکل ہے

  • ریورس سگنل غلط فہمی کا باعث بن سکتا ہے اور اس کی تصدیق کے لئے دیگر اشارے کی ضرورت ہوتی ہے۔

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

  • اسٹوکاسٹک اور MACD دونوں میں تاخیر کا مسئلہ ہے

  • بار بار تجارت کرنے سے اعلی قیمتوں کا سامنا کرنا پڑتا ہے

حکمت عملی کی اصلاح کی سمت

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

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

  • اپنی مرضی کے مطابق پیرامیٹرز کی ترتیبات تیار کریں اور بہترین پیرامیٹرز کو حقیقی وقت میں اپ ڈیٹ کریں

  • زیادہ سے زیادہ واپسی کو کنٹرول کرنے کے لئے واپسی کی روک تھام کی ترتیب

  • ٹرانزیکشن حجم کے اشارے کو شامل کریں تاکہ قیمتوں کے انحراف سے پیدا ہونے والی غلطیوں سے بچا جاسکے

  • ٹرانزیکشن لاگت کے اثرات کو مدنظر رکھتے ہوئے ، کم سے کم اسٹاپ اپ سیٹ کریں

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*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)