
Die Strategie nutzt verschiedene Signale, die von den Equilibrium-Scale-Cloud-Instrumenten angeboten werden, und entwickelt eine rein Trendverfolgungsstrategie, die darauf abzielt, mittelfristige Trends zu erfassen, Schwankungen zu filtern und die Richtung eines starken Trends zu verfolgen.
Die Strategie nutzt die Übergangslinie, die Referenzlinie und die Verzögerungslinie in den Gleichgewichts-Cloud-Diagrammen als Hauptsignale. In der langfristigen Trendbeurteilung konzentriert sich die Strategie auf die Beziehung zwischen den nachfolgenden und nachfolgenden Clouds.
Insgesamt ist die Kernlogik der Strategie: Bestätigung der Richtung des mittleren und langen Trends - > Warten auf die Chance, dass ein starker Trend wieder aufgeht - > Eintritt im Trendverfolgungssystem - > Verfolgung des Aussteiger-Stoppens.
Konkret wird der mittlere und langfristige Trend beurteilt, indem die Wechselbeziehung zwischen der vorderen und der nachfolgenden Wolke festgestellt wird: “Wenn die vordere Wolke oben und grün ist, bedeutet dies einen Aufwärtstrend, der Gegenteil bedeutet einen Abwärtstrend”. Wenn der mittlere und langfristige Trend bestätigt wird, wird der Trend durch die Kreuzung der Umstellungslinie und der Benchmark sowie das Signal eines Preisbruchs der Wolkenkarte beurteilt.
Auf diese Weise lassen sich sowohl kurz- als auch mittelfristige Schwankungen filtern, als auch die Chance auf einen starken Trend ergreifen, um langfristig stabile Zuwächse in den Börsen zu erzielen.
(a) Nutzung der Gleichgewichts-Skala-Cloud-Diagramme, um die Richtung der mittleren und langen Trends zu bestimmen und die Hauptrichtungen zu lokalisieren
(ii) Die Überschneidung von Wechsel- und Referenzlinien sowie die Veränderung der Preis-Cloud-Relation bestimmen den Zeitpunkt des Eintritts, um Erschütterungen effektiv zu filtern und starke Trends zu erfassen
(iii) Verfolgung von Stop-Loss-Exit-Mechanismen, die sowohl Gewinne aus großen Trends als auch die effektive Kontrolle einzelner Verluste ermöglichen
(iv) Synthese von Signalen aus mehreren Gleichgewichtsschalen, Bildung einer systematischen Trendverfolgungsstrategie, stabile gute Leistung
(a) Systematische Gefahr von Fehleinschätzungen in der mittleren und langen Frist. Wenn die mittleren und langen Trends falsch beurteilt werden, besteht die Gefahr, dass die nachfolgenden Operationen in die falsche Richtung gehen.
(ii) Risiken, die durch falsche Wahl der Eintrittszeit entstehen.
(iii) die Gefahr, dass ein Stop-Loss zu nahe kommt. Wenn ein Stop-Loss zu nahe kommt, kann ein Extremfall den Stop-Loss durchbrechen und zu Verlusten führen.
(iv) Die Belastung durch die Transaktionsgebühren, die durch eine zu hohe Transaktionsfrequenz verursacht werden. Die Transaktionsgebühren werden erhöht, wenn die Transaktionsfrequenz durch falsche Parameter eingestellt wird.
(a) Kombinationen verschiedener Parameter der Gleichgewichtsskala-Periode zu testen, um die optimale Parameter zu finden
(ii) Optimierung der Zulassungsbedingungen, Entwicklung strengerer Filter, um eine effektive Zulassung zu gewährleisten
(iii) Anpassung der Stop-Loss-Distanz, um die optimale Balance zwischen Risiken und Erträgen zu finden
(iv) Zugabe von Gewinnpreiszielen in Verbindung mit der Entfernung von Preisen von den wichtigsten Gleichgewichtsindikatoren zu einem dynamischen Gewinnmechanismus
Diese Balance-Scale-Cloud-Strategie zur Trendverfolgung kombiniert mehrere Signale, um die Trendrichtung, den Einstiegszeitraum und den Ausfall zu bestimmen. Die Praxis hat gezeigt, dass diese Strategie die mittelfristigen Trends effektiv erfassen, die Erschütterungen filtern und die Überschüsse stabil abdecken kann. In Zukunft wird die Strategie durch kontinuierliche Optimierungstests weiter verbessert und bessere Renditen erzielen.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Ichimoku trendfollowing", overlay=true, initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=0.04, slippage=2)
//***************************
// INPUT BACKTEST RANGE *
//***************************
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2010, title = "From Year", minval = 2000)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2000)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true
//***************
//* ICHIMOKU *
//***************
//inizializzazione parametri,,
tenkanPeriods = input(9, minval=1, title="Tenkan-Sen")
kinjunPeriods = input(26, minval=1, title="Kinjun-Sen")
senkouSpanBPeriods = input(52, minval=1, title="Senkou Span B")
displacement = input(26, minval=1, title="-ChinkouSpan/+SenkouSpan A")
//definizione Tenkan-Sen (9 Period), Kinjun-Sen (26 Period), Chinkou Span (Lagging Line)
averageHighLow(period) => avg(lowest(period), highest(period))
tenkan= averageHighLow(tenkanPeriods)
kinjun = averageHighLow(kinjunPeriods)
senkouSpanA = avg(tenkan, kinjun)
senkouSpanB = averageHighLow(senkouSpanBPeriods)
//definisco il colore della kumo in base al trend.
senkouSpan1Above = senkouSpanA >= senkouSpanB ? 1 : na
senkouSpan2Below = senkouSpanA <= senkouSpanB ? 1 : na
span1plotU = senkouSpan1Above ? senkouSpanA : na
span2plotU = senkouSpan1Above ? senkouSpanB : na
span1plotD = senkouSpan2Below ? senkouSpanA : na
span2plotD = senkouSpan2Below ? senkouSpanB : na
col = senkouSpanA >= senkouSpanB ? lime : red
//plots Ichimoku
plot(tenkan, title = 'Tenkan-Sen', linewidth=1, color=blue)
plot(kinjun, title = 'Kinjun-Sen', linewidth=1, color=red)
plot(close, title = 'Chinkou Span', linewidth=1, offset = -displacement, color=aqua)
plot( senkouSpanA, title = 'Senkou Span A', style=line, linewidth=1, offset = displacement, color=lime)
plot(senkouSpanB, title = 'Senkou Span B', style=line, linewidth=1, offset = displacement, color=red)
//Cloud Lines Plot
p1 = plot(span1plotU ? span1plotU : na, title = 'Senkou Span A Above Senkou Span B', style=linebr, linewidth=1, offset = displacement, color=col)
p2 = plot(span2plotU ? span2plotU : na, title = 'Senkou Span B (52 Period) Below Span A Cloud', style=linebr, linewidth=1, offset = displacement, color=col)
p3 = plot(span1plotD ? span1plotD : na, title = 'Senkou Span A (26 Period) Below Span B Cloud', style=linebr, linewidth=1, offset = displacement, color=col)
p4 = plot(span2plotD ? span2plotD : na, title = 'Senkou Span B (52 Period) Above Span A Cloud', style=linebr, linewidth=1, offset = displacement, color=col)
//Fills that color cloud based on Trend.
fill(p1, p2, color=lime, transp=70, title='Kumo (Cloud)')
fill(p3, p4, color=red, transp=70, title='Kumo (Cloud)')
//***********************************************
//* condizioni ingresso ed uscita mercato *
//***********************************************
isKumoRialzista = senkouSpanA >= senkouSpanB ? true : false
isSopraKumo = (close > max(senkouSpanA[displacement], senkouSpanB[displacement]))
isSottoKumo = (close < min(senkouSpanA[displacement], senkouSpanB[displacement]))
isChinkouSpanSopra = high[displacement]<close
isChinkouSpanSotto = low[displacement]>close
filtroLong=isSopraKumo and isChinkouSpanSopra
filtroShort=isSottoKumo and isChinkouSpanSotto
//rimbalzato su kijun quando i prezzi stavano ritracciando e il trend era già in atto(tenkan >kijun x entrare long
isPullBackLijunEntryLong = kinjun<tenkan and low<kinjun and (close>kinjun)
isPullBackLijunEntryShort =kinjun>tenkan and high>kinjun and (close<kinjun)
//Breackout Kumo
isBreackoutKumoEntryLong = crossover(close, max(senkouSpanA[displacement], senkouSpanB[displacement])) and (close>tenkan) and (close>kinjun)
isBreackoutKumoEntryShort = crossunder(close, min(senkouSpanA[displacement], senkouSpanB[displacement])) and (close<tenkan) and (close<kinjun)
ConditionEntryLong = (isPullBackLijunEntryLong or isBreackoutKumoEntryLong ) and filtroLong
ConditionEntryShort = (isPullBackLijunEntryShort or isBreackoutKumoEntryLong ) and filtroShort
isExitLong = close<kinjun
isExitShort = close>kinjun
//ingressi ed uscite Mercato
strategy.entry ("Long",long=true, when = window() and ConditionEntryLong)
strategy.entry ("Short",long=false, when = window() and ConditionEntryShort)
strategy.close(id="Long", when=isExitLong)
strategy.close(id="Short", when=isExitShort)
strategy.close_all(when=not window())