avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
4
پر توجہ دیں
1271
پیروکار

یوٹیوب ماسٹر سے "جادوئی ڈبل EMA موونگ ایوریج اسٹریٹجی"

میں تخلیق کیا: 2022-10-09 15:56:22, تازہ کاری: 2024-11-29 18:59:45
comments   28
hits   7284

یوٹیوب ماسٹر سے “جادوئی ڈبل EMA موونگ ایوریج اسٹریٹجی”

یوٹیوب ماسٹر سے “جادوئی ڈبل EMA موونگ ایوریج اسٹریٹجی”

اس شمارے میں، ہم یوٹیوب سے ایک “جادوئی ڈبل EMA موونگ ایوریج حکمت عملی” پر بات کریں گے، جسے “اسٹاک اور کریپٹو کرنسی مارکیٹ قاتل” کہا جاتا ہے۔ ویڈیو دیکھنے کے بعد، میں نے سیکھا کہ یہ حکمت عملی ایک ٹریڈنگ ویو پائن لینگویج اسٹریٹجی ہے، جو 2 ٹریڈنگ ویو انڈیکیٹرز استعمال کرتی ہے۔ ویڈیو میں بیک ٹیسٹنگ کے نتائج دیکھ کر بہت اچھے تھے، اور FMZ ٹریڈنگ ویو کی پائن لینگویج کو بھی سپورٹ کرتا ہے، میں مدد نہیں کر سکا لیکن میں خود بیک ٹیسٹ کرنا چاہتا ہوں اور تجزیہ کرنا چاہتا ہوں۔ پھر پوری زندگی شروع! آئیے ویڈیو میں حکمت عملی کو نقل کرتے ہیں۔

حکمت عملی کے ذریعہ استعمال کردہ اشارے

  1. EMA اشارے

ڈیزائن میں سادگی کی خاطر، ہم ویڈیو میں درج موونگ ایوریج ایکسپونیشل استعمال نہیں کریں گے۔ ہم اس کی بجائے ٹریڈنگ ویو میں بلٹ ان ta.ema استعمال کرتے ہیں (دراصل وہ ایک جیسے ہیں)۔

  1. VuManChu سوئنگ فری انڈیکیٹر

یہ ٹریڈنگ ویو پر ایک انڈیکیٹر ہے ہمیں ٹریڈنگ ویو پر جانا اور سورس کوڈ ڈاؤن لوڈ کرنا ہے۔

یوٹیوب ماسٹر سے “جادوئی ڈبل EMA موونگ ایوریج اسٹریٹجی”

VuManChu سوئنگ فری کوڈ:

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// Credits to the original Script - Range Filter DonovanWall https://www.tradingview.com/script/lut7sBgG-Range-Filter-DW/
// This version is the old version of the Range Filter with less settings to tinker with

//@version=4
study(title="Range Filter - B&S Signals", shorttitle="RF - B&S Signals", overlay=true)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Functions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Size Function
rng_size(x, qty, n)=> 
//    AC       = Cond_EMA(abs(x - x[1]), 1, n)
    wper      = (n*2) - 1
    avrng     = ema(abs(x - x[1]), n)
    AC = ema(avrng, wper)*qty
    rng_size = AC

//Range Filter Function
rng_filt(x, rng_, n)=>
    r          = rng_
    var rfilt  = array.new_float(2, x)
    array.set(rfilt, 1, array.get(rfilt, 0))
    if x - r > array.get(rfilt, 1)
        array.set(rfilt, 0, x - r)
    if x + r < array.get(rfilt, 1)
        array.set(rfilt, 0, x + r)
    rng_filt1 = array.get(rfilt, 0)
    
    hi_band   = rng_filt1 + r
    lo_band   = rng_filt1 - r
    rng_filt  = rng_filt1
    [hi_band, lo_band, rng_filt]
 
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Source
rng_src = input(defval=close, type=input.source, title="Swing Source")

//Range Period
rng_per = input(defval=20, minval=1, title="Swing Period")

//Range Size Inputs
rng_qty   = input(defval=3.5, minval=0.0000001, title="Swing Multiplier")

//Bar Colors
use_barcolor = input(defval=false, type=input.bool, title="Bar Colors On/Off")

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Filter Values
[h_band, l_band, filt] = rng_filt(rng_src, rng_size(rng_src, rng_qty, rng_per), rng_per)

//Direction Conditions
var fdir = 0.0
fdir    := filt > filt[1] ? 1 : filt < filt[1] ? -1 : fdir
upward   = fdir==1 ? 1 : 0
downward = fdir==-1 ? 1 : 0

//Trading Condition
longCond = rng_src > filt and rng_src > rng_src[1] and upward > 0 or rng_src > filt and rng_src < rng_src[1] and upward > 0 
shortCond = rng_src < filt and rng_src < rng_src[1] and downward > 0 or rng_src < filt and rng_src > rng_src[1] and downward > 0

CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1

//Colors
filt_color = upward ? #05ff9b : downward ? #ff0583 : #cccccc
bar_color  = upward and (rng_src > filt) ? (rng_src > rng_src[1] ? #05ff9b : #00b36b) :
             downward and (rng_src < filt) ? (rng_src < rng_src[1] ? #ff0583 : #b8005d) : #cccccc

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Outputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Filter Plot
filt_plot = plot(filt, color=filt_color, transp=67, linewidth=3, title="Filter")

//Band Plots
h_band_plot = plot(h_band, color=color.new(#05ff9b, 100), title="High Band")
l_band_plot = plot(l_band, color=color.new(#ff0583, 100), title="Low Band")

//Band Fills
fill(h_band_plot, filt_plot, color=color.new(#00b36b, 92), title="High Band Fill")
fill(l_band_plot, filt_plot, color=color.new(#b8005d, 92), title="Low Band Fill")

//Bar Color
barcolor(use_barcolor ? bar_color : na)

//Plot Buy and Sell Labels
plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor = color.white, style=shape.labelup, size = size.normal, location=location.belowbar, color = color.new(color.green, 0))
plotshape(shortCondition, title = "Sell Signal", text ="SELL", textcolor = color.white, style=shape.labeldown, size = size.normal, location=location.abovebar, color = color.new(color.red, 0))

//Alerts
alertcondition(longCondition, title="Buy Alert", message = "BUY")
alertcondition(shortCondition, title="Sell Alert", message = "SELL")

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

EMA اشارے: حکمت عملی دو EMA حرکت پذیر اوسط، ایک تیز لائن (چھوٹا سائیکل پیرامیٹر) اور ایک سست لائن (بڑے سائیکل پیرامیٹر) کا استعمال کرتی ہے۔ ڈبل EMA موونگ ایوریج کا بنیادی کام مارکیٹ کے رجحانات کی سمت کا تعین کرنے میں ہماری مدد کرنا ہے۔

  • طویل انتظام تیز لائن سست لائن کے اوپر ہے۔

  • مختصر انتظام تیز لائن سست لائن سے نیچے ہے۔

VuManChu Swing Free Indicator: VuManChu Swing Free Indicator کو سگنل بھیجنے کے لیے استعمال کیا جاتا ہے، اور پھر دوسری شرائط کے ساتھ یہ طے کرنے کے لیے کہ آیا ٹریڈنگ کے لیے آرڈر دینا ہے۔ VuManChu سوئنگ فری انڈیکیٹر سورس کوڈ سے، ہم دیکھ سکتے ہیں کہ longCondition متغیر خرید سگنل کی نمائندگی کرتا ہے، اور shortCondition متغیر فروخت سگنل کی نمائندگی کرتا ہے۔ بعد میں آرڈر کی شرائط لکھتے وقت یہ دو متغیر استعمال کیے جائیں گے۔

اب آئیے حکمت عملی کے مخصوص تجارتی سگنل کو متحرک کرنے والے حالات کے بارے میں بات کرتے ہیں:

  1. لمبی پوزیشنوں میں داخل ہونے کے اصول: مثبت K-لائن کی اختتامی قیمت EMA فاسٹ لائن سے اوپر ہونی چاہیے، دو EMA موونگ ایوریجز تیزی سے ترتیب میں ہونی چاہئیں (تیز لائن سست لائن سے اوپر ہے)، اور VuManChu Swing Free اشارے کو خرید کا سگنل دکھانا چاہیے۔ (طویل حالت درست ہے)۔ اگر تین شرائط پوری ہوجاتی ہیں، تو یہ K-لائن لمبی پوزیشن میں داخل ہونے کے لیے کلیدی K-لائن ہے، اور اس K-لائن کی اختتامی قیمت اندراج کی پوزیشن ہے۔

  2. مختصر پوزیشن میں داخل ہونے کے قواعد (لمبی پوزیشن کے برعکس): منفی کینڈل سٹک کی اختتامی قیمت تیز EMA لائن سے نیچے ہونی چاہیے، دو EMA حرکت پذیر اوسط مختصر پوزیشن میں ہونی چاہیے (تیز لائن سست لائن سے نیچے ہے)، اور VuManChu سوئنگ فری انڈیکیٹر کو فروخت کا سگنل دکھانا چاہیے (شارٹ کنڈیشن سچ ہے)۔ اگر تین شرائط پوری ہوتی ہیں، تو اس K-لائن کی اختتامی قیمت مختصر فروخت کے لیے انٹری پوائنٹ ہے۔

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

کوڈ ڈیزائن

ہم VuManChu Swing Free اشارے کے کوڈ کو براہ راست اپنے حکمت عملی کوڈ میں برقرار رکھتے ہیں۔

یوٹیوب ماسٹر سے “جادوئی ڈبل EMA موونگ ایوریج اسٹریٹجی”

پھر ہم ٹرانزیکشن فنکشن کو نافذ کرنے کے لیے پائن لینگویج کوڈ کا ایک ٹکڑا لکھتے ہیں:

// extend
fastEmaPeriod = input(50, "fastEmaPeriod")         // 快线周期
slowEmaPeriod = input(200, "slowEmaPeriod")        // 慢线周期
loss = input(30, "loss")                           // 止损点数
trailPoints = input(30, "trailPoints")             // 移动止盈触发点数
trailOffset = input(30, "trailOffset")             // 移动止盈偏移量(点数)
amount = input(1, "amount")                        // 下单量

emaFast = ta.ema(close, fastEmaPeriod)             // 计算快线EMA
emaSlow = ta.ema(close, slowEmaPeriod)             // 计算慢线EMA

buyCondition = longCondition and emaFast > emaSlow and close > open and close > emaFast         // 做多入场条件
sellCondition = shortCondition and emaFast < emaSlow and close < open and close < emaFast       // 做空入场条件

if buyCondition and strategy.position_size == 0
    strategy.entry("long", strategy.long, amount)
    strategy.exit("exit_long", "long", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)
if sellCondition and strategy.position_size == 0
    strategy.entry("short", strategy.short, amount)
    strategy.exit("exit_short", "short", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)

A. جیسا کہ آپ دیکھ سکتے ہیں، جب buyCondition درست ہو:

  1. longCondition متغیر درست ہے (VuManChu Swing Free indicator طویل جانے کے لیے سگنل بھیجتا ہے)۔
  2. emaFast > emaSlow (EMA تیزی کا انتظام)۔
  3. بند کریں > کھلا (اس بات کی نشاندہی کرتا ہے کہ موجودہ بار ایک مثبت لائن ہے)، بند کریں > emaFast (یہ بتاتا ہے کہ اختتامی قیمت EMA فاسٹ لائن سے اوپر ہے)۔

لمبا سفر کرنے کی تین شرائط پوری ہوتی ہیں۔

B. فروخت کی حالت درست ہونے پر، مختصر فروخت کے لیے تین شرائط پوری ہوتی ہیں (یہاں بیان نہیں کیا گیا)۔

پھر، جب if حالت یہ طے کرتی ہے کہ سگنل ٹرگر ہو گیا ہے، تو مارکیٹ میں داخل ہونے اور پوزیشن کھولنے کے لیے strategy.entry فنکشن کا استعمال کریں، اور نقصان اور پچھلے منافع کو روکنے کے لیے strategy.exit فنکشن سیٹ کریں۔

مکمل کوڈ

/*backtest
start: 2022-01-01 00:00:00
end: 2022-10-08 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
args: [["ZPrecision",0,358374]]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// Credits to the original Script - Range Filter DonovanWall https://www.tradingview.com/script/lut7sBgG-Range-Filter-DW/
// This version is the old version of the Range Filter with less settings to tinker with

//@version=4
study(title="Range Filter - B&S Signals", shorttitle="RF - B&S Signals", overlay=true)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Functions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Size Function
rng_size(x, qty, n)=> 
//    AC       = Cond_EMA(abs(x - x[1]), 1, n)
    wper      = (n*2) - 1
    avrng     = ema(abs(x - x[1]), n)
    AC = ema(avrng, wper)*qty
    rng_size = AC

//Range Filter Function
rng_filt(x, rng_, n)=>
    r          = rng_
    var rfilt  = array.new_float(2, x)
    array.set(rfilt, 1, array.get(rfilt, 0))
    if x - r > array.get(rfilt, 1)
        array.set(rfilt, 0, x - r)
    if x + r < array.get(rfilt, 1)
        array.set(rfilt, 0, x + r)
    rng_filt1 = array.get(rfilt, 0)
    
    hi_band   = rng_filt1 + r
    lo_band   = rng_filt1 - r
    rng_filt  = rng_filt1
    [hi_band, lo_band, rng_filt]
 
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Source
rng_src = input(defval=close, type=input.source, title="Swing Source")

//Range Period
rng_per = input(defval=20, minval=1, title="Swing Period")

//Range Size Inputs
rng_qty   = input(defval=3.5, minval=0.0000001, title="Swing Multiplier")

//Bar Colors
use_barcolor = input(defval=false, type=input.bool, title="Bar Colors On/Off")

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Filter Values
[h_band, l_band, filt] = rng_filt(rng_src, rng_size(rng_src, rng_qty, rng_per), rng_per)

//Direction Conditions
var fdir = 0.0
fdir    := filt > filt[1] ? 1 : filt < filt[1] ? -1 : fdir
upward   = fdir==1 ? 1 : 0
downward = fdir==-1 ? 1 : 0

//Trading Condition
longCond = rng_src > filt and rng_src > rng_src[1] and upward > 0 or rng_src > filt and rng_src < rng_src[1] and upward > 0 
shortCond = rng_src < filt and rng_src < rng_src[1] and downward > 0 or rng_src < filt and rng_src > rng_src[1] and downward > 0

CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1

//Colors
filt_color = upward ? #05ff9b : downward ? #ff0583 : #cccccc
bar_color  = upward and (rng_src > filt) ? (rng_src > rng_src[1] ? #05ff9b : #00b36b) :
             downward and (rng_src < filt) ? (rng_src < rng_src[1] ? #ff0583 : #b8005d) : #cccccc

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Outputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Filter Plot
filt_plot = plot(filt, color=filt_color, transp=67, linewidth=3, title="Filter")

//Band Plots
h_band_plot = plot(h_band, color=color.new(#05ff9b, 100), title="High Band")
l_band_plot = plot(l_band, color=color.new(#ff0583, 100), title="Low Band")

//Band Fills
fill(h_band_plot, filt_plot, color=color.new(#00b36b, 92), title="High Band Fill")
fill(l_band_plot, filt_plot, color=color.new(#b8005d, 92), title="Low Band Fill")

//Bar Color
barcolor(use_barcolor ? bar_color : na)

//Plot Buy and Sell Labels
plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor = color.white, style=shape.labelup, size = size.normal, location=location.belowbar, color = color.new(color.green, 0))
plotshape(shortCondition, title = "Sell Signal", text ="SELL", textcolor = color.white, style=shape.labeldown, size = size.normal, location=location.abovebar, color = color.new(color.red, 0))

//Alerts
alertcondition(longCondition, title="Buy Alert", message = "BUY")
alertcondition(shortCondition, title="Sell Alert", message = "SELL")


// extend
fastEmaPeriod = input(50, "fastEmaPeriod")
slowEmaPeriod = input(200, "slowEmaPeriod")
loss = input(30, "loss")
trailPoints = input(30, "trailPoints")
trailOffset = input(30, "trailOffset")
amount = input(1, "amount")

emaFast = ta.ema(close, fastEmaPeriod)
emaSlow = ta.ema(close, slowEmaPeriod)

buyCondition = longCondition and emaFast > emaSlow and close > open and close > emaFast
sellCondition = shortCondition and emaFast < emaSlow and close < open and close < emaFast

if buyCondition and strategy.position_size == 0
    strategy.entry("long", strategy.long, amount)
    strategy.exit("exit_long", "long", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)
if sellCondition and strategy.position_size == 0
    strategy.entry("short", strategy.short, amount)
    strategy.exit("exit_short", "short", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)

بیک ٹیسٹنگ

بیک ٹیسٹنگ کے وقت کی حد جنوری 2022 سے اکتوبر 2022 تک منتخب کی گئی ہے، K-line کی مدت 15 منٹ ہے، اور اختتامی قیمت کا ماڈل بیک ٹیسٹنگ کے لیے استعمال کیا جاتا ہے۔ مارکیٹ Binance کے ETH_USDT دائمی معاہدے کا انتخاب کرتی ہے۔ پیرامیٹر سیٹنگز جیسا کہ سورس ویڈیو میں بتایا گیا ہے: فاسٹ لائن کے لیے 50 پیریڈز اور سلو لائن کے لیے 200 پیریڈز، اور دیگر پیرامیٹرز بذریعہ ڈیفالٹ غیر تبدیل شدہ رہتے ہیں۔ میں سٹاپ نقصان اور پچھلے منافع کے پوائنٹس کو سیٹ کرنے میں تھوڑا سا ساپیکش ہوں اور انہیں صرف 30 پوائنٹس پر سیٹ کرتا ہوں۔

یوٹیوب ماسٹر سے “جادوئی ڈبل EMA موونگ ایوریج اسٹریٹجی”

یوٹیوب ماسٹر سے “جادوئی ڈبل EMA موونگ ایوریج اسٹریٹجی”

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

آئیے ایک BTC_USDT دائمی معاہدہ آزمائیں:

یوٹیوب ماسٹر سے “جادوئی ڈبل EMA موونگ ایوریج اسٹریٹجی”

بی ٹی سی پر بیک ٹیسٹ کے نتائج بھی دھماکہ خیز ہیں:

یوٹیوب ماسٹر سے “جادوئی ڈبل EMA موونگ ایوریج اسٹریٹجی”

یوٹیوب ماسٹر سے “جادوئی ڈبل EMA موونگ ایوریج اسٹریٹجی”

حکمت عملی کا پتہ: https://www.fmz.com/strategy/385745

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