Momentum ABCD-Musterstrategie


Erstellungsdatum: 2023-09-24 13:08:28 zuletzt geändert: 2023-09-24 13:08:28
Kopie: 1 Klicks: 736
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie nutzt die Williams-Fractal-Indikator, um Preishöhen und -tiefpunkte zu identifizieren, und in Kombination mit der ABCD-Form, um die Richtung des Trends zu bestimmen und nach der Bestätigung des Trends einzutreten, um die Kurzlinie zu profitieren.

Strategieprinzip

  1. Der Williams-Fractal-Indikator wird verwendet, um die Höhe und die Tiefe der Preise zu identifizieren, wobei die ABCD-Form des Bullenmarktes oder die ABCD-Form des Bärenmarktes nach verschiedenen Formen beurteilt wird.

  2. ABCD-Formkriterien:

    • Die Abstände zwischen AB und CD sind nahe beieinander, und die Abstände zwischen BC und CD entsprechen einer bestimmten Proportionsanforderung (zwischen 0,382-0,886 und 1,13-2,618).

    • D unter C ist ein Stiermarkt, D über C ist ein Bärenmarkt.

  3. Die Barssince-Funktion beurteilt die Fractal-Distanz der letzten Richtung zur aktuellen, um die aktuelle Trendrichtung zu bestimmen.

  4. Eintritt in den Plus/Lose-Bereich bei der Identifizierung von ABCD-Formen und Setzen von Stop-Loss- und Stop-Stops, um den Kurzlinien-Trend zu verfolgen.

Strategische Stärkenanalyse

  1. Mit Hilfe des Williams-Fractal-Indikators kann ein Wendepunkt genauer identifiziert werden.

  2. Die ABCD-Formkriterien sind einfach, zuverlässig und leicht zu programmieren.

  3. In Kombination mit der barssince-Funktion kann die Richtung der großen Tendenz ermittelt werden, um den Verlust durch falsche Durchbrüche effektiv zu reduzieren.

  4. Ein Stop-Loss-Stoppschalter ermöglicht es Ihnen, einen kurzen Trend zu verfolgen und zu profitieren.

Strategische Risikoanalyse

  1. Williams Fractal ist im Rückstand und könnte Verluste verursachen, wenn er den Wendepunkt verpasst.

  2. Es gibt mehrere überlappende ABCD-Formen auf der mittleren Kurzlinie, was zu Fehlern bei der Identifikation führen kann.

  3. Wenn man die großen Trends nicht richtig einschätzt, kann man leicht in den Knast geraten.

  4. Wenn die Stop-Damage-Einstellung zu klein ist, kann sie leicht getroffen werden, wenn sie zu groß ist, ist die Tracking-Effektivität schlechter.

Die entsprechende Optimierung:

  1. Es kann versucht werden, andere Indikatoren zu verwenden, um zu ermitteln, wie die Wendepunkte effektiver erkannt werden können.

  2. Optimierung der Parameter für die ABCD-Form, um eine strengere und zuverlässigere Beurteilung zu ermöglichen.

  3. Die Methoden zur Optimierung von Trendbeurteilungen und zur Verhinderung von Fehlbeurteilungen von Trends.

  4. Versuche verschiedene Stop-Loss-Stopp-Raten und finde die optimale Stop-Loss-Stopp-Punkt.

Richtung der Strategieoptimierung

  1. Einige andere Indikatoren wie MACD, KDJ und andere können versucht werden, um Trends zu beurteilen, um eine genauere Eintrittszeit zu finden.

  2. Parameteroptimierungen können für die verschiedenen Zyklen der verschiedenen Sorten durchgeführt werden, um die Stop-Loss-Stop-Punkte zu finden, die für den Zyklus der Sorte am besten geeignet sind.

  3. Die optimale Kombination von Parametern kann für den gesamten Zyklus nach Marktveränderungen optimiert werden.

  4. Die Eintrittssignale können mit Indikatoren wie Gleichlinien gefiltert werden, um die Stabilität der Strategie zu verbessern.

  5. Die Einführung von Machine-Learning-Algorithmen, die mehr Daten-Training-Modelle nutzen können, um die Erkennungs-Genauigkeit zu verbessern.

Zusammenfassen

Die Strategie ist klar und zuverlässig, nutzt die Williams Fractal-Indikator und ABCD-Form-Ermittlung in der kurzen Trendrichtung, kombiniert mit Trendfilter und Stop-Loss-Stopp-Einstellungen, um den Trend zu verfolgen. Die Strategie kann optimiert werden.

