
Die Hauptidee dieser Strategie ist es, Positionen in einem bullish Markt zu errichten, um das Risiko zu kontrollieren und einen niedrigeren durchschnittlichen Einstiegspreis zu erhalten.
Die Strategie setzt zunächst die Startkapital- und DCA-Prozentsätze fest. Bei jedem K-Linie-Abschluss berechnet sie den Prozentsatz der Ausstattung nach Preisänderungen. Wenn der Preis steigt, senkt sie den Prozentsatz; wenn der Preis fällt, erhöht sie den Prozentsatz. So kann die Position bei niedrigeren Preisen erhöht werden.
Auf diese Weise kann es das Risiko kontrollieren und einen niedrigeren Durchschnittspreis für den Einstieg erhalten, wenn der Markt schwankt. Gleichzeitig wird der Durchschnittspreis und der Mittelpreis für den Einstieg ermittelt, um den aktuellen Einstieg zu beurteilen.
Diese Strategie hat folgende Vorteile:
Sie können dynamisch erhöhen, erhöhen, wenn der Markt sinkt, und reduzieren, wenn der Markt steigt, um das Risiko zu kontrollieren.
Der Durchschnittspreis für die Eintrittskarte ist niedriger als der Mittelpreis, was zu einem höheren Gewinnraum führt.
Das Risiko-Gewinn-Verhältnis ist besser, wenn man sich in einem bullishen Markt bewegt.
Die Startkapital- und DCA-Prozentsätze können vorab eingestellt werden, um die Anzahl der Gelder zu kontrollieren, die bei jeder Verlagerung eingesetzt werden, um ein zu hohes Risiko zu vermeiden.
Die Eintrittspreise werden durchschnittlich und durchschnittlich berechnet, so dass die Eintrittspreise intuitiv ermittelt werden können.
Die Strategie birgt auch Risiken:
Die Strategie wird fortgesetzt, wenn der Markt abstürzt, was zu größeren Verlusten führen kann. Verluststopps können eingesetzt werden, um das Risiko zu kontrollieren.
Bei einem schnellen Anstieg der Marktpreise sinkt die Verlagerung der Strategie und kann einen Großteil der Anstiegsmöglichkeiten verpassen. In diesem Fall müssen andere Signale für einen schnellen LSI verwendet werden.
Eine falsche Einstellung der Parameter birgt auch Risiken. Zu hohe Startkapital und ein zu hoher DCA-Prozentsatz vergrößern den Verlust.
Die Strategie kann auch in folgenden Bereichen optimiert werden:
Es kann eine Stop-Loss-Logik hinzugefügt werden, um die Aufnahme von Positionen bei einem starken Rückgang zu stoppen.
Der DCA-Prozentsatz kann je nach Schwankungen oder anderen Indikatoren dynamisch angepasst werden.
Es können maschinelle Lernmodelle hinzugefügt werden, die Preisschwankungen vorhersagen, um die Anlagerungsentscheidung zu leiten.
In Kombination mit anderen technischen Indikatoren kann die Struktur des Marktes beurteilt werden, um an strukturellen Wendepunkten zu stoppen.
Das Modul zur Vermögensverwaltung kann hinzugefügt werden, um die Höhe der Einlagen pro Einzahlung dynamisch an das Konto anzupassen.
Die Strategie ist eine sehr praktische, dynamische Verlagerungsstrategie. Sie ermöglicht die flexible Anpassung der Positionen an die Schwankungen der Marktbedingungen und ermöglicht einen niedrigeren durchschnittlichen Einstiegspreis in einem Bullenmarkt. Gleichzeitig enthält sie eine integrierte Parameter-Einstellung, um das Risiko zu kontrollieren.
/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © RWCS_LTD
//@version=5
strategy("DCA IN Calculator {RWCS}", overlay=true, pyramiding=999, default_qty_type=strategy.cash, initial_capital=10000, commission_value=0.02)
// User inputs
backtestStartDate = input(timestamp("1 Jan 2024"),
title="Start Date", group="Backtest Time Period",
tooltip="This start date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
start_date = true
starting_capital = input.float(defval=5000, title="Starting Capital")
dca_allocation_percentage = input.int(defval=10, title="DCA Allocation Percentage")
// Calculate DCA allocation based on price change
price_change_percentage = ((close - close[1]) / close[1]) * 100
adjusted_allocation_percentage = close > close[1] ? dca_allocation_percentage - price_change_percentage : dca_allocation_percentage + price_change_percentage // If price action is negative, increase allocations
adjusted_allocation_percentage1 = dca_allocation_percentage - price_change_percentage // If price action is positive, reduce allocations
// Calculate order size based on adjusted allocation percentage
order_size = (adjusted_allocation_percentage / 100) * starting_capital
// Track remaining capital
var remaining_capital = starting_capital
// Long on the close of every bar
if true
// Ensure the order size doesn't exceed remaining capital or adjusted allocation
order_size := math.min(order_size, remaining_capital, adjusted_allocation_percentage / 100 * starting_capital)
// Ensure order size is not negative
order_size := math.max(order_size, 0)
strategy.entry("DCA", strategy.long, qty = order_size)
remaining_capital := remaining_capital - order_size
// Plot average entry price
var float total_entry_price = 0.0
var int total_signals = 0
if start_date
total_entry_price := total_entry_price + close
total_signals := total_signals + 1
avg_entry_price = total_entry_price / total_signals
// Calculate and plot median price
var float median_price = na
if start_date
var float sum_prices = 0.0
var int num_prices = 0
for i = 0 to bar_index
if (time[i] >= backtestStartDate)
sum_prices := sum_prices + close[i]
num_prices := num_prices + 1
median_price := sum_prices / num_prices
// Reset variables at the start of each day
if (dayofweek != dayofweek[1])
total_entry_price := 0.0
total_signals := 0
//table colors
borders_col = color.new(color.black, 90)
top_row_col = color.new(color.gray, 90)
size = input.string(defval='Normal', options=['Tiny', 'Small', 'Normal', 'Large'], title='Table size', inline='design', group='Table Design')
table_size = size == 'Tiny' ? size.tiny : size == 'Small' ? size.small : size == 'Normal' ? size.normal : size == 'Large' ? size.large : na
var tablee = table.new(position=position.top_right, columns=2, rows=3, frame_color=borders_col, frame_width=4, border_color=borders_col, border_width=4)
table.cell(tablee, 0, 0, "Average Entry Price", bgcolor=top_row_col, text_color=color.white, text_size=table_size)
table.cell(tablee, 1, 0, str.tostring(avg_entry_price, '#.##'), text_color=color.white, text_size=table_size)
table.cell(tablee, 0, 1, "Median Price", bgcolor=top_row_col, text_color=color.white, text_size=table_size)
table.cell(tablee, 1, 1, str.tostring(median_price, '#.##'), text_color=color.white, text_size=table_size)
table.cell(tablee, 0, 2, "Remaining Capital", bgcolor=top_row_col, text_color=color.white, text_size=table_size)
table.cell(tablee, 1, 2, str.tostring(remaining_capital, '#.##'), text_color=color.white, text_size=table_size)