مقداری اشاریوں کے طویل اور مختصر اشاروں پر مبنی طویل اور مختصر دو طرفہ تجارتی حکمت عملی


تخلیق کی تاریخ: 2023-12-13 17:30:13 آخر میں ترمیم کریں: 2023-12-13 17:30:13
کاپی: 0 کلکس کی تعداد: 690
1
پر توجہ دیں
1621
پیروکار

مقداری اشاریوں کے طویل اور مختصر اشاروں پر مبنی طویل اور مختصر دو طرفہ تجارتی حکمت عملی

جائزہ

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

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

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

  2. او بی وی کی پیمائش کے اشارے اور ای ایم اے کے اشارے کا استعمال کرتے ہوئے او بی وی oscillators کی تعمیر کے لئے فضائی طاقت کا تعین کریں۔ جب oscillators 0 سے زیادہ ہے تو وہ فضائی طاقت سے زیادہ کثیر طاقت کے طور پر سمجھا جاتا ہے ، اور اس کے برعکس 0 سے کم ہے۔

  3. جب قیمت اوپر چینل کو توڑتی ہے اور نوسکھئیے 0 سے زیادہ ہوتے ہیں تو ایک کثیر سگنل پیدا ہوتا ہے۔ جب قیمت نیچے چینل کو توڑتی ہے اور نوسکھئیے 0 سے کم ہوتے ہیں تو ایک خالی سگنل پیدا ہوتا ہے۔

  4. جب قیمت نیچے چینل کی طرف لوٹتی ہے تو فلیٹ پوزیشن کو زیادہ سر بنائیں۔ جب قیمت اوپر چینل کی طرف لوٹتی ہے تو فلیٹ پوزیشن کو قلیل سر کریں۔

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

  1. قیمتوں کے چینل کا استعمال کرتے ہوئے رجحانات کا تعین کریں اور زلزلے کے رجحانات کی طرف سے گمراہ نہ ہوں.

  2. پیمائش کے اشارے کے ساتھ مل کر ، زیادہ سے زیادہ طاقت کا اندازہ لگائیں ، اور اس بات کو یقینی بنائیں کہ تجارت کی سمت مارکیٹ کی طاقت کے مطابق ہو۔

  3. دو طرفہ تجارت کے ذریعہ ، آپ کو مارکیٹ میں اضافے یا کمی کے بغیر منافع حاصل ہوسکتا ہے۔

  4. خطرے کو مؤثر طریقے سے کنٹرول کرنے کے لئے سٹاپ نقصان کی روک تھام کی حکمت عملی قائم کریں.

اسٹریٹجک رسک

  1. قیمت چینل پیرامیٹرز کی غلط ترتیب کے نتیجے میں چینل بہت زیادہ نرمی یا بہت تنگ ہوسکتا ہے ، تجارت کے مواقع سے محروم ہوسکتا ہے یا غلط سگنل پیدا ہوسکتا ہے۔

  2. اشارے پیرامیٹرز کی غلط ترتیب بھی سگنل کی تاخیر یا پیشگی پیدا کرنے کا سبب بن سکتا ہے.

  3. اچانک واقعے کی وجہ سے تیز رفتار غیر معمولی رویے سے نقصانات کا سبب بننے والے نقصانات کا سبب بن سکتا ہے.

  4. دو طرفہ تجارت میں ایک ہی وقت میں زیادہ اور کم پوزیشنوں کا انتظام کرنے کی ضرورت ہوتی ہے۔

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

  1. قیمت چینل پیرامیٹرز کو بہتر بنانے کے لئے بہترین پیرامیٹرز کا مجموعہ تلاش کریں.

  2. OBV oscillator کے پیرامیٹرز کو بھی جانچ اور بہتر بنایا گیا ہے تاکہ یہ یقینی بنایا جا سکے کہ فلوٹ فورس کا وقت پر اور درست اندازہ لگایا جا سکے۔

  3. مارکیٹ کے رجحانات کا تعین کرنے کے لئے دیگر اشارے جیسے MACD ، KD وغیرہ کے ساتھ مل کر ، سگنل کی درستگی کو بہتر بنانے پر غور کیا جاسکتا ہے۔

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

  5. مختلف اقسام کی جانچ پڑتال کی جا سکتی ہے تاکہ حکمت عملی کے مطابق سب سے زیادہ مناسب قسم کی تلاش کی جا سکے۔

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2022-12-06 00:00:00
end: 2023-12-12 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/
// © ahancock

