Chiến lược chủ đơn giản

Tác giả:ChaoZhang, Ngày: 2024-01-08 17:05:10
Tags:

img

Tổng quan

Chiến lược Simple Holder là một chiến lược định kỳ mua tiền điện tử và giữ chúng để đạt được sự đánh giá cao tài sản.

Nguyên tắc chiến lược

Logic cơ bản của chiến lược là:

  1. Gửi tín hiệu mua khi bắt đầu để mua đầu tiên.

  2. Gửi tín hiệu mua mỗi số nến nhất định để mua nhiều loại tiền cơ sở hơn bằng cách sử dụng loại tiền báo giá.

  3. Khi số nến đạt đến giá trị đã đặt trước, gửi lệnh thoát để đóng vị trí.

  4. Khi thời gian thoát được đạt đến, gửi tín hiệu thoát để dừng chiến lược và đóng tất cả các vị trí.

Thông qua việc mua và nắm giữ tiền điện tử lặp đi lặp lại, các hiệu ứng của giá trung bình và tăng liên tục các vị trí có thể đạt được.

Phân tích lợi thế

Những lợi thế của chiến lược này là:

  1. Có thể định kỳ mua tiền điện tử để giảm rủi ro thời gian mua.

  2. Có thể giảm chi phí lưu giữ trung bình của tiền điện tử thông qua mua lặp đi lặp lại.

  3. Có thể đạt được lợi nhuận tăng trưởng của danh mục đầu tư thông qua tiếp tục tăng các vị trí.

  4. Thời gian mua và thoát tùy chỉnh cho phép tự động hóa.

  5. Dễ sử dụng và dễ làm chủ.

Phân tích rủi ro

Rủi ro của chiến lược này bao gồm:

  1. Rủi ro có hệ thống của thị trường tiền điện tử với khả năng biến động giá rất lớn.

  2. Thời gian thoát không phù hợp có thể không dừng lỗ kịp thời.

  3. Quản lý vốn không đầy đủ cũng có thể dẫn đến thất bại trong việc chịu lỗ.

Các đề xuất tối ưu hóa

Các khía cạnh sau đây của chiến lược có thể được tối ưu hóa:

  1. Điều chỉnh động số tiền mua và khoảng thời gian theo điều kiện thị trường.

  2. Thêm tín hiệu dừng lỗ để đóng các vị trí khi giá giảm xuống dưới mức hỗ trợ.

  3. Bao gồm nhiều yếu tố để xác định thời gian vào và ra tối ưu.

Tóm lại

Chiến lược Simple Holder đạt được hiệu ứng trung bình hóa chi phí và tăng trưởng danh mục đầu tư thông qua việc mua và nắm giữ tiền điện tử định kỳ. Đây là một chiến lược định lượng tương đối đơn giản một khi sử dụng được thành thạo.


/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 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/
// © Merdoc390

//@version=5

// The idea with this script is to use 3commas DCA bot to keep buying crypto, but not 'close the deal' which sells the crypto. 

// Basic idea is to keep adding funds, which increases the buy. 
// When you cancel the sale, you keep the crypto, thus HODL.
// I use this to build my positions that I short sale on Coinbase.com, so I need to cancel the deal after several candles so I can 
// trade them. 

// 3commas HODL DCA Bot article:
// https://3commas.io/blog/3commas-hodl-dca-bot-strategy
// This article includes the bot setup on 3Commas:
// Basicially you start the trade, then add funds to the trade, buying more crypto, then eventually cancel the deal.
// When you create the bot, you set the take profit really high, like 999%. Since it is unlikey to hit the value, it will never sell


// Credit to Irakli Gun as inspriation
// https://3commas.io/blog/3commas-hodl-dca-bot-strategy

strategy(title='HODL Simple v1', shorttitle="HODL'er", 
 calc_on_every_tick=false, calc_on_order_fills=true, process_orders_on_close =true,
 format=format.price, precision=4, overlay=true, pyramiding=365, 
 currency=currency.USD, default_qty_value=10, default_qty_type=strategy.cash , initial_capital=3650, 
 commission_type=strategy.commission.percent, commission_value=0.1)


var startFirstDeal = true
var done = false
var dealCount = 0
var totalDealCount = 0 


i_closeCount = input.int(defval=7,title="Close at Candle Count:",tooltip="How many buy candles to convert to a buy, otherwise it will remain open until end of timeframe.",group="Trade Range")
Start_date   = input(defval=timestamp('2023-09-21 16:30'),title="Start Date/Time",group="Trade Range")
Finish_date  = input(defval=timestamp('2023-09-21 23:05'),title="End Date/Time",group="Trade Range")

i_startBotAndDealMessage     = input(defval="paste your message here",title="Message to start bot and deal", tooltip="Message for 'start bot and deal",                        group="3Commas",display=display.all) 
i_addFundsMessage            = input(defval="paste your message here",title="Message for deal add funds signal in the quote currency",  tooltip="Using the quote (such as USD), to purchase more.",group="3Commas",display=display.all)
i_cancelTheDealMessage       = input(defval="paste your message here",title="Message to cancel the deal",tooltip="If you paste only cancel the deal, the bot will wait until next candle to add funds.\nOption is to also paste the add funds message to also add a buy position.",       group="3Commas",display=display.all)
i_cancelAndStopMessage       = input(defval="paste your message here",title="Message to cancel all bot deals and stop the bot",tooltip="Paste 3c bot messagage for Cancel all and Stop Bot",     group="3Commas",display=display.all)

time_cond = true

// check exit first
if not startFirstDeal and not done and dealCount < i_closeCount 
    strategy.close("Long")
    alert(i_cancelAndStopMessage)
    // log.info("Time expired, stopping bot, Total Deal Count:{0}",totalDealCount)
    done := true
// check if add funds after first deal
else if time_cond and not startFirstDeal and dealCount < i_closeCount 
    strategy.entry("Long", strategy.long)
    alert(i_addFundsMessage)
    // log.info("Deal Count:{0}, totalDeals:{1}",dealCount,totalDealCount)
    dealCount := dealCount + 1
    totalDealCount := totalDealCount + 1

else if time_cond and startFirstDeal and dealCount <= i_closeCount 
    strategy.entry("Long", strategy.long)
    // log.info("Start deal message, startFirst")
    alert(i_startBotAndDealMessage)
    startFirstDeal := false

else if time_cond and dealCount >= i_closeCount 
    strategy.close("Long")
    alert(i_cancelTheDealMessage)
    // log.info("Over Trades limit of {1}, resetting. Canceling. DealCount: {0}", dealCount, i_closeCount)
    dealCount := 0
    startFirstDeal := true

else if time_cond
    log.error("case not covered")



Thêm nữa