यह रणनीति गति और प्रवृत्ति के आधार पर एक बहु-परत ट्रेडिंग प्रणाली है। यह उच्च-संभाव्यता वाले लंबे अवसरों की पहचान करने के लिए विलियम्स एलीगेटर, विलियम्स फ्रैक्टल्स, भयानक ऑसिलेटर (एओ), और घातीय चलती औसत (ईएमए) को जोड़ती है। यह रणनीति एक स्तरित पूंजी तैनाती तंत्र को नियोजित करती है, धीरे-धीरे रुझान मजबूत होने के साथ पदों को बढ़ाती है, प्रत्येक पूंजी का 10% का उपयोग करके एक साथ 5 पदों तक रखने की क्षमता के साथ।
यह रणनीति ट्रेडिंग दिशा की सटीकता सुनिश्चित करने के लिए कई फ़िल्टरिंग तंत्रों का उपयोग करती है। सबसे पहले, यह ईएमए का उपयोग दीर्घकालिक प्रवृत्ति निर्णय के लिए करता है, केवल जब कीमत ईएमए से ऊपर होती है, तो लंबी अवधि के अवसरों की तलाश करता है। दूसरा, यह विलियम्स एलीगेटर और फ्रैक्टल्स के संयोजन के माध्यम से अल्पकालिक रुझानों का न्याय करता है, जब एलीगेटर के दांतों की रेखा के ऊपर एक अप फ्रैक्टल ब्रेकआउट होता है, तो एक अपट्रेंड की पुष्टि करता है। अंत में, प्रवृत्ति की पुष्टि के बाद, रणनीति विशिष्ट प्रवेश समय के लिए एओ संकेतक के
इन जोखिमों को कम करने के लिए, यह अनुशंसा की जाती हैः
यह एक अच्छी तरह से डिज़ाइन की गई प्रवृत्ति-अनुसरण रणनीति है जो कई तकनीकी संकेतकों के संयोजन के माध्यम से सुरक्षा बनाए रखते हुए अच्छे रिटर्न प्राप्त करती है। रणनीति की नवीनता इसके बहु-परत प्रवृत्ति पुष्टि तंत्र और प्रगतिशील पूंजी प्रबंधन विधि में निहित है। जबकि अनुकूलन के लिए क्षेत्र हैं, यह समग्र रूप से एक ट्रेडिंग प्रणाली है जो कोशिश करने लायक है।
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-04 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Skyrexio //@version=6 //_______ <licence> strategy(title = "MultiLayer Awesome Oscillator Saucer Strategy [Skyrexio]", shorttitle = "AO Saucer", overlay = true, format = format.inherit, pyramiding = 5, calc_on_order_fills = false, calc_on_every_tick = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital = 10000, currency = currency.NONE, commission_type = strategy.commission.percent, commission_value = 0.1, slippage = 5, use_bar_magnifier = true) //_______ <constant_declarations> var const color skyrexGreen = color.new(#2ECD99, 0) var const color skyrexGray = color.new(#F2F2F2, 0) var const color skyrexWhite = color.new(#FFFFFF, 0) //________<variables declarations> var int trend = 0 var float upFractalLevel = na var float upFractalActivationLevel = na var float downFractalLevel = na var float downFractalActivationLevel = na var float saucerActivationLevel = na bool highCrossesUpfractalLevel = ta.crossover(high, upFractalActivationLevel) bool lowCrossesDownFractalLevel = ta.crossunder(low, downFractalActivationLevel) var int signalsQtyInRow = 0 //_______ <inputs> // Trading bot settings sourceUuid = input.string(title = "sourceUuid:", defval = "yourBotSourceUuid", group = "🤖Trading Bot Settings🤖") secretToken = input.string(title = "secretToken:", defval = "yourBotSecretToken", group = "🤖Trading Bot Settings🤖") // Trading period settings lookBackPeriodStart = input(title = "Trade Start Date/Time", defval = timestamp('2023-01-01T00:00:00'), group = "🕐Trading Period Settings🕐") lookBackPeriodStop = input(title = "Trade Stop Date/Time", defval = timestamp('2025-01-01T00:00:00'), group = "🕐Trading Period Settings🕐") // Strategy settings EMaLength = input.int(100, minval = 10, step = 10, title = "EMA Length", group = "📈Strategy settings📈") //_______ <function_declarations> //@function Used to calculate Simple moving average for Alligator //@param src Sourse for smma Calculations //@param length Number of bars to calculate smma //@returns The calculated smma value smma(src, length) => var float smma = na sma_value = ta.sma(src, length) smma := na(smma) ? sma_value : (smma * (length - 1) + src) / length smma //_______ <calculations> //Upfractal calculation upFractalPrice = ta.pivothigh(2, 2) upFractal = not na(upFractalPrice) //Downfractal calculation downFractalPrice = ta.pivotlow(2, 2) downFractal = not na(downFractalPrice) //Calculating Alligator's teeth teeth = smma(hl2, 8)[5] //Calculating upfractal and downfractal levels if upFractal upFractalLevel := upFractalPrice else upFractalLevel := upFractalLevel[1] if downFractal downFractalLevel := downFractalPrice else downFractalLevel := downFractalLevel[1] //Calculating upfractal activation level, downfractal activation level to approximate the trend and this current trend if upFractalLevel > teeth upFractalActivationLevel := upFractalLevel if highCrossesUpfractalLevel trend := 1 upFractalActivationLevel := na downFractalActivationLevel := downFractalLevel if downFractalLevel < teeth downFractalActivationLevel := downFractalLevel if lowCrossesDownFractalLevel trend := -1 downFractalActivationLevel := na upFractalActivationLevel := upFractalLevel if trend == 1 upFractalActivationLevel := na if trend == -1 downFractalActivationLevel := na //Calculating filter EMA filterEMA = ta.ema(close, EMaLength) //Сalculating AO saucer signal ao = ta.sma(hl2,5) - ta.sma(hl2,34) diff = ao - ao[1] saucerSignal = ao > ao[1] and ao[1] < ao[2] and ao > 0 and ao[1] > 0 and ao[2] > 0 and trend == 1 and close > filterEMA //Calculating sauser activation level if saucerSignal saucerActivationLevel := high else saucerActivationLevel := saucerActivationLevel[1] if not na(saucerActivationLevel[1]) and high < saucerActivationLevel[1] and diff > 0 saucerActivationLevel := high saucerSignal := true if (high > saucerActivationLevel[1] and not na(saucerActivationLevel)) or diff < 0 saucerActivationLevel := na //Calculating number of valid saucer signal in current trading cycle if saucerSignal and not saucerSignal[1] signalsQtyInRow := signalsQtyInRow + 1 if not na(saucerActivationLevel[1]) and diff < 0 and na(saucerActivationLevel) and not (strategy.opentrades[1] <= strategy.opentrades - 1) signalsQtyInRow := signalsQtyInRow - 1 if trend == -1 and trend[1] == 1 signalsQtyInRow := 0 //_______ <strategy_calls> //Defining trade close condition closeCondition = trend[1] == 1 and trend == -1 //Cancel stop buy order if current Awesome oscillator column lower, than prevoius if diff < 0 strategy.cancel_all() //Strategy entry if (signalsQtyInRow == 1 and not na(saucerActivationLevel)) strategy.entry(id = "entry1", direction = strategy.long, stop = saucerActivationLevel + syminfo.mintick, alert_message = '{\n"base": "' + syminfo.basecurrency + '",\n"quote": "' + syminfo.currency + '",\n"position": "entry1",\n"price": "' + str.tostring(close) + '",\n"sourceUuid": "' + sourceUuid + '",\n"secretToken": "' + secretToken + '",\n"timestamp": "' + str.tostring(timenow) + '"\n}') if (signalsQtyInRow == 2 and not na(saucerActivationLevel)) strategy.entry(id = "entry2", direction = strategy.long, stop = saucerActivationLevel + syminfo.mintick, alert_message = '{\n"base": "' + syminfo.basecurrency + '",\n"quote": "' + syminfo.currency + '",\n"position": "entry2",\n"price": "' + str.tostring(close) + '",\n"sourceUuid": "' + sourceUuid + '",\n"secretToken": "' + secretToken + '",\n"timestamp": "' + str.tostring(timenow) + '"\n}') if (signalsQtyInRow == 3 and not na(saucerActivationLevel)) strategy.entry(id = "entry3", direction = strategy.long, stop = saucerActivationLevel + syminfo.mintick, alert_message = '{\n"base": "' + syminfo.basecurrency + '",\n"quote": "' + syminfo.currency + '",\n"position": "entry3",\n"price": "' + str.tostring(close) + '",\n"sourceUuid": "' + sourceUuid + '",\n"secretToken": "' + secretToken + '",\n"timestamp": "' + str.tostring(timenow) + '"\n}') if (signalsQtyInRow == 4 and not na(saucerActivationLevel)) strategy.entry(id = "entry4", direction = strategy.long, stop = saucerActivationLevel + syminfo.mintick, alert_message = '{\n"base": "' + syminfo.basecurrency + '",\n"quote": "' + syminfo.currency + '",\n"position": "entry4",\n"price": "' + str.tostring(close) + '",\n"sourceUuid": "' + sourceUuid + '",\n"secretToken": "' + secretToken + '",\n"timestamp": "' + str.tostring(timenow) + '"\n}') if (signalsQtyInRow == 5 and not na(saucerActivationLevel)) strategy.entry(id = "entry5", direction = strategy.long, stop = saucerActivationLevel + syminfo.mintick, alert_message = '{\n"base": "' + syminfo.basecurrency + '",\n"quote": "' + syminfo.currency + '",\n"position": "entry5",\n"price": "' + str.tostring(close) + '",\n"sourceUuid": "' + sourceUuid + '",\n"secretToken": "' + secretToken + '",\n"timestamp": "' + str.tostring(timenow) + '"\n}') //Strategy exit if (closeCondition) strategy.close_all(alert_message = '{\n"base": "' + syminfo.basecurrency + '",\n"quote": "' + syminfo.currency + '",\n"position": "close",\n"price": "' + str.tostring(close) + '",\n"sourceUuid": "' + sourceUuid + '",\n"secretToken": "' + secretToken + '",\n"timestamp": "' + str.tostring(timenow) + '"\n}') //_______ <visuals> //Plotting shapes for adding to current long trades gradPercent = if strategy.opentrades == 2 90 else if strategy.opentrades == 3 80 else if strategy.opentrades == 4 70 else if strategy.opentrades == 5 60 pricePlot = plot(close, title="Price", color=color.new(color.blue, 100)) teethPlot = plot(strategy.opentrades > 1 ? teeth : na, title="Teeth", color= skyrexGreen, style=plot.style_linebr, linewidth = 2) fill(pricePlot, teethPlot, color = color.new(skyrexGreen, gradPercent)) if strategy.opentrades != 1 and strategy.opentrades[1] == strategy.opentrades - 1 label.new(bar_index, teeth, style = label.style_label_up, color = color.lime, size = size.tiny, text="Buy More", textcolor = color.black, text_formatting = text.format_bold) //_______ <alerts>