//@version=4
strategy(
     title = "Hancock - Filtered Volume OBV OSC [Strategy]",
     initial_capital = 1000,
     overlay = false,
     commission_type = strategy.commission.percent,
     commission_value= 0.075)

// Inputs
source = input(close, title = "Source", type = input.source)

use_volume_filter     = input(true, title = "Use Volume Filter", type = input.bool)
vol_filter_length     = input(20, title = "Volume Filter - Length", type = input.integer, minval = 1)
vol_filter_multiplier = input(1.2, title = "Volume Filter - Multiplier", type = input.float, minval = 0.1, step = 0.1)

use_osc    = input(true, title = "Use Oscillator", type = input.bool)
osc_length = input(40, title = "Oscillator - Signal Length", type = input.integer, minval = 1)

channel_length = input(65, title = "Channel - Slow Length", minval = 5, maxval = 200, step = 5)
channel_percent = input(70, title = "Channel - Fast Length Percent", minval = 5, maxval = 100, step = 5)

trade_both = "Both", trade_long = "Long", trade_short = "Short"
trade_direction       = input("Both", title = "Trade - Direction", options = [trade_both, trade_long, trade_short])
trade_leverage        = input(2, title = "Trade - Leverage", type = input.integer, minval = 1, maxval = 100)
trade_stop            = input(7.5, title = "Trade - Stop Loss %", type = input.float, minval = 0.5, step = 0.5, maxval = 100)
trade_trail_threshold = input(5, title = "Trade - Trail Stop Threshold %", type = input.float, minval = 0.5, step = 0.5, maxval = 100)
trade_trail           = input(5, title = "Trade - Trail Stop Minimum %", type = input.float, minval = 0.5, step = 0.5, maxval = 100)
trade_risk            = input(100, title = "Trade - Risk %", type = input.integer, step = 1, minval = 1, maxval = 100)

test_year   = input(2019, "Test - Year", type = input.integer, minval = 1970, maxval = 2222) 
test_month  = input(01, "Test - Month", type = input.integer, minval = 1, maxval = 12)
test_day    = input(01, "Test - Day", type = input.integer,  minval = 1, maxval = 31)

// Functions
get_round(value, precision) => round(value * (pow(10, precision))) / pow(10, precision)

get_obv(values, filter_length, filter_multiplier, use_filter, osc_length, use_osc) => 
    threshold = abs(avg(volume, filter_length) - (stdev(volume, filter_length) * filter_multiplier))

    obv = 0.0
    if (use_filter and volume < threshold)
        obv := nz(obv[1])
    else
        obv :=  nz(obv[1]) + sign(change(values)) * volume
        
    use_osc ? (obv - ema(obv, osc_length)) : obv

get_dc(high_values, low_values, length) =>

    top = highest(high_values, length)
    bot = lowest(low_values, length)
    mid = bot + ((top - bot) / 2)
    
    [top, mid, bot]

get_dcs(high_values, low_values, length, length_percent) => 
    
    slow_length = length
    fast_length = slow_length * length_percent / 100

    [slow_top, slow_mid, slow_bot] = 
         get_dc(high_values, low_values, slow_length)
         
    [fast_top, fast_mid, fast_bot] = 
         get_dc(high_values, low_values, fast_length)
    
    [slow_top, slow_mid, slow_bot, fast_top, fast_mid, fast_bot]

// Strategy
obv = get_obv(
         source, 
         vol_filter_length, 
         vol_filter_multiplier, 
         use_volume_filter,
         osc_length,
         use_osc)

[slow_top_price, _, slow_bot_price, fast_top_price, _, fast_bot_price] = 
     get_dcs(high, low, channel_length, channel_percent)

[slow_top_obv, _, slow_bot_obv, fast_top_obv, _, fast_bot_obv] = 
     get_dcs(obv, obv, channel_length, channel_percent)

enter_long_price  = high > slow_top_price[1]
exit_long_price   = low  < fast_bot_price[1]
enter_short_price = low  < slow_bot_price[1]
exit_short_price  = high > fast_top_price[1]

