Kurzfristige Trendverfolgung und Strategie zur Schockunterdrückung


Erstellungsdatum: 2023-12-12 15:52:37 zuletzt geändert: 2023-12-12 15:52:37
Kopie: 1 Klicks: 657
1
konzentrieren Sie sich auf
1621
Anhänger

Kurzfristige Trendverfolgung und Strategie zur Schockunterdrückung

Überblick

Die Strategie nutzt die Vorzüge der drei Indikatoren EMA, TTS und STC, um eine stärkere Kurzlinie zu bilden. Die Strategie beurteilt gleichzeitig, ob die Hohlraumsignale der drei Indikatoren übereinstimmen. Wenn sie übereinstimmen, erzeugen sie ein Handelssignal; Wenn sie nicht übereinstimmen, werden keine Geschäfte getätigt.

Strategieprinzip

Die Strategie besteht hauptsächlich aus drei Teilen: EMA-Gleichungsindikator, TTS-Trend-Tracking-Strategie und STC-Schwefter-Trendzyklusindikator.

Zunächst wird der EMA-Indikator für 200 Perioden berechnet, um zu bestimmen, ob der Preis unter oder über der EMA-Linie liegt. Wenn der Preis unter dieser Linie liegt, gibt der EMA-Indikator ein Hohlkopfsignal; -1; Wenn der Preis über dieser Linie liegt, gibt der EMA-Indikator ein Mehrkopfsignal:

Zweitens berechnen Sie die relevanten Parameter der TTS-Trend-Tracking-Strategie, um die Richtung des Trends zu beurteilen, wenn der Preis auf und ab bricht. Wenn der Preis aufbricht, erzeugt er ein mehrköpfiges Signal; wenn der Preis auf und ab bricht, erzeugt er ein ungebundenes Signal -1.

Schließlich berechnet man den Schwert-Trendzyklus-STC-Indikator, der den Trend der Preismitte widerspiegelt. Wenn der STC-Indikator steigt, erzeugt er ein Mehrkopfsignal1; wenn der STC-Indikator fällt, erzeugt er ein Hoherkopfsignal-1.

Nach Erhalt der drei Indicator-Judgment-Signale beurteilt die Strategie, ob sie übereinstimmen. Nur wenn die drei Indicator-Judgment-Signale übereinstimmen, wird ein tatsächliches Handelssignal erzeugt. Dies kann einige falsche Signale effektiv filtern und die Strategie zuverlässiger machen.

Wenn ein Handelssignal erzeugt wird, wird ein Auftrag für einen Über- oder Einbruch erteilt und ein Stop-Loss-Punkt gesetzt.

Strategische Vorteile

  1. Die Strategie verwendet drei verschiedene Arten von Indikatoren, um die Richtung der Markttrends zu bestimmen.

  2. Die Verwendung von drei Indikatoren, die die Einheitlichkeit der Signal-Urteile bestimmen, um falsche Signale zu filtern, kann unnötige Transaktionen reduzieren und die Strategie zuverlässiger machen.

  3. Setzen Sie einen angemessenen Stop-Loss-Punkt, um Gewinne zu sichern und Verluste zu vermeiden.

  4. Die ausgewählten Parameter wurden optimiert, um für die meisten Aktien- und Devisenvarianten geeignet zu sein.

  5. Die Transaktionslogik ist klar und prägnant, leicht zu verstehen und zu ändern.

Strategisches Risiko

  1. Wenn die drei Indikatoren nicht übereinstimmen, treten Dimer auf, wodurch die Handelschancen leicht verpasst werden können.

  2. STC-Indikatoren sind sehr empfindlich auf Parameter, die bei verschiedenen Sorten angepasst werden müssen.

  3. In einer Rezession kann der Stop-Loss durchbrochen werden, was zu größeren Verlusten führt. Es kann in Betracht gezogen werden, den Stop-Loss in Echtzeit zu optimieren.

  4. Es ist unmöglich, die Situation der horizontalen Ordnungsarbeit zu beurteilen, und die Ordnungsarbeit kann zu Gefängnisstrafen führen.

Strategieoptimierung

  1. Es ist möglich, eine Kombination aus mehr Indikatoren zu testen, um nach stärkeren Urteilsregeln zu suchen. Zum Beispiel die Aufnahme des RSI-Indikators.

  2. Optimierung der Parameter der STC-Indikatoren, um sie für verschiedene Sorten geeigneter zu machen. Die Optimierung von Anpassungsparametern wurde hinzugefügt.

  3. Das Modul “Adaptive Stop Loss” wurde hinzugefügt, um die Stop-Loss-Einstellungen in Echtzeit zu optimieren.

  4. Das Modul “Gleichgewicht” wurde erweitert, um zu bestimmen, ob die Platte überschritten wurde, um die Gefangenschaft zu vermeiden.

  5. Optimierung der Algorithmen für Hochfrequenz-Transaktionen, Verringerung der Systemverzögerung und Erhöhung der Auftragserfolgsrate.

Zusammenfassen

Die Strategie kombiniert die drei Indikatoren EMA, TTS und STC, um die Trendrichtung zu bestimmen. Die Judgment-Regel ist so eingestellt, dass sie bei Übereinstimmung der drei Handelssignale erzeugt, um falsche Signale wirksam zu filtern. Die Strategie kann noch optimiert werden, indem mehr Indikatorkombinationen getestet werden.

