
Die Strategie ist eine Trend-Tracking-Strategie, die eine niedrige Frequenz-Trendkomponente in einer Preisreihenfolge aus einer niedrigen Frequenz-Leichenwechsel-Extraktion nutzt, um eine Trend-Erkennung und Handelssignal-Generation in Kombination mit drei schnellen und schnellen Moving Averages zu ermöglichen. Wenn ein schneller MA über einen mittleren MA geht und der Preis höher als ein langsamer MA ist, wird mehr getan, wenn ein schneller MA unter einem mittleren MA geht und der Preis niedriger als ein langsamer MA ist.
Niedrigfrequente Trendbestandteile der Preisreihen werden mit einer Niedrigfrequenz-Crystal-Leaf-Wechselung extrahiert. Niedrigfrequente Crystal-Leaf-Wechselung filtert die Hochfrequenz-Geräusche wirksam ab und macht die extrahierten Trendsignale stabiler.
Schnell- und langsam drei Moving Averages zur Trendbeurteilung. Der Slow-MA hat 200 Zyklen, der Medium-MA 20 Zyklen und der Fast-MA 5 Zyklen. Der Slow-MA filtert die Geräusche, der Medium-MA erfasst die Trendwende und der Fast-MA sendet ein Handelssignal aus.
Wenn der schnelle MA den mittleren MA durchdringt und der Preis höher ist als der langsame MA, beurteilen Sie, dass der Markt in einen Aufwärtstrend eingetreten ist, und machen Sie mehr; wenn der schnelle MA den mittleren MA durchdringt und der Preis niedriger ist als der langsame MA, beurteilen Sie, dass der Markt in einen Abwärtstrend eingetreten ist und machen Sie eine Lücke.
Diese Strategie ist eine Trendverfolgungsstrategie, bei der man, wenn man sich in einen Trend befindet, so lange wie möglich eine Position hält, um in dem Trend zu profitieren.
Die Verwendung einer Niedrigfrequenz-Reihe-Umwandlung filtert die Hochfrequenz-Geräusche wirksam, wodurch die erkannten Trendsignale zuverlässiger und stabiler werden.
Die Verwendung von schnellen und langsamen MA-Parametern beurteilt die Umkehrung der Markttrends und verhindert falsche Signale. Langsame MA-Parameter sind größer eingestellt und filtern effektiv den Lärm.
Die Strategie hat einen deutlichen Vorteil, wenn sie den mittleren und langen Trend verfolgt. Wenn der Markt in einen Trend eintritt, werden die Positionen weiter erhöht, um den Trend zu verfolgen, wodurch ein zusätzlicher Gewinn erzielt wird.
Die Strategie bietet viel Platz für die Optimierung der Parameter, die der Benutzer an die verschiedenen Sorten und Perioden anpassen kann, und ist sehr anpassungsfähig.
Als Trend-Tracking-Strategie kann die Strategie nicht effektiv erkennen und reagieren, wenn ein Trendwechsel ausgelöst wird, was zu einer Vergrößerung der Verluste führen kann.
In einer konjunkturellen Situation führt diese Strategie zu mehr Gewinn- und Verlustgeschäften. Es ist jedoch möglich, am Ende einen Gewinn zu erzielen, wobei eine gewisse psychische Belastbarkeit erforderlich ist.
Traditionelle Trend-Tracking-Strategien sind anfällig für die Bildung von Hydrogenchlorid, und ein früher Ausstieg aus dem Trend ist ein Problem, das von dieser Strategie gelöst werden muss.
Ein Stop-Loss kann eingerichtet werden, um einzelne Verluste zu kontrollieren. Tests für unerwartete Ereignisse können in die Rückmeldung aufgenommen werden, um die Risikobereitschaft der Strategie zu bewerten.
Versuchen Sie verschiedene Moving-Average-Algorithmen, die für mehr Sorten und Perioden geeignet sind.
Steigerung von Stop-Loss-Strategien, wie z. B. Stop-Loss-Strategien, Ausfall aus fortlaufenden Verlusten und Risikokontrolle.
Erhöhung der Indikatoren für die Trendstärke, um zu vermeiden, dass zu viele Trades in Schwankungen und schwachen Trends auftreten.
Mit Hilfe von Machine-Learning-Modellen werden Trendwende-Bestimmungen hinzugefügt, die die Strategien anfällig für Überraschungen machen.
Die Low-Frequency-Pillar-Leaf-Transformation-Trend-Tracking-Moving-Average-Strategie mit den Vorteilen des Filtern von Geräuschen, der Erkennung von Trends und der Verfolgung von Trends eignet sich für die mittlere Long-Line-Haltung. Als Trend-Tracking-Strategie ist es hauptsächlich mit dem Risiko von Trendumkehr und anhaltenden Schwingungen konfrontiert. Diese Risiken haben eine bestimmte Strategie.
/*backtest
start: 2023-11-27 00:00:00
end: 2023-11-29 02:00:00
period: 1m
basePeriod: 1m
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/
// © 03.freeman
//@version=4
strategy("FTSMA", overlay=true )
src=input(close,"Source")
slowMA=input(200,"Slow MA period")
mediumMA=input(20,"Mid MA period")
fastMA=input(5,"Fast MA period")
plotSMA=input(true,"Use MA")
sin1=input(1,"First sinusoid",minval=1)
sin2=input(2,"Second sinusoid",minval=1)
sin3=input(3,"Third sinusoid",minval=1)
smoothinput = input('EMA', title = "MA Type", options =['EMA', 'SMA', 'ALMA','FRAMA','RMA', 'SWMA', 'VWMA','WMA','LinearRegression'])
linearReg=input(false, "Use linear regression?")
linregLenght=input(13, "Linear regression lenght")
linregOffset=input(0, "Linear regression offset")
//------FRAMA ma---------
ma(src, len) =>
float result = 0
int len1 = len/2
frama_SC=200
frama_FC=1
e = 2.7182818284590452353602874713527
w = log(2/(frama_SC+1)) / log(e) // Natural logarithm (ln(2/(SC+1))) workaround
H1 = highest(high,len1)
L1 = lowest(low,len1)
N1 = (H1-L1)/len1
H2_ = highest(high,len1)
H2 = H2_[len1]
L2_ = lowest(low,len1)
L2 = L2_[len1]
N2 = (H2-L2)/len1
H3 = highest(high,len)
L3 = lowest(low,len)
N3 = (H3-L3)/len
dimen1 = (log(N1+N2)-log(N3))/log(2)
dimen = iff(N1>0 and N2>0 and N3>0,dimen1,nz(dimen1[1]))
alpha1 = exp(w*(dimen-1))
oldalpha = alpha1>1?1:(alpha1<0.01?0.01:alpha1)
oldN = (2-oldalpha)/oldalpha
N = (((frama_SC-frama_FC)*(oldN-1))/(frama_SC-1))+frama_FC
alpha_ = 2/(N+1)
alpha = alpha_<2/(frama_SC+1)?2/(frama_SC+1):(alpha_>1?1:alpha_)
frama = 0.0
frama :=(1-alpha)*nz(frama[1]) + alpha*src
result := frama
result
// ----------MA calculation - ChartArt and modified by 03.freeman-------------
calc_ma(src,l) =>
_ma = smoothinput=='SMA'?sma(src, l):smoothinput=='EMA'?ema(src, l):smoothinput=='WMA'?wma(src, l):smoothinput=='LinearRegression'?linreg(src, l,0):smoothinput=='VWMA'?vwma(src,l):smoothinput=='RMA'?rma(src, l):smoothinput=='ALMA'?alma(src,l,0.85,6):smoothinput=='SWMA'?swma(src):smoothinput=='FRAMA'?ma(sma(src,1),l):na
//----------------------------------------------
//pi = acos(-1)
// Approximation of Pi in _n terms --- thanks to e2e4mfck
f_pi(_n) =>
_a = 1. / (4. * _n + 2)
_b = 1. / (6. * _n + 3)
_pi = 0.
for _i = _n - 1 to 0
_a := 1 / (4. * _i + 2) - _a / 4.
_b := 1 / (6. * _i + 3) - _b / 9.
_pi := (4. * _a) + (4. * _b) - _pi
pi=f_pi(20)
//---Thanks to xyse----https://www.tradingview.com/script/UTPOoabQ-Low-Frequency-Fourier-Transform/
//Declaration of user-defined variables
N = input(defval=64, title="Lookback Period", type=input.integer, minval=2, maxval=600, confirm=false, step=1, options=[2,4,8,16,32,64,128,256,512,1024,2048,4096])
//Real part of the Frequency Domain Representation
ReX(k) =>
sum = 0.0
for i=0 to N-1
sum := sum + src[i]*cos(2*pi*k*i/N)
return = sum
//Imaginary part of the Frequency Domain Representation
ImX(k) =>
sum = 0.0
for i=0 to N-1
sum := sum + src[i]*sin(2*pi*k*i/N)
return = -sum
//Get sinusoidal amplitude from frequency domain
ReX_(k) =>
case = 0.0
if(k!=0 and k!=N/2)
case := 2*ReX(k)/N
if(k==0)
case := ReX(k)/N
if(k==N/2)
case := ReX(k)/N
return = case
//Get sinusoidal amplitude from frequency domain
ImX_(k) =>
return = -2*ImX(k)/N
//Get full Fourier Transform
x(i, N) =>
sum1 = 0.0
sum2 = 0.0
for k=0 to N/2
sum1 := sum1 + ReX_(k)*cos(2*pi*k*i/N)
for k=0 to N/2
sum2 := sum2 + ImX_(k)*sin(2*pi*k*i/N)
return = sum1+sum2
//Get single constituent sinusoid
sx(i, k) =>
sum1 = ReX_(k)*cos(2*pi*k*i/N)
sum2 = ImX_(k)*sin(2*pi*k*i/N)
return = sum1+sum2
//Calculations for strategy
SLOWMA = plotSMA?calc_ma(close+sx(0,sin1),slowMA):close+sx(0,sin1)
MEDMA = plotSMA?calc_ma(close+sx(0,sin2),mediumMA):close+sx(0,sin2)
FASTMA = plotSMA?calc_ma(close+sx(0,sin3),fastMA):close+sx(0,sin3)
SLOWMA := linearReg?linreg(SLOWMA,linregLenght,linregOffset):SLOWMA
MEDMA := linearReg?linreg(MEDMA,linregLenght,linregOffset):MEDMA
FASTMA := linearReg?linreg(FASTMA,linregLenght,linregOffset):FASTMA
//Plot 3 Low-Freq Sinusoids
plot(SLOWMA, color=color.green)
plot(MEDMA, color=color.red)
plot(FASTMA, color=color.blue)
// Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
// the risk management inputs
inpTakeProfit = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)
// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
longCondition = FASTMA>MEDMA and close > SLOWMA //crossover(FASTMA, MEDMA) and close > SLOWMA
if (longCondition)
strategy.entry("Long Entry", strategy.long)
shortCondition = FASTMA<MEDMA and close < SLOWMA //crossunder(FASTMA, MEDMA) and close < SLOWMA
if (shortCondition)
strategy.entry("Short Entry", strategy.short)
// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Long Entry", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Short Entry", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)