MACD دو طرفہ اصلاح کی تجارتی حکمت عملی


تخلیق کی تاریخ: 2024-01-22 11:10:10 آخر میں ترمیم کریں: 2024-01-22 11:10:10
کاپی: 0 کلکس کی تعداد: 626
1
پر توجہ دیں
1617
پیروکار

MACD دو طرفہ اصلاح کی تجارتی حکمت عملی

حکمت عملی کا جائزہ

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

تیسرا، حکمت عملی

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

چار، حکمت عملی کے فوائد

  1. دو طرفہ پیرامیٹرز کی اصلاح: زیادہ سے زیادہ اور کم سے کم پیرامیٹرز کو آزادانہ طور پر بہتر بنایا جاسکتا ہے ، تاکہ ان کو مارکیٹ کی سمت کے لئے بہترین ترتیب دیا جاسکے۔
  2. قابل ترتیب سگنل ہموار: سگنل پیرامیٹرز سگنل لائن کی ہموار سطح کو کنٹرول کرسکتے ہیں ، جعلی سگنل کو فلٹر کریں۔
  3. قابل ترتیب سگنل فلٹرنگ: قابل ترتیب ہے کہ آیا سگنل لائن کراسنگ کو متحرک کرنے کی ضرورت ہے ، تاکہ جعلی سگنل کو گمراہ نہ کیا جاسکے۔
  4. پوزیشن کنٹرول کو ٹھیک سے ایڈجسٹ کریں: آپ کو ایک ہی وقت میں زیادہ سے زیادہ یا خالی کرنے کے لئے کھول سکتے ہیں.

پانچواں، حکمت عملی کا خطرہ

  1. MACD تاخیر کا مسئلہ: MACD خود کچھ تاخیر کا شکار ہے ، اور اس میں تیزی سے الٹ جانے کا امکان ہے۔
  2. کثیر خلائی سوئچنگ کا خطرہ: مارکیٹ میں تیزی سے تبدیلیوں کے دوران ، پوزیشن کی تبدیلی بہت زیادہ ہوسکتی ہے۔
  3. پیرامیٹرز کا خطرہ: غلط پیرامیٹرز کی ترتیب ممکنہ طور پر حالات کی خصوصیات کو پکڑنے میں ناکام ہوسکتی ہے۔
  4. اسٹاپ نقصان کی حفاظت: واحد نقصان کو کنٹرول کرنے کے لئے معقول اسٹاپ نقصان قائم کیا جانا چاہئے۔

خطرے کا انتظام کرنے کے طریقے:

  1. دوسرے اشارے کے ساتھ مل کر ، بڑے پیمانے پر اندازہ لگائیں ، اور اونچائی اور زوال کا پیچھا کرنے سے گریز کریں۔
  2. سگنل تاخیر اور ہموار پیرامیٹرز کو سیٹ کریں تاکہ غلط سگنل کو کم کیا جاسکے۔
  3. پیرامیٹرز کو بہتر بنانے کے لئے بار بار ٹیسٹ کریں تاکہ وہ مختلف دوروں کی رفتار سے مل سکیں۔
  4. اسٹاپ نقصان روکنے کا طریقہ کار ترتیب دیں ، اور انفرادی نقصان کو کنٹرول کریں۔

6، اصلاح کی سمت

اس حکمت عملی کو بہتر بنانے کے لیے مندرجہ ذیل نکات پر غور کیا جا سکتا ہے۔

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

  2. سگنل لائن کے مختلف پیرامیٹرز کی جانچ کریں۔ Smoother سگنل لائن زیادہ شور کو فلٹر کر سکتی ہے۔

  3. بہترین توازن تلاش کرنے کے لئے سگنل لائنز کو کھولنے اور بند کرنے کے لئے کراس فلٹر کے درمیان فرق کی جانچ پڑتال کریں.

  4. زیادہ سے زیادہ سٹاپ نقصان کا تناسب مقرر کریں۔

  5. اس حکمت عملی کو زیادہ سے زیادہ کرنے کے لئے صرف زیادہ کام کرنے کی کوشش کریں یا صرف خالی کام کریں۔

VII

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Gentleman-Goat & TradingTools.Software/Optimizer
strategy(title="MACD Short/Long Strategy for TradingView Input Optimizer", shorttitle="MACD Short/Long TVIO", initial_capital=1000, default_qty_value=100, default_qty_type=strategy.percent_of_equity)

// Get Inputs Long
allow_long                  = input.bool(title="Allow Long", defval=true, group="inputs long")
fast_length_long            = input.int(title="Fast Length Long", defval=13, group="inputs long")
slow_length_long            = input.int(title="Slow Length Long", defval=19, group="inputs long")
src_long                    = input.source(title="Source Long", defval=close, group="inputs long")
signal_length_long          = input.int(title="Signal Smoothing Long", minval = 1, maxval = 50, defval = 9, group="inputs long")
sma_source_long             = input.string(title="Oscillator MA Type Long", defval="EMA", options=["SMA", "EMA"], group="inputs long")
sma_signal_long             = input.string(title="Signal Line MA Type Long", defval="EMA", options=["SMA", "EMA"], group="inputs long")
cross_point_long            = input.int(title="Cross Point Long", defval=0, group="inputs long")
cross_delay_macd_long       = input.int(title="MacD Cross Delay Long", defval=0, group="inputs long")
signal_must_cross_long      = input.bool(title="Signal Must Also Cross Long", defval=false, group="inputs long")
cross_delay_signal_long     = input.int(title="Signal Cross Delay Long", defval=0, group="inputs long")