enter_long_obv  = obv > slow_top_obv[1] and (use_osc ? obv > 0 : true)
enter_short_obv = obv < fast_bot_obv[1] and (use_osc ? obv < 0 : true)
exit_long_obv   = obv < slow_bot_obv[1]
exit_short_obv  = obv > fast_top_obv[1]

// Trade Conditions
can_trade = true

enter_long_condition = enter_long_obv and enter_long_price
exit_long_condition  = exit_long_obv  and exit_long_price

enter_short_condition = enter_short_obv and enter_short_price 
exit_short_condition  = exit_short_obv  and exit_short_price

position_signal = 0
position_signal := 
     enter_long_condition ? 1 :
     enter_short_condition ? -1 :
     exit_long_condition or exit_short_condition ? 0 :
     position_signal[1]

// Positions
test_time   = timestamp(test_year, test_month, test_day, 0, 0)

if (time >= test_time and strategy.opentrades == 0)
    contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4)
    
    if (trade_direction == trade_both or trade_direction == trade_long)
        strategy.entry(
             "LONG", 
             strategy.long, 
             qty = contracts,
             when = enter_long_condition)
             
    if (trade_direction == trade_both or trade_direction == trade_short)
        strategy.entry(
             "SHORT", 
             strategy.short, 
             qty = contracts,
             when = enter_short_condition)

in_long  = strategy.position_size > 0
in_short  = strategy.position_size < 0

float long_high = na 
float short_low = na

long_high := in_long ? high >= nz(long_high[1], low) ? high : long_high[1] : na
short_low := in_short ? low <= nz(short_low[1], high) ? low : short_low[1] : na

long_change  = abs(((long_high - strategy.position_avg_price) / strategy.position_avg_price) * 100)
short_change = abs(((short_low - strategy.position_avg_price) / strategy.position_avg_price) * 100)

threshold_difference = (strategy.position_avg_price / trade_leverage) * (trade_trail_threshold / 100)

long_trail_threshold  = in_long ? strategy.position_avg_price + threshold_difference : na
short_trail_threshold = in_short ? strategy.position_avg_price - threshold_difference : na

long_trail = in_long and long_high > long_trail_threshold ? 
     long_high - (long_high / trade_leverage) * (trade_trail / 100) : na
short_trail = in_short and short_low < short_trail_threshold ? 
     short_low + (short_low / trade_leverage) * (trade_trail / 100) : na

stop_difference = (strategy.position_avg_price / trade_leverage) * (trade_stop / 100)

long_stop  = in_long ? long_high > long_trail_threshold ? long_trail : strategy.position_avg_price - stop_difference : na
short_stop = in_short ? short_low < short_trail_threshold ? short_trail : strategy.position_avg_price + stop_difference : na

strategy.exit("S/L", "LONG",
     stop = long_stop,
     qty = abs(get_round(strategy.position_size, 4)))
         
strategy.exit("S/L", "SHORT", 
     stop = short_stop, 
     qty = abs(get_round(strategy.position_size, 4)))

strategy.close_all(when = abs(change(position_signal)) > 0)

// Plots
plotshape(enter_long_condition, "Enter Long", shape.diamond, location.top, color.green)
plotshape(exit_long_condition, "Exit Long", shape.diamond, location.top, color.red)

plotshape(enter_short_condition, "Enter Short", shape.diamond, location.bottom, color.green)
plotshape(exit_short_condition, "Exit Short", shape.diamond, location.bottom, color.red)

color_green = #63b987
color_red   = #eb3d5c

hline(use_osc ? 0 : na)
plot(use_osc ? obv : na, color = color.silver, style = plot.style_area, transp = 90)
plot(obv, color = color.white, style = plot.style_line, linewidth = 2, transp = 0)

plot_slow_top = plot(slow_top_obv, color = color_green, linewidth = 2, transp = 60)
plot_slow_bot = plot(slow_bot_obv, color = color_green, linewidth = 2, transp = 60)
fill(plot_slow_top, plot_slow_bot, color = color_green, transp = 90)

plot_fast_top = plot(fast_top_obv, color = color_red, linewidth = 2, transp = 60)
plot_fast_bot = plot(fast_bot_obv, color = color_red, linewidth = 2, transp = 60)
fill(plot_fast_top, plot_fast_bot, color = color_red, transp = 90)