رینبو آسکیلیٹر تجارتی حکمت عملی


تخلیق کی تاریخ: 2024-02-23 14:57:43 آخر میں ترمیم کریں: 2024-02-23 14:57:43
کاپی: 4 کلکس کی تعداد: 706
1
پر توجہ دیں
1617
پیروکار

رینبو آسکیلیٹر تجارتی حکمت عملی

جائزہ

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

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

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

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

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

اسٹریٹجک رسک

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

اس کا حل کیا ہے؟

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

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

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

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © businessduck

//@version=5
strategy("Rainbow Oscillator [Strategy]", overlay=false, margin_long=100, margin_short=100, initial_capital = 2000)

bool trendFilter = input.bool(true, 'Use trend filter')
float w1 = input.float(0.33, 'RSI Weight', 0, 1, 0.01)
float w2 = input.float(0.33, 'CCI Weight', 0, 1, 0.01)
float w3 = input.float(0.33, 'Stoch Weight', 0, 1, 0.01)
int fastPeriod = input.int(16, 'Ocillograph Fast Period', 4, 60, 1)
int slowPeriod = input.int(22, 'Ocillograph Slow Period', 4, 60, 1)
int oscillographSamplePeriod = input.int(8, 'Oscillograph Samples Period', 1, 30, 1)
int oscillographSamplesCount = input.int(2, 'Oscillograph Samples Count', 0, 4, 1)
string oscillographMAType = input.string("RMA", "Oscillograph Samples Type", options = ["EMA", "SMA", "RMA", "WMA"])
int levelPeriod = input.int(26, 'Level Period', 2, 100)
int levelOffset = input.int(0, 'Level Offset', 0, 200, 10)
float redunant = input.float(0.5, 'Level Redunant', 0, 1, 0.01)
int levelSampleCount = input.int(2, 'Level Smooth Samples', 0, 4, 1)
string levelType = input.string("RMA", "Level MA type", options = ["EMA", "SMA", "RMA", "WMA"])

perc(current, prev) => ((current - prev) / prev) * 100

smooth(value, type, period) =>
    float ma = switch type
        "EMA" => ta.ema(value, period)
        "SMA" => ta.sma(value, period)
        "RMA" => ta.rma(value, period)
        "WMA" => ta.wma(value, period)
        =>
            runtime.error("No matching MA type found.")
            float(na)

getSample(value, samples, type, period) =>
    float ma = switch samples
        0 => value
        1 => smooth(value, type, period)
        2 => smooth(smooth(value, type, period), type, period)
        3 => smooth(smooth(smooth(value, type, period), type, period), type, period)
        4 => smooth(smooth(smooth(smooth(value, type, period), type, period), type, period), type, period)

float takeProfit = input.float(5, "% Take profit", 0.8, 100, step = 0.1)  / 100
float stopLoss = input.float(2, "% Stop Loss", 0.8, 100, step = 0.1) / 100
float magicFast = w2 * ta.cci(close, fastPeriod) + w1 * (ta.rsi(close, fastPeriod) - 50) + w3 * (ta.stoch(close, high, low, fastPeriod) - 50)
float magicSlow = w2 * ta.cci(close, slowPeriod) + w1 * (ta.rsi(close, slowPeriod) - 50) + w3 * (ta.stoch(close, high, low, slowPeriod) - 50)
float sampledMagicFast = getSample(magicFast, oscillographSamplesCount, oscillographMAType, oscillographSamplePeriod)
float sampledMagicSlow = getSample(magicSlow, oscillographSamplesCount, oscillographMAType, oscillographSamplePeriod)
float lastUpperValue = 0
float lastLowerValue = 0

if (magicFast > 0)
    lastUpperValue := math.max(magicFast, magicFast[1])
else 
    lastUpperValue := math.max(0, lastUpperValue[1]) * redunant

    
if (magicFast <= 0)
    lastLowerValue := math.min(magicFast, magicFast[1])
else
    lastLowerValue := math.min(0, lastLowerValue[1]) * redunant