//Get Inputs Short
allow_short                 = input.bool(title="Allow Short", defval=true, group="inputs short")
fast_length_short           = input.int(title="Fast Length Short", defval=11, group="inputs short")
slow_length_short           = input.int(title="Slow Length Short", defval=20, group="inputs short")
src_short                   = input.source(title="Source Short", defval=close, group="inputs short")
signal_length_short         = input.int(title="Signal Smoothing Short", minval = 1, maxval = 50, defval = 9, group="inputs short")
sma_source_short            = input.string(title="Oscillator MA Type Short", defval="EMA", options=["SMA", "EMA"], group="inputs short")
sma_signal_short            = input.string(title="Signal Line MA Type Short", defval="EMA", options=["SMA", "EMA"], group="inputs short")
cross_point_short           = input.int(title="Cross Point Short", defval=0, group="inputs short")
cross_delay_macd_short      = input.int(title="MacD Cross Delay Short", defval=1, group="inputs short")
signal_must_cross_short     = input.bool(title="Signal Must Also Cross Short", defval=false, group="inputs short")
cross_delay_signal_short    = input.int(title="Signal Cross Delay Short", defval=0, group="inputs short")

use_stop_loss_long          = input.bool(defval=false,title="Use Stop Loss Long", group="Stop/Profit Long")
stop_loss_long_percentage   = input.float(defval=1,title="Stop Loss % Long",minval=0.0,step=0.1, group="Stop/Profit Long") * .01
use_take_profit_long        = input.bool(defval=false,title="Use Take Profit Long", group="Stop/Profit Long")
take_profit_long_percentage = input.float(defval=1,title="Take Profit % Long",minval=0.0,step=0.1, group="Stop/Profit Long") * .01
use_stop_loss_short         = input.bool(defval=true,title="Use Stop Loss Short", group="Stop/Profit Short")
stop_loss_short_percentage  = input.float(defval=21,title="Stop Loss % Short",minval=0.0,step=0.1, group="Stop/Profit Short") * .01
use_take_profit_short       = input.bool(defval=true,title="Use Take Profit Short", group="Stop/Profit Short")
take_profit_short_percentage= input.float(defval=20,title="Take Profit % Short",minval=0.0,step=0.1, group="Stop/Profit Short") * .01
//------------------------------------------------------------------------------

