Trendfolgende Candlestick-Zählstrategie mit gleitendem Durchschnitt


Erstellungsdatum: 2023-09-16 19:04:02 zuletzt geändert: 2023-09-16 19:04:02
Kopie: 0 Klicks: 880
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Dieser Artikel beschreibt eine auf der K-Linie basierende Trend-Follow-Strategie. Die Strategie beurteilt die Richtung der K-Linie, indem sie die Richtung der K-Linie berechnet und nach der festen Wurzel der K-Linie eingegeben wird.

Strategieprinzip

Die Strategie basiert auf folgenden Prinzipien:

  1. Beurteilen Sie die Richtung der K-Linie und beurteilen Sie die Tendenz.

  2. In einem Aufwärtstrend, wenn N Wurzeln in einer Reihe von Negativlinien erscheinen, machen Sie mehr; in einem Abwärtstrend, wenn N Wurzeln in einer Reihe von Positivlinien erscheinen, machen Sie frei.

  3. Ein kleiner N-Wert ermöglicht es der Strategie, Trends schneller zu erfassen. Ein kleiner N-Wert ist jedoch auch eine leichtere Möglichkeit, von einem wackligen Markt abzulenken.

  4. Ein fester Stop-Loss-Punkt kann festgelegt werden, um Gewinne zu sichern und Risiken zu kontrollieren.

  5. Wenn eine umgekehrte K-Linie auftritt, wird die Ausgleichsposition beendet.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Die K-Linien-Statistik beurteilt Trends, ist einfach, unkompliziert und einfach zu bedienen.

  2. Die Eintritts- und Abrechnungssysteme sind so konzipiert, dass sie die Trends vollständig erfassen können.

  3. Ein fixierter Stop-Loss-Punkt, der das Risiko effektiv kontrolliert.

  4. Die Parameter für die K-Linien-Zählung sind anpassbar für verschiedene Marktumgebungen.

  5. Die Strategie ist einfach, klar und leicht zu ändern und zu optimieren.

Risikoanalyse

Die Strategie birgt einige Risiken:

  1. Bei Erschütterungen kann die K-Linien-Zählung ein falsches Signal erzeugen.

  2. Der feste Stop-Loss-Punkt ist möglicherweise zu steif, um voll profitieren zu können.

  3. Fehlentscheidungen bei der Rückwärtsrichtung können zu einem vorzeitigen Stillstand führen.

  4. Die Parameter sollten entsprechend angepasst und die Größe der Positionen kontrolliert werden.

  5. Der Händler muss die Rationalität der Parameter sorgfältig beurteilen.

Zusammenfassen

Die Strategie integriert die K-Line-Statistik und die Idee, Trends zu verfolgen. Wenn die Parameter vernünftig eingestellt werden, kann dies gute Ergebnisse bringen. Der Händler muss jedoch die Marktumgebung sorgfältig beurteilen und die Parameter entsprechend anpassen, um langfristige Gewinne zu erzielen.

Strategiequellcode
/*backtest
start: 2023-08-16 00:00:00
end: 2023-09-15 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//@author=Daveatt

StrategyName = "BEST Candle Meter Strategy"
ShortStrategyName = "BEST Candle Meter Strategy"

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

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////// INPUTS ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

// TD Sequential approach would be setting bar_counter == 9
bar_counter = input(5, "Bar Counter",minval=1, step=1)

// if based on same candle
GreenCandle = close > open
RedCandle = close < open

// if based on previous candle open
GreenPrevCandle = close > open[1]
RedPrevCandle = close < open[1]

// conditons
barUP = GreenCandle
barDN = RedCandle

///////////////////////////////////////////////////////////////////////////////
////////////////////////////// COUNTERS ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
var barsFromUp = 0
var barsFromDn = 0
barsFromUp := barUP ? barsFromUp + 1 : 0
barsFromDn := barDN ? barsFromDn + 1 : 0

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////// PLOTS ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

plot_color = barsFromUp > 0 ? color.lime : color.red
//plot(barsFromUp, title="UP Histogram", color=plot_color, style=plot.style_histogram, linewidth=4)
//plot(barsFromDn, title="DN Histogram", color=plot_color, style=plot.style_histogram, linewidth=4)

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////// HLINE ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

//hline(9, '9 TD Sequential Line', linestyle=hline.style_solid, linewidth=2, color=color.black)
//hline(13, '12 TD Sequential Line', linestyle=hline.style_solid, linewidth=3, color=color.purple)

///////////////////////////////////////////////////////////////////////////////
/////////////////////////////// PLOTCHAR //////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

// var _lbl_UP = label(na)
// if barsFromUp > 0
//     _lbl_UP := label.new(bar_index, close, tostring(barsFromUp, '#'), textcolor=color.green, style=label.style_none, yloc=yloc.price, xloc=xloc.bar_index, size=size.normal)

// var _lbl_DN = label(na)
// if barsFromDn > 0
//     _lbl_DN := label.new(bar_index, close, tostring(barsFromDn, '#'), textcolor=color.red, style=label.style_none, yloc=yloc.price, xloc=xloc.bar_index, size=size.normal)


//plotshape(barsFromUp > 0, "", shape.arrowup,      location.abovebar, color.green,     text="A")

///////////////////////////////////////////////////////////////////////////////
/////////////////////////////// ALERTS ////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

// alertcondition(barsFromUp == 9, title='🔔Sell 9 Alert🔔', message="Sell 9 Alert")
// alertcondition(barsFromDn == 9, title='🔔Buy 9 Alert🔔', message='Buy 9 Alert')
// alertcondition(barsFromUp > 9, title='🔔Sell > 9 Alert🔔', message="Sell > 9 Alert")
// alertcondition(barsFromDn > 9, title='🔔Buy > 9 Alert🔔', message='Buy > 9 Alert')

///////////////////////////////////////////////
//* Backtesting Period Selector | Component *//
///////////////////////////////////////////////


StartYear = input(2017, "Backtest Start Year",minval=1980)
StartMonth = input(1, "Backtest Start Month",minval=1,maxval=12)
StartDay = input(1, "Backtest Start Day",minval=1,maxval=31)
testPeriodStart = timestamp(StartYear,StartMonth,StartDay,0,0)

StopYear = input(2020, "Backtest Stop Year",minval=1980)
StopMonth = input(12, "Backtest Stop Month",minval=1,maxval=12)
StopDay = input(31, "Backtest Stop Day",minval=1,maxval=31)
testPeriodStop = timestamp(StopYear,StopMonth,StopDay,0,0)

testPeriod() => true

isLong  = barsFromUp == bar_counter
isShort = barsFromDn == bar_counter

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(60, "Backtest Profit Goal (in USD)",minval=0)*fx_pips_value
input_sl_pips = input(30, "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

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

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