Verrückte Intraday-Scalping-Strategie mit dualer Indikatorenkombination


Erstellungsdatum: 2023-12-01 14:47:57 zuletzt geändert: 2023-12-01 14:47:57
Kopie: 0 Klicks: 857
1
konzentrieren Sie sich auf
1619
Anhänger

Verrückte Intraday-Scalping-Strategie mit dualer Indikatorenkombination

Überblick

Die Strategie kombiniert die von LuxAlgo entwickelten TMO- und AMA-Büro-Signale, um die Chance zu ergreifen, dass ein Trend in der Schwingung beginnt. Es wird zusätzlich kurz gemacht, nachdem mehrere Bedingungen erfüllt sind, wie z. B. TMO-Büro-Signal, AMA-Büro-Höchstwert, K-Linien-Einheit.

Strategieprinzip

Der TMO-Indikator spiegelt die Preisbewegung wider. Er gehört zur Art von Shock-Indikatoren, die bei Abweichungen des Preises ein Handelssignal auslösen können. Der AMA-Indikator ist ein glatter Moving Average-Indikator. Er zeigt einen Bereich der Preisschwankungen an, der überkauft und überverkauft wird, wenn der Preis sich dem Auf- und Abwärtskurs nähert.

Die wichtigste Logik der Strategie ist: Der TMO-Indikator kann die Abweichung von der Preisentwicklung widerspiegeln und ein Handelssignal liefern, der AMA-Indikator zeigt Bereiche an, in denen der Preis möglicherweise umkehrt, und bestätigt den Trendstart in Kombination mit einer Vergrößerung der K-Linien-Einheiten. Ihre Kombination kann daher die Erfolgsrate des Handels erhöhen.

  1. Der TMO-Indikator zeigt mehrere Signale an, d.h. die Preise weichen nach oben ab und der AMA-Indikator zeigt mehrere Maximalwerte an
  2. Der TMO-Indikator zeigt ein Shorting-Signal, d.h. der Preis ist nach unten abgewichen und der AMA-Indikator zeigt einen Shorting-Minimum
  3. Gleichzeitig wird die Anzahl der Objekte mit den letzten drei K-Linien immer größer.

Auf diese Weise wird das Problem der Falschsignale durch einen einzelnen Indikator gelöst. Die Stop-Loss-Methode wählt den höchsten oder niedrigsten Preis innerhalb der jüngsten N-K-Linie, um das Risiko besser zu kontrollieren.

Strategische Vorteile

Die Strategie hat folgende Vorteile:

  1. Die Kombination von Indikatoren erhöht die Signalgenauigkeit. Die TMO-Indikatoren und die AMA-Indikatoren verifizieren sich gegenseitig und können falsche Signale reduzieren, wodurch die Signalgenauigkeit erhöht wird.

  2. Es gibt mehrere Bedingungen, die den Beginn eines Trends erfassen. Die Strategie setzt die TMO-Signale, die AMA-Grenzwerte und die Vergrößerung der K-Linie-Einheit auf mehrere Bedingungen, um den Beginn eines Trends effektiv zu erfassen.

  3. K-Line-Stop-Methode zur Risikokontrolle. Die Verwendung des jüngsten Höchst- und Tiefstpreises der K-Line als Stop-Methode ermöglicht eine bessere Kontrolle des Risikos pro Einheit. Es wird auch kein Rückstandsrisiko durch die Neuberechnung des Indikators umgekehrt.

  4. Kurz und effektives Trading-Logik. Die Strategie mit nur zwei Indikatoren erreicht eine komplette Scalping-Strategie, ist nicht kompliziert, die Logik ist einfach und klar. Und nach den Beispielen erzielt die Strategie gute Gewinne.

Strategisches Risiko

Diese Strategie birgt folgende Risiken:

  1. Als eine Scalping-Strategie, die nicht lange gehalten wird, kann sie einen gewissen Einfluss auf die Gewinne haben, wenn die Handelsgebühren hoch sind.

  2. Die K-Linie ist zu riskant, um einen Stopp zu aktivieren. Die Verwendung des letzten Höchstpreises und des niedrigsten Preises als Stopp-Methode ist möglicherweise zu aggressiv und kann den Marktrauschen nicht vollständig filtern, wodurch die Wahrscheinlichkeit erhöht wird, dass ein Stopp ausgelöst wird.

  3. Die Strategie beinhaltet mehrere Parameter und es kann schwierig sein, die optimale Kombination von Parametern zu finden.

Optimierungsrichtung

