This strategy is called the Dollar Cost Averaging Strategy. It aims to accumulate a target position size through periodic fixed-amount purchases, enabling long-term holdings.
How it works:
Typical workflow:
Advantages of this strategy:
Risks of this strategy:
In summary, the dollar cost averaging strategy accumulates assets through batched buys, friendly to long-term investors. But traders still need to watch out for broad market risks and optimize exit strategies to maximize profits through batched sells at highs.
/*backtest start: 2022-09-08 00:00:00 end: 2023-09-14 00:00:00 period: 1d basePeriod: 1h 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/ // © tanoshimooo //@version=5 strategy ("DCA", initial_capital=44700, overlay=true) // To start script at a given date tz = 0 //timezone timeadj = time + tz * 60 * 60 * 1000 //adjust the time (unix) t1 = timeadj >= timestamp(2003, 03, 01, 0, 0) ? 1 : 0 //get the starting time // Variables var float lastRef = na if barstate.isfirst lastRef := close var float cash = 50000 // available money var float sell_contracts = na var bool first_trade_done = false // Parameters var float sell_min = 200 //200 sell more than sell_min or sell all var float buy_dollars = 200 var int bi = 90 // LONGS // if bar_index < bi strategy.order("Long", strategy.long, int(buy_dollars/close)) cash := cash - int(buy_dollars/close)*close // label.new(bar_index, na, na, xloc.bar_index, yloc.abovebar, color.blue, label.style_triangleup, color.blue, size.tiny) //plot(cash) // SHORTS // if longExit // if (strategy.position_size*sf*close > sell_min) and (strategy.position_size*sf >= 1) // strategy.order ("Long", strategy.short, strategy.position_size*sf) // cash := cash + strategy.position_size*sf*close // else // strategy.order ("Long", strategy.short, strategy.position_size) // cash := cash + strategy.position_size*close // lastRef := close // label.new(bar_index, na, na, xloc.bar_index, yloc.belowbar, color.red, label.style_triangledown, color.red, size.tiny) if bar_index == last_bar_index - 2 // bi strategy.order ("Long", strategy.short, strategy.position_size)