float level1up = getSample( (magicFast >= 0 ? magicFast : lastUpperValue) / 4, levelSampleCount, levelType, levelPeriod) + levelOffset
float level2up = getSample( (magicFast >= 0 ? magicFast : lastUpperValue) / 2, levelSampleCount, levelType, levelPeriod) + levelOffset
float level3up = getSample( magicFast >= 0 ? magicFast : lastUpperValue, levelSampleCount, levelType, levelPeriod) + levelOffset
float level4up = getSample( (magicFast >= 0 ? magicFast : lastUpperValue) * 2, levelSampleCount, levelType, levelPeriod) + levelOffset

float level1low = getSample( (magicFast <= 0 ? magicFast : lastLowerValue) / 4, levelSampleCount, levelType, levelPeriod) - levelOffset
float level2low = getSample( (magicFast <= 0 ? magicFast : lastLowerValue) / 2, levelSampleCount, levelType, levelPeriod) - levelOffset
float level3low = getSample( magicFast <= 0 ? magicFast : lastLowerValue, levelSampleCount, levelType, levelPeriod) - levelOffset
float level4low = getSample( (magicFast <= 0 ? magicFast : lastLowerValue) * 2, levelSampleCount, levelType, levelPeriod) - levelOffset

var transparent = color.new(color.white, 100)
var overbough4Color = color.new(color.red, 75)
var overbough3Color = color.new(color.orange, 75)
var overbough2Color = color.new(color.yellow, 75)

var oversold4Color = color.new(color.teal, 75)
var oversold3Color = color.new(color.blue, 75)
var oversold2Color = color.new(color.aqua, 85)

upperPlotId1 = plot(level1up, 'Upper1', transparent)
upperPlotId2 = plot(level2up, 'Upper2', transparent)
upperPlotId3 = plot(level3up, 'Upper3', transparent)
upperPlotId4 = plot(level4up, 'Upper4', transparent)

fastColor = color.new(color.teal, 60)
slowColor = color.new(color.red, 60)
fastPlotId = plot(sampledMagicFast, 'fast', color = fastColor)
slowPlotId = plot(sampledMagicSlow, 'slow', color = slowColor)

lowerPlotId1 = plot(level1low, 'Lower1', transparent)
lowerPlotId2 = plot(level2low, 'Lower2', transparent)
lowerPlotId3 = plot(level3low, 'Lower3', transparent)
lowerPlotId4 = plot(level4low, 'Lower4', transparent)

fill(upperPlotId4, upperPlotId3, overbough4Color)
fill(upperPlotId3, upperPlotId2, overbough3Color)
fill(upperPlotId2, upperPlotId1, overbough2Color)

fill(lowerPlotId4, lowerPlotId3, oversold4Color)
fill(lowerPlotId3, lowerPlotId2, oversold3Color)
fill(lowerPlotId2, lowerPlotId1, oversold2Color)

upTrend = sampledMagicFast > sampledMagicFast[1]
buySignal = ((upTrend or not trendFilter) and ta.crossunder(sampledMagicSlow, sampledMagicFast)) ? sampledMagicSlow : na
sellSignal = ((not upTrend or not trendFilter) and ta.crossover(sampledMagicSlow, sampledMagicFast)) ? sampledMagicSlow : na
diff = sampledMagicSlow - sampledMagicFast

fill(fastPlotId, slowPlotId, upTrend ? fastColor : slowColor)
plot(buySignal, color = color.aqua, style = plot.style_circles, linewidth = 4)
plot(sellSignal, color = color.red, style = plot.style_circles, linewidth = 4)


// longCondition = upTrend != upTrend[1] and upTrend
long_take_level = strategy.position_avg_price * (1 + takeProfit)
long_stop_level = strategy.position_avg_price * (1 - stopLoss)

short_take_level = strategy.position_avg_price * (1 - takeProfit)
short_stop_level = strategy.position_avg_price * (1 + stopLoss)

strategy.close(id="Long", when=sellSignal, comment = "Exit")
strategy.close(id="Short", when=buySignal, comment = "Exit")

strategy.entry("Long", strategy.long, when=buySignal)
strategy.entry("Short", strategy.short, when=sellSignal)

strategy.exit("Take Profit/ Stop Loss","Long", stop=long_stop_level, limit=long_take_level)
strategy.exit("Take Profit/ Stop Loss","Short", stop=short_stop_level, limit=short_take_level)


// plot(long_stop_level, color=color.red, overlay=true)
// plot(long_take_level, color=color.green)