
Dies ist eine sehr klassische Moving-Average-Gold-Dot-Fork-Strategie. Die Strategie nutzt den Moving-Average von TENKAN und KIJUN mit zwei verschiedenen Perioden, um Gold- und Todesfork-Signale zu erzeugen und lang- und kurze Operationen durchzuführen.
Die Strategie basiert hauptsächlich auf einer technischen Analyse der japanischen Aktien, der sogenannten “Equilibrium-Tabelle”, die die Richtung der Markttrends anhand von mehreren Moving Averages wie den TENKAN- und KIJUN-Linien beurteilt.
Zunächst einmal ist die TENKAN-Linie die 9-Tage-Linie, die den kurzfristigen Trend darstellt; die KIJUN-Linie ist die 26-Tage-Linie, die den mittleren Trend darstellt. Wenn die kurzfristige Mitte überschritten wird, erzeugt sie ein Kaufsignal; wenn die kurzfristige Mitte unterhalb der Mitte überschritten wird, erzeugt sie ein Verkaufsignal.
Die Strategie führt dann auch die Luftlinie und die Lichtwolkenlinie ein. Die Luftlinie ist der Mittelwert für die kurz- und mittelfristigen gleitenden Durchschnitte, die Lichtwolkenlinie B ist der 52-Tage-Gleitende Durchschnitt. Sie bilden die Wolkenbänder, die die langfristige Trendrichtung bestimmen.
Schließlich, um falsche Signale zu filtern, erkennt die Strategie auch, ob der Preis mit der OTO-Linie (der Verzögerungslinie des 26-Tage-Preises) in Beziehung steht. Eine Kauf-Signal wird nur erzeugt, wenn der Preis unter der OTO-Linie ist; ein Verkaufssignal wird nur erzeugt, wenn der Preis über der OTO-Linie ist.
Dies ist eine sehr typische Moving-Average-Strategie, deren Vorteile sich in dreierlei Hinsicht zeigen:
Die Verwendung von zwei unterschiedlichen Perioden als Mittellinie ermöglicht eine effektive Bestimmung der Trendrichtung in zwei Zeitdimensionen in der kurzfristigen und mittleren Zeit.
Mit Hilfe von Licht-Wolken-Linien kann man langfristige Trends erkennen, um zu vermeiden, dass man in einem langfristigen Abwärtstrend noch mehr sieht.
Durch die Ermittlung der Beziehung zwischen Preisen und Verzögerungen können viele falsche Signale herausgefiltert und unnötige Transaktionen reduziert werden.
Die Strategie nutzt daher die vielfältigen Funktionen der Mittellinie, um kurz-, mittelschwer- und dreidimensionalen Trends zeitnah zu erfassen.
Die Hauptrisiken dieser Strategie sind:
Eine Einheitslinie kann sehr viele falsche Signale erzeugen. Wenn die Parameter nicht gut eingestellt sind, werden Sie wegen des häufigen Handels eingesperrt.
Die Strategie konzentriert sich auf die technischen Aspekte und berücksichtigt nicht die grundlegenden Faktoren. Technische Signale können auch ausfallen, wenn sich die Unternehmensleistung oder die Marktpolitik erheblich ändern.
Die Strategie berücksichtigt nur Kauf- und Verkaufsentscheidungen und keine Stop-Loss-Mechanismen. Ein Fehlentscheidung kann zu einem Verlust führen.
Wir müssen also nach einem höher entwickelten linearen System suchen, oder einen vernünftigen Stop-Loss-System einrichten, oder grundlegende Signale hinzufügen, um die Strategie weiter zu verbessern und die Risiken zu verringern.
Die Strategie kann auch in folgenden Bereichen optimiert werden:
Suche nach einer stabileren und effizienteren Kombination von Parametern. Wir können durch mehr Daten zurückgehen, um die Parameterwerte zu finden, die die Performance der Strategie verbessern.
Erhöhung der Stop-Loss-Mechanismen. Ein vernünftiger Stop-Loss kann den maximalen Verlust der Strategie effektiv kontrollieren.
Hinzufügen von grundlegenden Signalen. Daten wie die Revision der Leistungserwartungen können die Unternehmensperspektive bestimmen und so die Effektivität der Strategie verbessern.
Optimierung der OTO-Linienstrategie. Die bestehende Implementierung ist sehr einfach, und wir können nach einer Methode suchen, die die Beziehung zwischen dem Preis und dem historischen Preis stabiler und genauer beurteilt.
In Kombination mit Aktienwahlsignalen. Die Hinzufügung von Faktoren wie PE, ROE und anderen kann einige weniger qualitativ hochwertige Bewertungen filtern.
Dies ist eine sehr typische und praktische Moving Average Strategie. Sie ist gleichzeitig auf kurz-, mittel- und langfristige Trends eingestellt und nutzt die verschiedenen Funktionen der Gleichgewichtung, um Handelssignale zu entwerfen. Auf dieser Grundlage können wir die Performance verbessern, indem wir Parameteroptimierung, Stop Loss und Aktienwahl anwenden.
/*backtest
start: 2022-11-28 00:00:00
end: 2023-12-04 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/
// © mdeous
//@version=4
strategy(
title="Ichimoku Kinko Hyo Strategy",
shorttitle="Ichimoku Strategy",
overlay=true,
pyramiding=0,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
initial_capital=1000,
currency="USD",
commission_type=strategy.commission.percent,
commission_value=0.0
)
//
// SETTINGS
//
// Ichimoku
int TENKAN_LEN = input(title="Tenkan-Sen Length", defval=9, minval=1, step=1)
int KIJUN_LEN = input(title="Kijun-Sen Length", defval=26, minval=1, step=1)
int SSB_LEN = input(title="Senkou Span B Length", defval=52, minval=1, step=1)
int OFFSET = input(title="Offset For Chikou Span / Kumo", defval=26, minval=1, step=1)
// Strategy
int COOLDOWN = input(title="Orders Cooldown Period", defval=5, minval=0, step=1)
bool USE_CHIKOU = input(title="Use Imperfect Chikou Position Detection", defval=false)
//
// HELPERS
//
color _red = color.red
color _blue = color.blue
color _lime = color.lime
color _fuchsia = color.fuchsia
color _silver = color.silver
color _aqua = color.aqua
f_donchian(_len) => avg(lowest(_len), highest(_len))
//
// ICHIMOKU INDICATOR
//
float tenkan = f_donchian(TENKAN_LEN)
float kijun = f_donchian(KIJUN_LEN)
float ssa = avg(tenkan, kijun)
float ssb = f_donchian(SSB_LEN)
plot(tenkan, title="Tenkan", color=_silver)
plot(close, title="Chikou", offset=-OFFSET+1, color=_aqua)
_ssa = plot(ssa, title="SSA", offset=OFFSET-1, color=_lime)
_ssb = plot(ssb, title="SSB", offset=OFFSET-1, color=_red)
fill(_ssa, _ssb, color=ssa > ssb ? _lime : _fuchsia, transp=90)
//
// STRATEGY
//
// Check if price is "above or below" Chikou (i.e. historic price line):
// This detection is highly imperfect, as it can only know what Chikou position
// was 2*offset candles in the past, therefore if Chikou crossed the price
// line in the last 2*offset periods it won't be detected.
// Use of this detection is disabled by default,
float _chikou_val = close[OFFSET*2+1]
float _last_val = close[OFFSET+1]
bool above_chikou = USE_CHIKOU ? _last_val > _chikou_val : true
bool below_chikou = USE_CHIKOU ? _last_val < _chikou_val : true
// Identify short-term trend with Tenkan
bool _above_tenkan = min(open, close) > tenkan
bool _below_tenkan = max(open, close) < tenkan
// Check price position compared to Kumo
bool _above_kumo = min(open, close) > ssa
bool _below_kumo = max(open, close) < ssb
// Check if Kumo is bullish or bearish
bool bullish_kumo = ssa > ssb
bool bearish_kumo = ssa < ssb
// Correlate indicators to confirm the trend
bool bullish_trend = _above_tenkan and _above_kumo and bullish_kumo
bool bearish_trend = _below_tenkan and _below_kumo and bearish_kumo
// Build signals
bool buy1 = (close > open) and ((close > ssa) and (open < ssa)) // green candle crossing over SSA
bool buy2 = bullish_kumo and bearish_kumo[1] // bullish Kumo twist
bool sell1 = (close < open) and ((close < ssb) and (open > ssb)) // red candle crossing under SSB
bool sell2 = bearish_kumo and bullish_kumo[1] // bearish Kumo twist
bool go_long = below_chikou and (bullish_trend and (buy1 or buy2))
bool exit_long = above_chikou and (bearish_trend and (sell1 or sell2))
//
// COOLDOWN
//
f_cooldown() =>
_cd_needed = false
for i = 1 to COOLDOWN by 1
if go_long[i]
_cd_needed := true
break
_cd_needed
go_long := f_cooldown() ? false : go_long
//
// ORDERS
//
strategy.entry("buy", strategy.long, when=go_long)
strategy.close_all(when=exit_long)
//
// ALERTS
//
alertcondition(
condition=go_long,
title="Buy Signal",
message="{{exchange}}:{{ticker}}: A buy signal for {{strategy.market_position_size}} units has been detected (last close: {{close}})."
)
alertcondition(
condition=exit_long,
title="Sell Signal",
message="{{exchange}}:{{ticker}}: A sell signal for {{strategy.market_position_size}} units has been detected (last close: {{close}})."
)