یہ حکمت عملی قیمتوں کے اختتام پوائنٹس کی بنیاد پر مارکیٹ کے رجحانات کی نشاندہی کرتی ہے اور قلیل مدتی قیمتوں میں الٹ جانے کے مواقع کو حاصل کرنے کے لئے مجموعی رجحان کا تعین کرنے کے لئے موافقت پذیر اشارے استعمال کرتی ہے۔ جب قیمتیں بیس لائن چینل سے باہر نکلتی ہیں تو یہ خرید / فروخت کے سگنل پیدا کرتی ہے۔ یہ حکمت عملی انتہائی اتار چڑھاؤ والی کریپٹو کرنسیوں کی تجارت کے لئے موزوں ہے۔
اس حکمت عملی کی مجموعی منطق واضح ہے اور اس کی کچھ عملی قدر ہے۔ تاہم ، بعض مارکیٹ کے حالات میں بڑے نقصانات سے بچنے کے لئے تجارتی خطرات کو ابھی بھی کنٹرول کیا جانا چاہئے۔ اگلے اقدامات میں متعدد جہتوں جیسے مجموعی فریم ورک ، اشارے کے پیرامیٹرز اور خطرے کے کنٹرول کو بہتر بنانا شامل ہے تاکہ حکمت عملی کے پیرامیٹرز اور تجارتی سگنل کو زیادہ قابل اعتماد بنایا جاسکے۔
/*backtest start: 2023-11-03 00:00:00 end: 2023-12-03 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version = 4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © TradingGroundhog // ||--- Cash & Date: cash_amout = 10000 pyramid_val = 1 cash_given_per_lot = cash_amout/pyramid_val startDate = input(title="Start Date",defval=13) startMonth = input(title="Start Month",defval=9) startYear = input(title="Start Year",defval=2021) afterStartDate = (time >= timestamp(syminfo.timezone,startYear, startMonth, startDate, 0, 0)) // ||------------------------------------------------------------------------------------------------------ // ||--- Strategy: strategy(title="TradingGroundhog - Strategy & Fractal V1 - Short term", overlay=true, max_bars_back = 4000, max_labels_count=500, commission_type=strategy.commission.percent, commission_value=0.00,default_qty_type=strategy.cash, default_qty_value= cash_given_per_lot, pyramiding=pyramid_val) // ||------------------------------------------------------------------------------------------------------ // ||--- Fractal Recognition: filterBW = input(true, title="filter Bill Williams Fractals:") filterFractals = input(true, title="Filter fractals using extreme method:") length = input(2, title="Extreme Window:") regulartopfractal = high[4] < high[3] and high[3] < high[2] and high[2] > high[1] and high[1] > high[0] regularbotfractal = low[4] > low[3] and low[3] > low[2] and low[2] < low[1] and low[1] < low[0] billwtopfractal = filterBW ? false : (high[4] < high[2] and high[3] < high[2] and high[2] > high[1] and high[2] > high[0] ? true : false) billwbotfractal = filterBW ? false : (low[4] > low[2] and low[3] > low[2] and low[2] < low[1] and low[2] < low[0] ? true : false) ftop = filterBW ? regulartopfractal : regulartopfractal or billwtopfractal fbot = filterBW ? regularbotfractal : regularbotfractal or billwbotfractal topf = ftop ? high[2] >= highest(high, length) ? true : false : false botf = fbot ? low[2] <= lowest(low, length) ? true : false : false filteredtopf = filterFractals ? topf : ftop filteredbotf = filterFractals ? botf : fbot // ||------------------------------------------------------------------------------------------------------ // ||--- V1 : Added Swing High/Low Option ShowSwingsHL = input(true) highswings = filteredtopf == false ? na : valuewhen(filteredtopf == true, high[2], 2) < valuewhen(filteredtopf == true, high[2], 1) and valuewhen(filteredtopf == true, high[2], 1) > valuewhen(filteredtopf == true, high[2], 0) lowswings = filteredbotf == false ? na : valuewhen(filteredbotf == true, low[2], 2) > valuewhen(filteredbotf == true, low[2], 1) and valuewhen(filteredbotf == true, low[2], 1) < valuewhen(filteredbotf == true, low[2], 0) //--------------------------------------------------------------------------------------------------------- // ||--- V2 : Plot Lines based on the fractals. showchannel = input(true) //--------------------------------------------------------------------------------------------------------- // ||--- ZigZag: showZigZag = input(true) //---------------------------------------------------------------------------------------------------------- // ||--- Fractal computation: istop = filteredtopf ? true : false isbot = filteredbotf ? true : false topcount = barssince(istop) botcount = barssince(isbot) vamp = input(title="VolumeMA", defval=2) vam = sma(volume, vamp) fractalup = 0.0 fractaldown = 0.0 up = high[3]>high[4] and high[4]>high[5] and high[2]<high[3] and high[1]<high[2] and volume[3]>vam[3] down = low[3]<low[4] and low[4]<low[5] and low[2]>low[3] and low[1]>low[2] and volume[3]>vam[3] fractalup := up ? high[3] : fractalup[1] fractaldown := down ? low[3] : fractaldown[1] //---------------------------------------------------------------------------------------------------------- // ||--- Fractal save: fractaldown_save = array.new_float(0) for i = 0 to 4000 if array.size(fractaldown_save) < 3 if array.size(fractaldown_save) == 0 array.push(fractaldown_save, fractaldown[i]) else if fractaldown[i] != array.get(fractaldown_save, array.size(fractaldown_save)-1) array.push(fractaldown_save, fractaldown[i]) if array.size(fractaldown_save) < 3 array.push(fractaldown_save, fractaldown) array.push(fractaldown_save, fractaldown) fractalup_save = array.new_float(0) for i = 0 to 4000 if array.size(fractalup_save) < 3 if array.size(fractalup_save) == 0 array.push(fractalup_save, fractalup[i]) else if fractalup[i] != array.get(fractalup_save, array.size(fractalup_save)-1) array.push(fractalup_save, fractalup[i]) if array.size(fractalup_save) < 3 array.push(fractalup_save, fractalup) array.push(fractalup_save, fractalup) Bottom_1 = array.get(fractaldown_save, 0) Bottom_2 = array.get(fractaldown_save, 1) Bottom_3 = array.get(fractaldown_save, 2) Top_1 = array.get(fractalup_save, 0) Top_2 = array.get(fractalup_save, 1) Top_3 = array.get(fractalup_save, 2) //---------------------------------------------------------------------------------------------------------- // ||--- Fractal Buy Sell Signal: bool Signal_Test = false bool Signal_Test_OUT_TEMP = false var Signal_Test_TEMP = false longLossPerc = input(title="Long Stop Loss (%)", minval=0.0, step=0.1, defval=0.01) * 0.01 if filteredbotf and open < Bottom_1 and (Bottom_1 - open) / Bottom_1 >= longLossPerc Signal_Test := true if filteredtopf and open > Top_1 Signal_Test_TEMP := true if filteredtopf and Signal_Test_TEMP Signal_Test_TEMP := false Signal_Test_OUT_TEMP := true //---------------------------------------------------------------------------------------------------------- // ||--- Plotting: //plotshape(filteredtopf, style=shape.triangledown, location=location.abovebar, color=color.red, text="•", offset=0) //plotshape(filteredbotf, style=shape.triangleup, location=location.belowbar, color=color.lime, text="•", offset=0) //plotshape(ShowSwingsHL ? highswings : na, style=shape.triangledown, location=location.abovebar, color=color.maroon, text="H", offset=0) //plotshape(ShowSwingsHL ? lowswings : na, style=shape.triangleup, location=location.belowbar, color=color.green, text="L", offset=0) plot(showchannel ? (filteredtopf ? high[2] : na) : na, color=color.black, offset=0) plot(showchannel ? (filteredbotf ? low[2] : na) : na, color=color.black, offset=0) plot(showchannel ? (highswings ? high[2] : na) : na, color=color.black, offset=-2) plot(showchannel ? (lowswings ? low[2] : na) : na, color=color.black, offset=-2) plotshape(Signal_Test, style=shape.flag, location=location.belowbar, color=color.yellow, offset=0) plotshape(Signal_Test_OUT_TEMP, style=shape.flag, location=location.abovebar, color=color.white, offset=0) //---------------------------------------------------------------------------------------------------------- // ||--- Buy And Sell: strategy.entry(id="Long", long=true, when = Signal_Test and afterStartDate) strategy.close_all(when = Signal_Test_OUT_TEMP and afterStartDate) //----------------------------------------------------------------------------------------------------------