Strategiequellcode
/*backtest
start: 2023-09-16 00:00:00
end: 2023-09-23 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// @author=Daveatt - BEST

// ABCD Pattern Strat

StrategyName        = "BEST ABCD Pattern Strategy"
ShortStrategyName   = "BEST ABCD Pattern Strategy" 

// strategy(title=StrategyName, shorttitle=ShortStrategyName, overlay=true, 
//  pyramiding=2, default_qty_value=100, precision=7, currency=currency.USD,
//  commission_value=0.2,commission_type=strategy.commission.percent, initial_capital=1000000,
//  default_qty_type=strategy.fixed)

filterBW = input(false, title="filter Bill Williams Fractals?")

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////// UTILITIES ///////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

//  ||-----------------------------------------------------------------------------------------------------||
//  ||---   Fractal Recognition Functions:  ---------------------------------------------------------------||
isRegularFractal(mode, _high, _low) =>
    ret = mode == 1 ? _high[4] < _high[3] and _high[3] < _high[2] and _high[2] > _high[1] and _high[1] > _high[0] :
     mode == -1 ? _low[4] > _low[3] and _low[3] > _low[2] and _low[2] < _low[1] and _low[1] < _low[0] : false

isBWFractal(mode, _high, _low) =>
    ret = mode == 1 ? _high[4] < _high[2] and _high[3] <= _high[2] and _high[2] >= _high[1] and _high[2] > _high[0] :
     mode == -1 ? _low[4] > _low[2] and _low[3] >= _low[2] and _low[2] <= _low[1] and _low[2] < _low[0] : false

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
////////////////////////////// ABCD PATTERN ///////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

f_abcd()=>

    _r = timeframe.period
    _g = barmerge.gaps_off
    _l = barmerge.lookahead_on

    _high = high
    _low = low

    filteredtopf = filterBW ? isRegularFractal(1, _high, _low) : isBWFractal(1, _high, _low)
    filteredbotf = filterBW ? isRegularFractal(-1, _high, _low) : isBWFractal(-1, _high, _low)

    //  ||---   ZigZag:
    istop = filteredtopf
    isbot = filteredbotf
    topcount = barssince(istop)
    botcount = barssince(isbot)

    zigzag = (istop and topcount[1] > botcount[1] ? _high[2] :
     isbot and topcount[1] < botcount[1] ? _low[2] : na)

    x = valuewhen(zigzag, zigzag, 4) 
    a = valuewhen(zigzag, zigzag, 3) 
    b = valuewhen(zigzag, zigzag, 2) 
    c = valuewhen(zigzag, zigzag, 1) 
    d = valuewhen(zigzag, zigzag, 0)

    xab = (abs(b-a)/abs(x-a))
    xad = (abs(a-d)/abs(x-a))
    abc = (abs(b-c)/abs(a-b))
    bcd = (abs(c-d)/abs(b-c))

    // ABCD Part
    _abc = abc >= 0.382 and abc <= 0.886
    _bcd = bcd >= 1.13 and bcd <= 2.618
    
    _bull_abcd = _abc and _bcd and d < c 
    _bear_abcd = _abc and _bcd and d > c

    _bull   = _bull_abcd and not _bull_abcd[1]
    _bear   = _bear_abcd and not _bear_abcd[1]

    [_bull, _bear, zigzag]

lapos_x = timenow + round(change(time)*12)

[isLong, isShort, zigzag]  = f_abcd()

plot(zigzag, title= 'ZigZag', color=color.black, offset=-2)
plotshape(isLong, style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), size=size.normal, text="ABCD", textcolor=color.white)
plotshape(isShort, style=shape.labeldown, location=location.abovebar, color=color.new(color.maroon, 0), size=size.normal, text="ABCD", textcolor=color.white)


long_entry_price    = valuewhen(isLong, close, 0)
short_entry_price   = valuewhen(isShort, close, 0)

sinceNUP = barssince(isLong)
sinceNDN = barssince(isShort)

buy_trend   = sinceNDN > sinceNUP
sell_trend  = sinceNDN < sinceNUP


//////////////////////////
//* Profit Component *//
//////////////////////////

//////////////////////////// MinTick ///////////////////////////
fx_pips_value = syminfo.type == "forex" ? syminfo.mintick*10 : 1

input_tp_pips = input(100, "Backtest Profit Goal (in USD)",minval=0)*fx_pips_value
input_sl_pips = input(20, "Backtest STOP Goal (in USD)",minval=0)*fx_pips_value

tp = buy_trend? long_entry_price + input_tp_pips : short_entry_price - input_tp_pips
sl = buy_trend? long_entry_price - input_sl_pips : short_entry_price + input_sl_pips

plot_tp = buy_trend and high[1] <= tp ? tp : sell_trend and low[1] <= tp ? tp : na
plot_sl = buy_trend and low[1] >= sl ? sl : sell_trend and high[1] >= sl ? sl : na

plot(plot_tp, title="TP", style=plot.style_circles, linewidth=3, color=color.blue)
plot(plot_sl, title="SL", style=plot.style_circles, linewidth=3, color=color.red)

longClose   = isShort
shortClose  = isLong


strategy.entry("Long", 1, when=isLong)
// strategy.close("Long", when=longClose )
strategy.exit("XL","Long", limit=tp,  when=buy_trend, stop=sl)


strategy.entry("Short", 0,  when=isShort)
// strategy.close("Short", when=shortClose )
strategy.exit("XS","Short", when=sell_trend, limit=tp, stop=sl)