
本策略的核心思想是找到每月最佳的买入日期,通过在这个日期买入数字资产,并在月末卖出,来实现最优的投资回报。该策略适用于希望利用日内价格波动获得超额收益的投资者。
该策略根据用户设置的每月买入日期和卖出日期运行。在买入日期当天开多单买入资产,如果设置了卖出日期,在卖出日期平仓;如果未设置卖出日期,则在策略结束日期当天平仓。这样可以测试每月不同买入日期带来的收益差异。
买入信号的判断逻辑是:如果是用户设置的买入日期,并且在策略生效日期范围内,则开多单。
平仓信号判断逻辑是:如果设置了卖出日期并且是卖出日期,平仓;如果未设置卖出日期但是超出了策略结束日期,也平仓。
买入后价格暴跌的风险
最佳买入日期变化的风险
设置错误导致亏损的风险
结合更多因素确定买入点
优化仓位管理机制
扩展至其他交易市场
本策略通过测试不同买入日期带来的收益差异,寻找每月价格波动最大的买入点。这可以为寻求日内高频交易获利的投资者带来超额收益。下一步通过引入更多判断买入时机的因素、优化仓位管理和扩展应用市场,可以进一步提升策略的稳定性和收益水平。
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1h
basePeriod: 15m
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/
// © dennis.decoene
//@version=4
strategy(title="Buy and Hold, which day of month is best to buy?", overlay=true)
// Make input options that configure backtest date range
startDate = input(title="Start Date", type=input.integer,
defval=1, minval=1, maxval=31, group="Starting From")
startMonth = input(title="Start Month", type=input.integer,
defval=1, minval=1, maxval=12, group="Starting From")
startYear = input(title="Start Year", type=input.integer,
defval=2021, minval=1800, maxval=2100, group="Starting From")
endDate = input(title="End Date", type=input.integer,
defval=2, minval=1, maxval=31, group="Until")
endMonth = input(title="End Month", type=input.integer,
defval=10, minval=1, maxval=12, group="Until")
endYear = input(title="End Year", type=input.integer,
defval=2021, minval=1800, maxval=2100, group="Until")
entryday = input(title="Entry Day", type=input.integer,
defval=26, minval=1, maxval=31, tooltip="When to enter (buy the asset) each month")
exitday = input(title="Exit Day", type=input.integer,
defval=6, minval=1, maxval=31, tooltip="When to exit (sell the asset) each month")
useExitDay= input(title="Close position on exit day?", type=input.bool, defval=false, tooltip="Use the Exit Day to close each months position it true or close at the end of the period (if false)")
isEntryDay= (dayofmonth(time)==entryday)
isExitDay= (dayofmonth(time)==exitday-1)
inDateRange = true
if (isEntryDay and inDateRange)
strategy.entry(id="Buy", long=true)
if (isExitDay and useExitDay)
strategy.close_all()
// Exit open market position when date range ends
if (not inDateRange and not useExitDay)
strategy.close_all()