定期定額累積平均価格戦略


作成日: 2023-09-15 16:52:06 最終変更日: 2023-09-15 16:52:06
コピー: 0 クリック数: 645
1
フォロー
1617
フォロワー

この戦略は定期定額累積均等価格戦略と呼ばれています. この戦略は,定期定額購入によって,段階的に目標ポジションに達し,資産の長期保有を実現します.

戦略の仕組みは

  1. 固定購入金額と購入頻度を設定します.
  2. 固定サイクルの間に,設定された金額で定期的に資産を購入する.
  3. 累積保有額が値に達すると,平仓を落とし込みます.
  4. 上記の手順を繰り返して,定期的にポジションを積み重ねる.

具体的には

  1. 固定金額の資産を購入する (例えば200ドル).
  2. 累計保有量が設定値 (例えば200枚) を超えるときは,全額を平仓する.
  3. 定期的な購入のプロセスを再開し,貯蓄を継続する.

この戦略の利点は

  1. 長期保有コストの削減,平均価格による収益化
  2. 引き下げのリスクは低く,ターゲットに追及される高値の買取点はない.
  3. 継続的に実行しやすく,市場を頻繁に観察する必要はありません.

この戦略のリスクは

  1. 短期的な価格変動に対応できない.
  2. 価格が長期にわたって下落すると,損失を招く可能性があります.
  3. 販売のタイミングを間違えたり,最高の出荷場所を見逃したりするかもしれない.

要するに,定期定額戦略は,順次ポジションを建設することによって資産を蓄積し,長線投資家に友好的です.しかし,トレーダーは,大市場のリスクに注意し,市場高点での販売戦略を最適化し,順次平仓によって利益を最大化する必要があります.

ストラテジーソースコード
/*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)