
Die Strategie ist ein Kauf-nur-Trading-System, das ein Kaufsignal erzeugt, das auf einer Kreuzung des Moving Average und dem Cyclic Commodity Channel Index (CCI) oder dem Cyclic Average Directional Index (ADX) basiert. Es wird ein Kaufsignal erzeugt, wenn ein schneller Moving Average auf einem schnellen Moving Average durchquert wird und die cyclic CCI und/oder die cyclic ADX bestimmte Bedingungen erfüllen.
Die Strategie erlaubt auch einen dynamischen Wiedereintritt, was bedeutet, dass ein neuer Mehrheitshandel eröffnet werden kann, wenn der Preis die drei Moving Averages erneut durchbricht. Die Strategie wird jedoch den Mehrheitshandel ausgleichen, wenn der Preis bei der Schließung den dritten Moving Average überschreitet.
Das Skript definiert die Bedingungen, unter denen ein Kaufsignal erzeugt wird. Es prüft zwei Bedingungen, um ein gültiges Kaufsignal zu beurteilen:
Das ist eine sehr schwierige Aufgabe.Wenn es keine ungeklärten Positionen gibt und der Preis über drei Moving Averages liegt, wird eine neue Position eröffnet.
Bedingungen für den Ausstieg:Die Strategie schließt die Mehrkopf-Position aus, wenn die Schlusskurslinie unter den dritten Moving Average fällt.
Diese Strategie hat folgende Vorteile:
Die Strategie birgt auch folgende Risiken:
Entsprechende Lösungen:
Diese Strategie kann in folgenden Bereichen optimiert werden:
Die dynamische Rückkauf-Kauf-Strategie integriert mehrere technische Indikatoren, um die Kaufzeit zu bestimmen, und verwendet eine dynamische Rückkauf-Konstruktion, um den Trend in Echtzeit zu verfolgen; und vermeidet zusätzliche Risiken durch Leerlauf. Durch Parameteroptimierung, Stop-Loss-Einstellung und Positionsverwaltung kann die Strategie im Realhandel eingesetzt werden, um zusätzliche Gewinne zu erzielen, während das Risiko kontrolliert wird.
/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Buy Only Strategy with Dynamic Re-Entry and Exit", overlay=true)
// Input Parameters
fast_length = input(20, title="Fast Moving Average Length")
slow_length = input(30, title="Slow Moving Average Length")
third_ma_length = input(100, title="Third Moving Average Length")
cci_period = input(14, title="CCI Period for Weekly CCI")
use_cci = input(true, title="Use CCI for Entry")
use_adx = input(true, title="Use ADX for Entry")
adx_length = input(14, title="ADX Length")
adx_threshold = input(25, title="ADX Threshold")
// Calculate Moving Averages
fast_ma = ta.sma(close, fast_length)
slow_ma = ta.sma(close, slow_length)
third_ma = ta.sma(close, third_ma_length)
// Weekly Commodity Channel Index (CCI) with user-defined period
weekly_cci = request.security(syminfo.tickerid, "W", ta.cci(close, cci_period))
// Weekly Average Directional Index (ADX)
dirmov = hlc3
plus = ta.change(dirmov) > 0 ? ta.change(dirmov) : 0
minus = ta.change(dirmov) < 0 ? -ta.change(dirmov) : 0
trur = ta.rma(ta.tr, adx_length)
plusDI = ta.rma(plus, adx_length) / trur * 100
minusDI = ta.rma(minus, adx_length) / trur * 100
sum = plusDI + minusDI
DX = sum == 0 ? 0 : math.abs(plusDI - minusDI) / sum * 100
ADX = ta.rma(DX, adx_length)
// Entry Conditions (Buy Only and Weekly CCI > 100 and/or Weekly ADX > 25)
cci_condition = use_cci ? (weekly_cci > 100) : false
adx_condition = use_adx ? (ADX > adx_threshold) : false
long_condition = ta.crossover(fast_ma, slow_ma) and (cci_condition or adx_condition)
// Exit Condition and Dynamic Re-Entry
exit_condition = close < third_ma
re_entry_condition = close > fast_ma and close > slow_ma and close > third_ma and weekly_cci > 100
// Entry and Exit Signals
strategy.entry("Long", strategy.long, when=long_condition)
strategy.close("Long", when=exit_condition)
// Dynamic Re-Entry and Exit
if strategy.position_size == 0 and re_entry_condition
strategy.entry("Long", strategy.long)
if strategy.position_size > 0 and close < third_ma
strategy.close("Long")
// Plot Weekly CCI and ADX for reference
plot(weekly_cci, title="Weekly CCI", color=color.orange)
plot(ADX, title="Weekly ADX", color=color.blue)