// Plot colors Long
col_macd_long        = input.color(#2962FF, "MACD Line Long", group="Color Settings", inline="MACD")
col_signal_long      = input.color(#FF6D00, "Signal Line Long", group="Color Settings", inline="Signal")
col_grow_above_long  = input.color(#26A69A, "Grow Above Long", group="Histogram Color Settings", inline="Above Long")
col_fall_above_long  = input.color(#B2DFDB, "Fall Above Long", group="Histogram Color Settings", inline="Above Long")
col_grow_below_long  = input.color(#FFCDD2, "Grow Below Long", group="Histogram Color Settings", inline="Below Long")
col_fall_below_long  = input.color(#FF5252, "Fall Below Long", group="Histogram Color Settings", inline="Below Long")

// Plot colors Short
col_macd_short        = input.color(#B03DFF, "MACD Line Short", group="Color Settings", inline="MACD")
col_signal_short      = input.color(#00FFE8, "Signal Line Short", group="Color Settings", inline="Signal")
col_grow_above_short  = input.color(#D95965, "Grow Above Short", group="Histogram Color Settings", inline="Above Short")
col_fall_above_short  = input.color(#4D2024, "Fall Above Short", group="Histogram Color Settings", inline="Above Short")
col_grow_below_short  = input.color(#00322D, "Grow Below Short", group="Histogram Color Settings", inline="Below Short")
col_fall_below_short  = input.color(#00ADAD, "Fall Below Short", group="Histogram Color Settings", inline="Below Short")

// Calculate Long
fast_ma_long = sma_source_long == "SMA" ? ta.sma(src_long, fast_length_long) : ta.ema(src_long, fast_length_long)
slow_ma_long = sma_source_long == "SMA" ? ta.sma(src_long, slow_length_long) : ta.ema(src_long, slow_length_long)
macd_long    = fast_ma_long - slow_ma_long
signal_long  = sma_signal_long == "SMA" ? ta.sma(macd_long, signal_length_long) : ta.ema(macd_long, signal_length_long)
hist_long    = macd_long - signal_long

// Calculate Short
fast_ma_short = sma_source_short == "SMA" ? ta.sma(src_short, fast_length_short) : ta.ema(src_short, fast_length_short)
slow_ma_short = sma_source_short == "SMA" ? ta.sma(src_short, slow_length_short) : ta.ema(src_short, slow_length_short)
macd_short    = fast_ma_short - slow_ma_short
signal_short  = sma_signal_short == "SMA" ? ta.sma(macd_short, signal_length_short) : ta.ema(macd_short, signal_length_short)
hist_short    = macd_short - signal_short

//Plot Long
plot(hist_long, title="Histogram Long", style=plot.style_columns, color=(hist_long>=0 ? (hist_long[1] < hist_long ? col_grow_above_long : col_fall_above_long) : (hist_long[1] < hist_long ? col_grow_below_long : col_fall_below_long)))
plot(macd_long, title="MACD Long", color=col_macd_long)
plot(signal_long, title="Signal Long", color=col_signal_long)

//Plot Short
plot(hist_short, title="Histogram Short", style=plot.style_columns, color=(hist_short>=0 ? (hist_short[1] < hist_short ? col_grow_above_short : col_fall_above_short) : (hist_short[1] < hist_short ? col_grow_below_short : col_fall_below_short)))
plot(macd_short, title="MACD Short", color=col_macd_short)
plot(signal_short, title="Signal Short", color=col_signal_short)

var detectedLongCrossOver = false
var detectedShortCrossUnder = false

if(ta.crossunder(macd_short,cross_point_short))
    detectedShortCrossUnder := true
if(ta.crossover(macd_short,cross_point_short))
    detectedShortCrossUnder := false
                
if(ta.crossover(macd_long,cross_point_long))
    detectedLongCrossOver := true
if(ta.crossunder(macd_long,cross_point_long))
    detectedLongCrossOver := false

crossover_signal_long = ta.crossover(signal_long,cross_point_long)
crossunder_signal_long = ta.crossunder(signal_long,cross_point_long)

crossunder_signal_short = ta.crossunder(signal_short,cross_point_short)
crossover_signal_short = ta.crossover(signal_short,cross_point_short)

crossover_macd_long = ta.crossover(macd_long,cross_point_long)
crossunder_macd_long = ta.crossunder(macd_long,cross_point_long)

crossunder_macd_short = ta.crossunder(macd_short,cross_point_short)
crossover_macd_short = ta.crossover(macd_short,cross_point_short)

inEntry = false
//Strategy Entries
if (strategy.equity > 0) //This is required for the input optimizer to work since it will fail if the strategy fails to succeed by not having enough equity.
    
    if (strategy.position_size <= 0 and allow_long==true and inEntry==false)
        if(signal_must_cross_long==true)
            longSignalCondition = detectedLongCrossOver==true and crossover_signal_long[cross_delay_signal_long]
            strategy.entry(id="long", direction=strategy.long, when=longSignalCondition)
            if(longSignalCondition)
                inEntry:=true
        else
            longMacDCondition = crossover_macd_long[cross_delay_macd_long]
            strategy.entry(id="long", direction=strategy.long, when=longMacDCondition)
            if(longMacDCondition)
                inEntry:=true
    if (strategy.position_size >= 0 and allow_short==true and inEntry==false)
        if(signal_must_cross_short==true)
            shortSignalCondition = detectedShortCrossUnder and crossunder_signal_short[cross_delay_signal_short]
            strategy.entry(id="short", direction=strategy.short, when=shortSignalCondition)
            if(shortSignalCondition)
                inEntry:=true
        else
            shortMacDCondition = crossunder_macd_short[cross_delay_macd_short]
            strategy.entry(id="short", direction=strategy.short, when=shortMacDCondition)
            if(shortMacDCondition)
                inEntry:=true
    if(strategy.position_size > 0 and allow_long==true and allow_short==false)
        if(signal_must_cross_long==true)
            strategy.close(id="long", when=detectedLongCrossOver==false and crossunder_signal_long)
        else
            strategy.close(id="long", when=crossunder_macd_long)
    if(strategy.position_size < 0 and allow_short==true and allow_long==false)
        if(signal_must_cross_short==true)
            strategy.close(id="short", when=detectedShortCrossUnder==false and crossover_signal_short)
        else
            strategy.close(id="short", when=crossover_macd_short)

stop_loss_value_long    = strategy.position_avg_price*(1 - stop_loss_long_percentage)
take_profit_value_long  = strategy.position_avg_price*(1 + take_profit_long_percentage)
stop_loss_value_short   = strategy.position_avg_price*(1 + stop_loss_short_percentage)
take_profit_value_short = strategy.position_avg_price*(1 - take_profit_short_percentage)

if(strategy.position_size>0) //Long positions only
    strategy.exit(id="TP/SL Long",from_entry="long", limit=use_take_profit_long ? take_profit_value_long : na, stop=use_stop_loss_long ? stop_loss_value_long : na)
if(strategy.position_size<0) //Short positions only
    strategy.exit(id="TP/SL Short",from_entry="short", limit=use_take_profit_short ? take_profit_value_short : na, stop=use_stop_loss_short ? stop_loss_value_short : na)