Strategiequellcode
/*backtest
start: 2022-12-05 00:00:00
end: 2023-04-14 00:00:00
period: 1d
basePeriod: 1h
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/
// © ajahanbin1374

//@version=5
strategy(title = "EMA + TTS + STC", shorttitle = "EMA + TTS + STC", overlay = true, calc_on_order_fills=false, calc_on_every_tick = false, initial_capital = 100, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.01)

////////////////////////////////////////////////////////////
// Strategy entry
////////////////////////////////////////////////////////////
profit = input.float(defval = 0.1, minval = 0.0, title="Profit %", step=0.01, group = "Strategy") * 0.01

////////////////////////////////////////////////////////////
// Emponential Moving Average
////////////////////////////////////////////////////////////
ema = ta.ema(close, 200)
posEma = close < ema ? -1 : 1

////////////////////////////////////////////////////////////
// Trend Trader Strategy
////////////////////////////////////////////////////////////
Length = input.int(21, minval=1, group="Trend Trader Strategy")
Multiplier = input.float(3, minval=0.000001, group="Trend Trader Strategy")
avgTR = ta.wma(ta.atr(1), Length)
highestC = ta.highest(Length)
lowestC = ta.lowest(Length)
hiLimit = highestC[1] - avgTR[1] * Multiplier
loLimit = lowestC[1] + avgTR[1] * Multiplier
ret = 0.0
posTts = 0.0
ret:= close > hiLimit and close > loLimit ? hiLimit :
         close < loLimit and close < hiLimit ? loLimit : nz(ret[1], close)
posTts:=  close > ret ? 1 :close < ret ? -1 : nz(posTts[1], 0)


////////////////////////////////////////////////////////////
// Schaff Trend Cycle (STC)
////////////////////////////////////////////////////////////
EEEEEE = input.int(12, 'Length', group ="Schaff Trend Cycle")
BBBB = input.int(26, 'FastLength', group ="Schaff Trend Cycle")
BBBBB = input.int(50, 'SlowLength', group ="Schaff Trend Cycle")

AAAA(BBB, BBBB, BBBBB) =>
    fastMA = ta.ema(BBB, BBBB)
    slowMA = ta.ema(BBB, BBBBB)
    AAAA = fastMA - slowMA
    AAAA

AAAAA(EEEEEE, BBBB, BBBBB) =>
    AAA = input.float(0.5, group ="Schaff Trend Cycle")
    var CCCCC = 0.0
    var DDD = 0.0
    var DDDDDD = 0.0
    var EEEEE = 0.0
    BBBBBB = AAAA(close, BBBB, BBBBB)
    CCC = ta.lowest(BBBBBB, EEEEEE)
    CCCC = ta.highest(BBBBBB, EEEEEE) - CCC
    CCCCC := CCCC > 0 ? (BBBBBB - CCC) / CCCC * 100 : nz(CCCCC[1])
    DDD := na(DDD[1]) ? CCCCC : DDD[1] + AAA * (CCCCC - DDD[1])
    DDDD = ta.lowest(DDD, EEEEEE)
    DDDDD = ta.highest(DDD, EEEEEE) - DDDD
    DDDDDD := DDDDD > 0 ? (DDD - DDDD) / DDDDD * 100 : nz(DDDDDD[1])
    EEEEE := na(EEEEE[1]) ? DDDDDD : EEEEE[1] + AAA * (DDDDDD - EEEEE[1])
    EEEEE

mAAAAA = AAAAA(EEEEEE, BBBB, BBBBB)
mColor = mAAAAA > mAAAAA[1] ? color.new(color.green, 20) : color.new(color.red, 20)
posStc = mAAAAA > mAAAAA[1] ? 1 : -1

////////////////////////////////////////////////////////////
// Strategy entry
////////////////////////////////////////////////////////////
pos = posEma == 1 and posTts == 1 and posStc == 1 ? 1 : posEma == -1 and posTts == -1 and posStc == -1 ? -1 : 0

currentPostition = strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0
noOpenPosition = strategy.position_size == 0

signal = pos != pos[1] and pos == 1 and noOpenPosition ? 1 : pos != pos[1] and pos == -1 and noOpenPosition ? -1 : 0

stopPriceForLong = math.min(close * (1 - profit), low[1] * 0.9998, low[2] * 0.9998)
limitPriceForLong = close + (close - stopPriceForLong)
stopPriceForShort = math.max(close * (1 + profit), high[1] * 1.0002, high[2] * 1.0002)
limitPriceForShort = close - (stopPriceForShort - close)

if signal == 1
    strategy.entry(id="L", direction=strategy.long)
    strategy.exit(id='EL', from_entry='L', limit=limitPriceForLong, stop=stopPriceForLong)
if signal == -1
    strategy.entry(id="S", direction=strategy.short)
    strategy.exit(id='ES', from_entry='S', limit=limitPriceForShort, stop=stopPriceForShort)

////////////////////////////////////////////////////////////
// Plots - Debuger
////////////////////////////////////////////////////////////
plotchar(signal, title='singal', char = '')
plotchar(posEma, title='posEma', char = '')
plotchar(posTts, title='posTts', char = '')
plotchar(pos, title='pos', char = '')
plotchar(currentPostition, title = 'currentPostition', char='')
plotchar(stopPriceForLong, title = "stopPriceForLong", char ='')
plotchar(limitPriceForLong, title = 'limitPriceForLong', char='')
plotchar(stopPriceForShort, title = "stopPriceForShort", char ='')
plotchar(limitPriceForShort, title = 'limitPriceForShort', char='')

////////////////////////////////////////////////////////////
// Plots
////////////////////////////////////////////////////////////
plot(ret, color=color.new(color.black, 0), title='Trend Trader Strategy')
plotchar(mAAAAA, color=mColor, title='STC', location = location.bottom, char='-', size=size.normal)
plot(series = ema, title = "ema")