Die Strategie kann auch in folgenden Richtungen optimiert werden:

  1. Durch das Hinzufügen weiterer Filterindikatoren, wie beispielsweise Marktvolumen, können einige falsche Signale herausgefiltert und die Signalqualität weiter verbessert werden.

  2. Versuchen Sie, die Filterbedingungen für die Stop-Methode zu erhöhen, um zu vermeiden, dass die Stop-Methode zu radikal ist. Zum Beispiel warten Sie, bis einige K-Linien bestätigt sind, bevor Sie die Stop-Methode auslösen, und dann stoppen.

  3. Optimierung der Parameter, um die optimale Kombination der Kennzahlen zu finden. Dies kann zu einer Filterung von mehr Geräuschen führen und die Strategie-Gewinnrate verbessern. Hauptsächlich werden die Parameter wie die Länge der TMO-Kennzahlen, die Länge der AMA-Kennzahlen und die Multiplikatoren optimiert.

  4. Versuchen Sie, Rückvergleiche und Festplatten in verschiedenen Sorten und Zeiträumen durchzuführen, um die Handelssorten und -perioden zu finden, die am besten zur Logik dieser Strategie passen.

Zusammenfassen

Die Strategie nutzt die Kombination von TMO- und AMA-Handelssignalen, um in einem wackligen Markt nach dem Zeitpunkt des Trendbeginns zu suchen. Sie hat den Vorteil, dass sie eine hohe Signalgenauigkeit hat, Trends frühzeitig erfasst und Risiken kontrolliert. Nach weiterer Optimierung der Parameter und Regeln kann die Strategie zu einer Inner-Day-Scalping-Strategie mit starkem Real-Warsch-Wert werden.

Strategiequellcode
/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 10m
basePeriod: 1m
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/
// © Kaspricci

//@version=5
strategy("TradeIQ - Crazy Scalping Trading Strategy [Kaspricci]", overlay=true, initial_capital = 1000, currency = currency.USD)

headlineTMO = "TMO Settings"

tmoLength   = input.int(7, "TMO Length", minval = 1, group = headlineTMO)
tmoSource   = input.source(close, "TMO Source", group = headlineTMO)

// calculate values
osc         = ta.mom(ta.sma(ta.sma(tmoSource, tmoLength), tmoLength), tmoLength)

// determine color of historgram
oscColor    = osc > osc[1] and osc > 0 ? #00c42b : osc < osc[1] and osc > 0 ? #4ee567 : osc < osc[1] and osc < 0 ? #ff441f : osc > osc[1] and osc < 0 ? #c03920 : na

// plot histogram
//plot(osc, "OSC", oscColor, linewidth = 3, style = plot.style_histogram)

// conditon to find highs and lows
up          = ta.highest(tmoSource, tmoLength)
dn          = ta.lowest(tmoSource, tmoLength)

// define conditions to be used for finding divergence
phosc = ta.crossunder(ta.change(osc), 0)
plosc = ta.crossover (ta.change(osc), 0)

// test for divergence
bear = osc > 0 and phosc and ta.valuewhen(phosc,osc,0) < ta.valuewhen(phosc,osc,1) and ta.valuewhen(phosc,up,0) > ta.valuewhen(phosc,up,1) ? 1 : 0
bull = osc < 0 and plosc and ta.valuewhen(plosc,osc,0) > ta.valuewhen(plosc,osc,1) and ta.valuewhen(plosc,dn,0) < ta.valuewhen(plosc,dn,1) ? 1 : 0

// -------------------------------------------------------------------------------------------------------------

headlineAMA = "AMA Settings"

amaSource   = input.source(defval = close, title = "AMA Source", group = headlineAMA)
amaLength   = input.int(defval = 50, title = "AMA Length", minval = 2, group = headlineAMA)


amaMulti    = input.float(defval = 2.0, title = "Factor", minval = 1)

amaShowCd   = input(defval = true , title = "As Smoothed Candles")
amaShowEx   = input(defval = true,   title = "Show Alternating Extremities")

amaAlpha    = input.float(1.0, "Lag",       minval=0, step=.1, tooltip='Control the lag of the moving average (higher = more lag)', group= 'AMA Kernel Parameters')
amaBeta     = input.float(0.5, "Overshoot", minval=0, step=.1, tooltip='Control the overshoot amplitude of the moving average (higher = overshoots with an higher amplitude)', group='AMA Kernel Parameters')

// -------------------------------------------------------------------------------------------------------------

headlineSL = "Stop Loss Settings"

slLength    = input.int(defval = 10, title = "SL Period", minval = 1, group = headlineSL, tooltip = "Number of bars for swing high / low")

// -------------------------------------------------------------------------------------------------------------

var b       = array.new_float(0)
var float x = na

if barstate.isfirst
    for i = 0 to amaLength - 1
        x := i / (amaLength - 1)
        w = math.sin(2 * 3.14159 * math.pow(x, amaAlpha)) * (1 - math.pow(x, amaBeta))
        array.push(b, w)

