
Die Strategie ist eine komplexe Dynamik-Breakthrough-Strategie, die mehrere technische Indikatoren kombiniert, um zu beurteilen, wie man in verschiedene Richtungen und Phasen eintritt, um das Ziel des Arbitrages zu erreichen.
Die Strategie kombiniert den MACD-Dynamik-Indikator, den RSI-Überkauf-Überverkauf-Indikator und den Brin-Band, um eine hohe Richtung zu bestimmen. Wenn die MACD-Linie über 0 und der RSI unter der Überverkauf-Linie ist, ist dies ein mehrköpfiges Signal, und wenn die MACD-Linie unter 0 und der RSI über der Überkauf-Linie ist, ist dies ein hohes Signal.
In der konkreten Umsetzung, die Strategie zuerst zu beurteilen MACD-Linie und RSI-Performance, um die Grundlagen zu bestätigen; Dann nach Bollinger Bands auf der Bahn und nach unten durchbruch, nehmen Sie eine unterschiedliche Anzahl von Batch-Positionen. In der mehrköpfigen Phase, wird in der Nähe von Bollinger Bands auf der Bahn nach und nach zu erhöhen, erhöhen die Positionen immer größer; in der leeren Phase, wird in der Nähe von Bollinger Bands auf der Bahn nach und nach zu leeren, und die Leerlage wird auch allmählich vergrößert.
Die Strategie kombiniert auch die Verfolgung von Höchst- und Tiefpreisen, um Stop-Losses und Stop-Stops einzurichten und die Bestellungen entsprechend zu verwalten. Insgesamt verwendet die Strategie mehrere Analyse-Tools, um durch Batch-Arbitrage eine bessere Rendite zu erzielen.
Ein Brin-Band-Abschwellen ist kein zuverlässiges Handelssignal. Es besteht die Gefahr, dass ein falsches Signal auftritt. Es kann in Erwägung gezogen werden, andere Kennzahlen zu verwenden, um dies zu bestätigen, z. B. K-Linienform, Transaktionsvolumen usw.
Eine schrittweise Aufstockung erfordert eine genaue Beherrschung der Marktdynamik, die bei einem schnellen Umschwung zu großen Verlusten führen kann. Die Anzahl der Auflagerungen kann angemessen reduziert oder ein lockerer Stop-Loss-Punkt gesetzt werden.
Es ist notwendig, auf die Liquidität der Handelssorten zu achten, da die Sorten mit geringer Liquidität nicht in einer größeren Anzahl von Arbitrage eingesetzt werden sollten.
Die Rücklaufdaten sind nicht gleichbedeutend mit der Festplatte, die Festplattengebühren und die Kosten für Gleitpunkte müssen berücksichtigt werden. Die Stop-Loss-Grenze kann entsprechend gelockert werden.
Verschiedene Kombinationen von Parametern, wie z. B. Brin-Band-Perioden, Standarddifferenz-Multiplikatoren und RSI-Parameter, können getestet werden, um die optimale Parameter zu finden.
Es können andere Arbitrage-Methoden wie Fixed Fraction, Kelly-Kriterium und andere Geldmanagementstrategien erforscht werden.
Dynamische Optimierung von Parametern, die mit Methoden wie maschinellem Lernen kombiniert werden können.
Es ist möglich, weitere Datenquellen zu integrieren, um die Marktentwicklung zu beurteilen, wie z. B. Text-Sentiment-Analysen oder soziale Daten.
Es ist möglich, die Zeitdifferenz zwischen den Futures-Preisen zu erforschen, um die Gewinnspanne weiter zu erweitern.
Die Strategie verwendet mehrere technische Indikatoren, erfolgt in Form von Schlacht-Arbitrage, Set-up-Stop-Loss-Stop-Stop-Management-Risiken, ist eine vollständige Trend-Tracking-Strategie. Es besteht jedoch die Gefahr, dass falsche Signale und schnelle Umstellungen vorgewarnt werden müssen. Die richtige Anpassung der Parameter und die Art und Weise der Geldverwaltung ermöglicht einen stabileren Überschuss. Die Performance dieser Strategie kann verbessert werden, wenn weitere Methoden wie die Kombination von Machine Learning mit dynamischer Optimierung kombiniert werden.
/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title="Incremental Order size +", shorttitle="Strategy", overlay=true, default_qty_value=1, pyramiding=10)
//Heiken Ashi
isHA = input(false, "HA Candles", bool)
//MACD
fastLength = 12
slowlength = 26
MACDLength = 9
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
//Bollinger Bands Exponential
src = open
len = 18
e = ema(src,len)
evar = (src - e)*(src - e)
evar2 = (sum(evar,len))/len
std = sqrt(evar2)
Multiplier = input(3, minval = 0.01, title = "# of STDEV's")
upband = e + (Multiplier * std)
dnband = e - (Multiplier * std)
//EMA
ema3 = ema(close, 3)
//RSIplot
length = 45
overSold = 90
overBought = 10
price = close
vrsi = rsi(price, length)
notna = not na(vrsi)
macdlong = crossover(delta, 0)
macdshort = crossunder(delta, 0)
rsilong = notna and crossover(vrsi, overSold)
rsishort = notna and crossunder(vrsi, overBought)
lentt = input(14, "Pivot Length")
//The length defines how many periods a high or low must hold to be a "relevant pivot"
h = highest(lentt)
//The highest high over the length
h1 = dev(h, lentt) ? na : h
//h1 is a pivot of h if it holds for the full length
hpivot = fixnan(h1)
//creates a series which is equal to the last pivot
l = lowest(lentt)
l1 = dev(l, lentt) ? na : l
lpivot = fixnan(l1)
//repeated for lows
last_hpivot = h1 ? time : nz(last_hpivot[1])
last_lpivot = l1 ? time : nz(last_lpivot[1])
long_time = last_hpivot > last_lpivot ? 0:1
//FIBS
z = input(100, "Z-Index")
p_offset= 2
transp = 60
a=(lowest(z)+highest(z))/2
b=lowest(z)
c=highest(z)
fibonacci = input(0, "Fibonacci") / 100
//Fib Calls
fib0 = (((hpivot - lpivot)* fibonacci) + lpivot)
fib1 = (((hpivot - lpivot)*.21) + lpivot)
fib2 = (((hpivot - lpivot)*.3) + lpivot)
fib3 = (((hpivot - lpivot)*.5) + lpivot)
fib4 = (((hpivot - lpivot)*.62) + lpivot)
fib5 = (((hpivot - lpivot)*.7) + lpivot)
fib6 = (((hpivot - lpivot)* 1.00) + lpivot)
fib7 = (((hpivot - lpivot)* 1.27) + lpivot)
fib8 = (((hpivot - lpivot)* 2) + lpivot)
fib9 = (((hpivot - lpivot)* -.27) + lpivot)
fib10 = (((hpivot - lpivot)* -1) + lpivot)
//Heiken Ashi Candles
data2 = isHA ? heikenashi(syminfo.tickerid) : syminfo.tickerid
res5 = input("5", "Resolution")
//HT Fibs
hfib0 = security(data2, res5, fib0[1])
hfib1 = security(data2, res5, fib1[1])
hfib2 = security(data2, res5, fib2[1])
hfib3 = security(data2, res5, fib3[1])
hfib4 = security(data2, res5, fib4[1])
hfib5 = security(data2, res5, fib5[1])
hfib6 = security(data2, res5, fib6[1])
hfib7 = security(data2, res5, fib7[1])
hfib8 = security(data2, res5, fib8[1])
hfib9 = security(data2, res5, fib9[1])
hfib10 = security(data2, res5, fib10[1])
vrsiup = vrsi > vrsi[1] and vrsi[1] > vrsi[2]
vrsidown = vrsi < vrsi[1] and vrsi[1] < vrsi[2]
long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long2 = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short2 = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
reverseOpens = input(false, "Reverse Orders", bool)
if (reverseOpens)
tmplong = long
long := short
short := tmplong
//Strategy
ts = input(99999, "TS")
tp = input(30, "TP")
sl = input(10, "SL")
last_long = long ? time : nz(last_long[1])
last_short = short ? time : nz(last_short[1])
in_long = last_long > last_short
in_short = last_short > last_long
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
last_open_long = long ? open : nz(last_open_long[1])
last_open_short = short ? open : nz(last_open_short[1])
last_open_long_signal = long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal = short_signal ? open : nz(last_open_short_signal[1])
last_high = not in_long ? na : in_long and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low = not in_short ? na : in_short and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
long_ts = not na(last_high) and high <= (last_high - ts) and high >= last_open_long_signal
short_ts = not na(last_low) and low >= (last_low + ts) and low <= last_open_short_signal
long_tp = high >= (last_open_long + tp) and long[1] == 0
short_tp = low <= (last_open_short - tp) and short[1] == 0
long_sl = low <= (last_open_long - sl) and long[1] == 0
short_sl = high >= (last_open_short + sl) and short[1] == 0
last_hfib_long = long_signal ? fib1 : nz(last_hfib_long[1])
last_hfib_short = short_signal ? fib5 : nz(last_hfib_short[1])
last_fib7 = long ? fib7 : nz(last_fib7[1])
last_fib10 = long ? fib10 : nz(last_fib10[1])
last_fib8 = short ? fib8 : nz(last_fib8[1])
last_fib9 = short ? fib9 : nz(last_fib9[1])
last_long_signal = long_signal ? time : nz(last_long_signal[1])
last_short_signal = short_signal ? time : nz(last_short_signal[1])
last_long_tp = long_tp ? time : nz(last_long_tp[1])
last_short_tp = short_tp ? time : nz(last_short_tp[1])
last_long_ts = long_ts ? time : nz(last_long_ts[1])
last_short_ts = short_ts ? time : nz(last_short_ts[1])
long_ts_signal = crossover(last_long_ts, last_long_signal)
short_ts_signal = crossover(last_short_ts, last_short_signal)
last_long_sl = long_sl ? time : nz(last_long_sl[1])
last_short_sl = short_sl ? time : nz(last_short_sl[1])
long_tp_signal = crossover(last_long_tp, last_long)
short_tp_signal = crossover(last_short_tp, last_short)
long_sl_signal = crossover(last_long_sl, last_long)
short_sl_signal = crossover(last_short_sl, last_short)
last_long_tp_signal = long_tp_signal ? time : nz(last_long_tp_signal[1])
last_short_tp_signal = short_tp_signal ? time : nz(last_short_tp_signal[1])
last_long_sl_signal = long_sl_signal ? time : nz(last_long_sl_signal[1])
last_short_sl_signal = short_sl_signal ? time : nz(last_short_sl_signal[1])
last_long_ts_signal = long_ts_signal ? time : nz(last_long_ts_signal[1])
last_short_ts_signal = short_ts_signal ? time : nz(last_short_ts_signal[1])
true_long_signal = long_signal and last_long_sl_signal > last_long_signal[1] or long_signal and last_long_tp_signal > last_long_signal[1] or long_signal and last_long_ts_signal > last_long_signal[1]
true_short_signal = short_signal and last_short_sl_signal > last_short_signal[1] or short_signal and last_short_tp_signal > last_short_signal[1] or short_signal and last_short_ts_signal > last_short_signal[1]
// strategy.entry("BLUE", strategy.long, when=long)
// strategy.entry("RED", strategy.short, when=short)
g = delta > 0 and vrsi < overSold and vrsiup
r = delta < 0 and vrsi > overBought and vrsidown
long1 = cross(close, fib1) and g and last_long_signal[1] > last_short_signal// and last_long_signal > long
short1 = cross(close, fib5) and r and last_short_signal[1] > last_long_signal// and last_short_signal > short
last_long1 = long1 ? time : nz(last_long1[1])
last_short1 = short1 ? time : nz(last_short1[1])
last_open_long1 = long1 ? open : nz(last_open_long1[1])
last_open_short1 = short1 ? open : nz(last_open_short1[1])
long1_signal = crossover(last_long1, last_long_signal)
short1_signal = crossover(last_short1, last_short_signal)
last_long1_signal = long1_signal ? time : nz(last_long1_signal[1])
last_short1_signal = short1_signal ? time : nz(last_short1_signal[1])
long2 = cross(close, fib2) and g and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short2 = cross(close, fib4) and r and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long2 = long2 ? time : nz(last_long2[1])
last_short2 = short2 ? time : nz(last_short2[1])
last_open_short2 = short2 ? open : nz(last_open_short2[1])
long2_signal = crossover(last_long2, last_long1_signal) and long1_signal==0
short2_signal = crossover(last_short2, last_short1_signal) and short1_signal==0
last_long2_signal = long2_signal ? time : nz(last_long2_signal[1])
last_short2_signal = short2_signal ? time : nz(last_short2_signal[1])
//Trade 4
long3 = cross(close, fib3) and g and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short3 = cross(close, fib3) and r and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long3 = long3 ? time : nz(last_long3[1])
last_short3 = short3 ? time : nz(last_short3[1])
last_open_short3 = short3 ? open : nz(last_open_short3[1])
long3_signal = crossover(last_long3, last_long2_signal) and long2_signal==0
short3_signal = crossover(last_short3, last_short2_signal) and short2_signal==0
last_long3_signal = long3_signal ? time : nz(last_long3_signal[1])
last_short3_signal = short3_signal ? time : nz(last_short3_signal[1])
//Trade 5
long4 = long and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short4 = short and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long4 = long4 ? time : nz(last_long4[1])
last_short4 = short4 ? time : nz(last_short4[1])
long4_signal = crossover(last_long4, last_long3_signal) and long2_signal==0 and long3_signal==0
short4_signal = crossover(last_short4, last_short3_signal) and short2_signal==0 and short3_signal==0
last_long4_signal = long4_signal ? time : nz(last_long4_signal[1])
last_short4_signal = short4_signal ? time : nz(last_short4_signal[1])
//Trade 6
long5 = long and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short5 = short and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long5 = long5 ? time : nz(last_long5[1])
last_short5 = short5 ? time : nz(last_short5[1])
long5_signal = crossover(last_long5, last_long4_signal) and long3_signal==0 and long4_signal==0
short5_signal = crossover(last_short5, last_short4_signal) and short3_signal==0 and short4_signal==0
last_long5_signal = long5_signal ? time : nz(last_long5_signal[1])
last_short5_signal = short5_signal ? time : nz(last_short5_signal[1])
//Trade 7
long6 = long and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short6 = short and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long6 = long6 ? time : nz(last_long6[1])
last_short6 = short6 ? time : nz(last_short6[1])
long6_signal = crossover(last_long6, last_long5_signal) and long2_signal==0 and long4_signal==0 and long5_signal==0
short6_signal = crossover(last_short6, last_short5_signal) and short2_signal==0 and short4_signal==0 and short5_signal==0
last_long6_signal = long6_signal ? time : nz(last_long6_signal[1])
last_short6_signal = short6_signal ? time : nz(last_short6_signal[1])
//Trade 8
long7 = long and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short7 = short and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long7 = long7 ? time : nz(last_long7[1])
last_short7 = short7 ? time : nz(last_short7[1])
long7_signal = crossover(last_long7, last_long6_signal) and long2_signal==0 and long4_signal==0 and long5_signal==0 and long6_signal==0
short7_signal = crossover(last_short7, last_short6_signal) and short2_signal==0 and short4_signal==0 and short5_signal==0 and short6_signal==0
last_long7_signal = long7_signal ? time : nz(last_long7_signal[1])
last_short7_signal = short7_signal ? time : nz(last_short7_signal[1])
//Trade 9
long8 = long and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short8 = short and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long8 = long8 ? time : nz(last_long8[1])
last_short8 = short8 ? time : nz(last_short8[1])
long8_signal = crossover(last_long8, last_long7_signal) and long2_signal==0 and long4_signal==0 and long5_signal==0 and long6_signal==0 and long7_signal==0
short8_signal = crossover(last_short8, last_short7_signal) and short2_signal==0 and short4_signal==0 and short5_signal==0 and short6_signal==0 and short7_signal==0
last_long8_signal = long8_signal ? time : nz(last_long8_signal[1])
last_short8_signal = short8_signal ? time : nz(last_short8_signal[1])
//Trade 10
long9 = long and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short9 = short and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long9 = long9 ? time : nz(last_long9[1])
last_short9 = short9 ? time : nz(last_short9[1])
long9_signal = crossover(last_long9, last_long8_signal) and long2_signal==0 and long4_signal==0 and long5_signal==0 and long6_signal==0 and long7_signal==0 and long8_signal==0
short9_signal = crossover(last_short9, last_short8_signal) and short2_signal==0 and short4_signal==0 and short5_signal==0 and short6_signal==0 and short7_signal==0 and short8_signal==0
last_long9_signal = long9_signal ? time : nz(last_long9_signal[1])
last_short9_signal = short9_signal ? time : nz(last_short9_signal[1])
strategy.entry("Long", strategy.long, qty=1, when=long_signal)
strategy.entry("Short", strategy.short, qty=1, when=short_signal)
strategy.entry("Long", strategy.long, qty=2, when=long1_signal)
strategy.entry("Short1", strategy.short, qty=2, when=short1_signal)
strategy.entry("Long", strategy.long, qty=4, when=long2_signal)
strategy.entry("Short2", strategy.short, qty=4, when=short2_signal)
strategy.entry("Long", strategy.long, qty=8, when=long3_signal)
strategy.entry("Short3", strategy.short, qty=8, when=short3_signal)
strategy.entry("Long", strategy.long, qty=5, when=long4_signal)
strategy.entry("Short", strategy.short, qty=5, when=short4_signal)
strategy.entry("Long", strategy.long, qty=6, when=long5_signal)
strategy.entry("Short", strategy.short, qty=6, when=short5_signal)
strategy.entry("Long", strategy.long, qty=7, when=long6_signal)
strategy.entry("Short", strategy.short, qty=7, when=short6_signal)
strategy.entry("Long", strategy.long, qty=8, when=long7_signal)
strategy.entry("Short", strategy.short, qty=8, when=short7_signal)
strategy.entry("Long", strategy.long, qty=9, when=long8_signal)
strategy.entry("Short", strategy.short, qty=9, when=short8_signal)
strategy.entry("Long", strategy.long, qty=10, when=long9_signal)
strategy.entry("Short", strategy.short, qty=10, when=short9_signal)
short1_tp = low <= (last_open_short1 - tp) and short1[1] == 0
short2_tp = low <= (last_open_short2 - tp) and short2[1] == 0
short3_tp = low <= (last_open_short3 - tp) and short3[1] == 0
short1_sl = high >= (last_open_short1 + sl) and short1[1] == 0
short2_sl = high >= (last_open_short2 + sl) and short2[1] == 0
short3_sl = high >= (last_open_short3 + sl) and short3[1] == 0
close_long = cross(close, fib6)
close_short = cross(close, fib0)
// strategy.close("Long", when=close_long)
// strategy.close("Long", when=long_tp)
// strategy.close("Long", when=long_sl)
// strategy.close("Short", when=long_signal)
// strategy.close("Short1", when=long_signal)
// strategy.close("Short2", when=long_signal)
// strategy.close("Short3", when=long_signal)
strategy.close("Short", when=short_tp)
strategy.close("Short1", when=short1_tp)
strategy.close("Short2", when=short2_tp)
strategy.close("Short3", when=short3_tp)
strategy.close("Short", when=short_sl)
strategy.close("Short1", when=short1_sl)
strategy.close("Short2", when=short2_sl)
strategy.close("Short3", when=short3_sl)