
Diese Strategie basiert auf den technischen Indikatoren des Moving Averages und der Transaktionsmenge und entwirft eine quantitative Strategie, um die Verringerung der Absenkung zu verhindern. Wenn der Aktienpreis auf der 20-Tage-Linie steht und die Kaufmenge an diesem Tag größer ist als die Verkaufsmenge und größer als die durchschnittliche Transaktionsmenge der letzten n Tage, wird angenommen, dass der Markt in einer Mehrkopf-Zustand ist, der Kauf; Wenn der Aktienpreis aus der Bahn gerät und die Verkaufsmenge an diesem Tag größer ist als die Kaufmenge und größer als die durchschnittliche Transaktionsmenge der letzten n Tage, wird angenommen, dass der Markt in einer Leerkopf-Zustand ist, der Verkauf.
Die Strategie basiert auf zwei Indikatoren:
Bei der Berechnung der 20-Tage- und der 60-Tage-Linie gilt der Markt als bullish, wenn die 20-Tage-Linie die 60-Tage-Linie überschreitet.
Umsatz: Berechnung des Kauf- und Verkaufsaufvolumens pro Tag. Wenn der Kauf über dem Verkauf liegt und über dem Durchschnitt der letzten n Tage liegt, wird er als mehrköpfig beurteilt. Wenn der Verkauf über dem Kauf liegt und über dem Durchschnitt der letzten n Tage liegt, wird er als leer beurteilt.
Die Strategie und die Logik des Handelns sind wie folgt:
Mehrköpfiger Eintritt: Wenn der Schlusskurs auf der 20-Tage-Linie steht und die Kaufmenge an diesem Tag größer ist als die Verkaufsmenge und die durchschnittliche Handelsmenge der letzten n Tage, wird der Markt als in einem bullishen Zustand betrachtet. Der Brinband wird anhand der Schwankungen berechnet, und wenn der Schlusskurs zwischen der mittleren und der unteren Bahn des Brinbands liegt, wird ein Eintritt gemacht.
Leerlauf-Eintritt: Wenn der Schlusskurs unter die Trennlinie fällt und die Verkaufsmenge am Tag größer ist als die Kaufmenge und die durchschnittliche Handelsmenge der letzten n Tage, wird der Markt als leer angesehen. Der Brin-Band wird anhand der Schwankungen berechnet. Wenn der Schlusskurs unter der Trennlinie liegt, wird der Eintritt leer gemacht.
Stopps und Verluste: Setzen Sie angemessene Stopps und Verluste, um Gewinne zu erzielen oder Verluste zu verringern. Stopps werden eingesetzt, wenn der Kurs um 5% höher ist als der Einstiegspreis. Stopps werden eingesetzt, wenn die Verluste 10% erreichen.
Diese Strategie hat folgende Vorteile:
Durch die Kombination von Doppel-Mittellinien und Volumenindikatoren wird die Blindzone eines einzigen technischen Indikators vermieden.
Die Brin-Streifen, die verschiedene Parameter verwenden, um den spezifischen Handelspreis zu bestimmen, machen den Einstieg präziser.
Stop-Loss-Strategien sind sinnvoll, um Gewinne zu sichern und Risiken zu kontrollieren.
Die Rückmeldung ist gut, die Erträge sind stabil und können praktisch für quantitative Transaktionen verwendet werden.
Die Strategie birgt auch einige Risiken:
Die Doppel-Gleichlinien-Strategie ist anfällig für Fehlsignale und erfordert die Filterung der kombinierten Energieindikatoren.
Eine falsche Einstellung der Brin-Band-Parameter kann zu zu häufigen oder seltenen Eintritten führen.
Die Fixed Stop Loss-Punkte sind falsch eingestellt und können die strategischen Gewinne beeinträchtigen.
Es wird eine große Menge an historischen Daten benötigt, um sie zu überprüfen, und es kann zu unerwarteten Verlusten in der Festplatte kommen.
Diese Strategie kann in folgenden Bereichen optimiert werden:
Optimierung der Parameter eines Gleichgewichtssystems und Suche nach der optimalen Gleichgewichtskombination.
Optimierung der Brin-Band-Parameter, um den Einstieg präziser zu machen.
Dynamische Anpassung der Stop-Loss-Punkte und die Festlegung eines angemessenen Gewinn- und Verlustverhältnisses in Abhängigkeit von der Marktlage.
Weitere technische Indikatoren wie MACD, KD usw. wurden hinzugefügt, um die Strategie-Genauigkeit zu verbessern.
Die Automatisierung von Parametern, die die Strategie robuster machen, erfolgt durch die Nutzung von maschinellen Lernverfahren.
Diese Strategie ist insgesamt eine sehr praktische Quantitative Trading-Strategie, die sich gut erweist, leicht umzusetzen ist, das Risiko ist kontrollierbar, eine stabile Strategie, die sich für den realen Markt eignet und die es wert ist, von Quantitative Tradern zu lernen. Natürlich gibt es noch viel Raum für die Optimierung der Strategie, und es wird erwartet, dass weitere Quantitative Trading-Experten sie verbessern werden.
/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00: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/
// © KAIST291
//@version=4
strategy("prototype",initial_capital=0.01,commission_type=strategy.commission.percent,commission_value=0.1, format=format.volume, precision=0,overlay=true)
// SETTING //
length1=input(1)
length3=input(3)
length7=input(7)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
ma14=sma(close,length14)
ma20=sma(close,length20)
ma60=sma(close,length60)
ma120=sma(close,length120)
rsi=rsi(close,14)
// BUYING VOLUME AND SELLING VOLUME //
BV = iff( (high==low), 0, volume*(close-low)/(high-low))
SV = iff( (high==low), 0, volume*(high-close)/(high-low))
vol = iff(volume > 0, volume, 1)
dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100)
weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100)
//-----------------------------------------------------------
Davgvol = sma(volume, dailyLength)
Wavgvol = sma(volume, weeklyLength)
//-----------------------------------------------------------
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
mult2= input(1.5, minval=0.001, maxval=50, title="exp")
mult3= input(1.0, minval=0.001, maxval=50, title="exp1")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
dev2= mult2 * stdev(src, length)
Supper= basis + dev2
Slower= basis - dev2
dev3= mult3 * stdev(src, length)
upper1= basis + dev3
lower1= basis - dev3
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
//----------------------------------------------------
exit=(close-strategy.position_avg_price / strategy.position_avg_price*100)
bull=(close>Supper and BV>SV and BV>Davgvol)
bull2=(close>ma20 and BV>SV and BV>Davgvol)
bux =(close<Supper and close>Slower and volume<Wavgvol)
bear=(close<Slower and close<lower and SV>BV and SV>Wavgvol)
hi=highest(exit,10)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>ma3 and ma20>ma60 and rsi<70)
strategy.entry("Long",strategy.long,0.1)
if (strategy.position_avg_price*1.05<close)
strategy.close("Long",0.1)
else if (highestPriceAfterEntry*0.999<close and close>strategy.position_avg_price*1.002)
strategy.close("Long",0.1)
else if (highestPriceAfterEntry*0.997<close and close>strategy.position_avg_price*1.002)
strategy.close("Long",0.1)
else if (highestPriceAfterEntry*0.995<close and close>strategy.position_avg_price*1.002)
strategy.close("Long",0.1)
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
strategy.close("Long",0.1)
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////