// local function to filter the source
filter(series float x) =>
    sum = 0.

    for i = 0 to amaLength - 1
        sum := sum + x[i] * array.get(b,i)
    
    sum / array.sum(b)

// apply filter function on source series

srcFiltered = filter(amaSource)

deviation   = ta.sma(math.abs(amaSource - srcFiltered), amaLength) * amaMulti

upper       = srcFiltered + deviation
lower       = srcFiltered - deviation

//----
crossHigh   = ta.cross(high, upper)
crossLow    = ta.cross(low, lower)

var os      = 0
os          := crossHigh ? 1 : crossLow ? 0 : os[1]

ext         = os * upper + (1 - os) * lower

//----
os_css = ta.rsi(srcFiltered, amaLength) / 100

extColor    = os == 1 ? #30FF85 : #ff1100

plot(srcFiltered, "MA", amaShowCd ? na : color.black, 2, editable = false)
plot(amaShowEx ? ext : na, "Extremities", ta.change(os) ? na : extColor, 2, editable=false)

// handle smoothed candles
var float h = na
var float l = na
var float c = na
var float body = na

if amaShowCd
    h := filter(high)
    l := filter(low)
    c := filter(amaSource)
    body := math.abs(math.avg(c[1], c[2]) - c)

ohlc_os = ta.rsi(c, amaLength) / 100

plotcandle(math.avg(c[1], c[2]), h, l, c, "Smooth Candles", #434651, bordercolor = na, editable = false, display = amaShowCd ? display.all : display.none)

// -------------------------------------------------------------------------------------------------------------

plotshape(bull ? ext : na, "Bullish Circle", shape.circle,    location.absolute, color = #00c42b, size=size.tiny)
plotshape(bear ? ext : na, "Bearish Circle", shape.circle,    location.absolute, color = #ff441f, size=size.tiny)
plotshape(bull ? ext : na, "Bullish Label",  shape.labeldown, location.absolute, color = #00c42b, text="Buy", textcolor=color.white, size=size.tiny)
plotshape(bear ? ext : na, "Bearish Label",  shape.labelup,   location.absolute, color = #ff441f, text="Sell", textcolor=color.white, size=size.tiny)

// -------------------------------------------------------------------------------------------------------------

candleSizeIncreasing = body[2] < body[1] and body[1] < body[0]

longEntryCond   = os == 1 and bull
shortEntryCond  = os == 0 and bear

longEntry       = strategy.opentrades == 0 and candleSizeIncreasing and not candleSizeIncreasing[1] and ta.barssince(longEntryCond)  < ta.barssince(os == 0) and ta.barssince(longEntryCond) < ta.barssince(bear)
shortEntry      = strategy.opentrades == 0 and candleSizeIncreasing and not candleSizeIncreasing[1] and ta.barssince(shortEntryCond) < ta.barssince(os == 1) and ta.barssince(shortEntryCond) < ta.barssince(bull)

longExit        = strategy.opentrades > 0 and strategy.position_size > 0 and (bear or os == 0)
shortExit       = strategy.opentrades > 0 and strategy.position_size < 0 and (bull or os == 1)

recentSwingHigh = ta.highest(high, slLength) // highest high of last candles
recentSwingLow  = ta.lowest(low,   slLength) // lowest low of recent candles

bgcolor(longEntry  ? color.rgb(76, 175, 79, 90) : na)
bgcolor(shortEntry ? color.rgb(255, 82, 82, 90) : na)

slLong          = (close - recentSwingLow) / syminfo.mintick  // stop loss in ticks
slShort         = (recentSwingHigh - close) / syminfo.mintick // stop loss in ticks

newOrderID         = str.tostring(strategy.closedtrades + strategy.opentrades + 1)
curOrderID         = str.tostring(strategy.closedtrades + strategy.opentrades)

alertMessageForEntry = "Trade {0} - New {1} Entry at price: {2} with stop loss at: {3}"

if (longEntry)
    alertMessage = str.format(alertMessageForEntry, newOrderID, "Long", close, recentSwingLow)
    
    strategy.entry(newOrderID, strategy.long, alert_message = alertMessage)
    strategy.exit("Stop Loss Long", newOrderID, loss = slLong, alert_message = "Stop Loss for Trade " + newOrderID)

if(longExit)
    strategy.close(curOrderID, alert_message = "Close Trade " + curOrderID)

if (shortEntry)
    alertMessage = str.format(alertMessageForEntry, newOrderID, "Short", close, recentSwingLow)

    strategy.entry(newOrderID, strategy.short, alert_message = alertMessage)
    strategy.exit("Stop Loss Short", newOrderID, loss = slShort, alert_message = "Stop Loss for Trade " + newOrderID)

if(shortExit)
    strategy.close(curOrderID, alert_message = "Close Trade " + curOrderID)