月初买入月末平仓策略

Author: ChaoZhang, Date: 2023-11-02 14:23:40
Tags:

月初买入月末平仓策略

该策略的核心思想是每月的第一个交易日开仓做多,最后一个交易日平仓。这是一个非常简单的策略,主要用于教学演示。

策略原理

该策略首先定义了每月的第一个交易日(星期一)作为开仓信号,最后一个交易日(星期五)作为平仓信号。

在开仓时,如果开启了仅做多设置,则直接做多;如果允许做空,则同时开仓做多做空。

在平仓时,如果允许做空,则平掉全部头寸;如果仅做多,则仅平掉做多头寸。

为了控制风险,策略还加入了一个简单的止损设置。当价格触及止损价时,强制平仓止损。

总体来说,该策略思路非常简单直白,属于最基础的月度交易策略,适合用来教学演示。实际运用中,可根据自己需要对入场出场信号、止损方式等进行优化。

策略优势

  1. 思路简单直白,非常适合初学者学习。

  2. 采用月度持仓,操作频率低,适合追求稳定的投资者。

  3. 做多做空可选,可满足不同风格的交易者。

  4. 加入止损功能,可以一定程度控制个股风险。

策略风险

  1. 入场出场时间固定,无法根据市场状态调整,存在被套利的可能。

  2. 没有加入量化指标判断,存在盲目跟踪的风险。

  3. 单一股票止损容易被突破,无法有效控制 Tail Risk。

  4. 仓位固定,无法根据市场情况调整仓位。

  5. 成交不确定性可能导致无法完全按策略执行。

  6. 简单的止损方式可能导致小止损,应采用 volatility stop 等动态止损。

策略优化方向

  1. 可以引入量化指标判断市场状态,动态调整开仓节奏。

  2. 考虑对标基准指数,判断个股相对强弱选择入场。

  3. 根据市场波动率等风险指标动态调整仓位。

  4. 采用动态止损,或许多层次止损。

  5. 加入算法交易模块,确保交易信号可以成交。

  6. 优化资金管理策略,不同市场环境调整股指期货仓位。

  7. 结合机器学习判断个股质量,选择入场个股。

总结

该策略是一个非常基础的月初买入月末平仓策略,逻辑简单,容易理解,适合初学者学习。但实际运用时,需要对入场出场时间、止损方式、仓位管理等进行优化,才能在复杂多变的市场中持续盈利。我们要深入理解策略的优劣势,不断完善策略系统,开发出适合自己的量化交易方案。


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © Je_Buurman September 1st 2020

//@version=4
strategy("Buurmans Tutorial", overlay=true, initial_capital=1000, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_value=0.2)

// Some initial inputs, these are needed in case the strategy returns an error of "too many trades, > 3000" 

Year    = input(defval = 2020, title = "From Year", minval = 2010)              // 
Month   = input(defval = 1, title = "From Month", minval = 1, maxval=12)
LongOnly=input(true, title="Only go Long?")


// Phase I - the initial "Strategy" - buy Monday, sell Friday

longCondition = dayofweek==dayofweek.monday and (time > timestamp(Year, Month, 01, 00, 00, 00))
shortCondition = dayofweek==dayofweek.friday and (time > timestamp(Year, Month, 01, 23, 59, 59))


// Phase II - some rudimentary "risk-management" e.g. stoploss

Use_stoploss=input(false, title="Use stoploss ?")
stoploss_input=input(150, title="Stoploss in $")
Stoploss = Use_stoploss ? strategy.position_size>0 ? iff(strategy.position_size>0,strategy.position_avg_price - stoploss_input, na) : strategy.position_size<0 ? iff(strategy.position_size<0,strategy.position_avg_price + stoploss_input, na) : na : na
plot(Use_stoploss and strategy.position_size!=0 ? Stoploss : na, color=iff(Stoploss!=na,color.silver, color.red),style=plot.style_linebr)


// Phase III - make it more profitable by trying to filter conditions
// only buy on odd Mondays ? only buy on full moon Mondays ? something else entirely ?


// The actual trades, going Long, close Long, going Short and Stoploss

if (longCondition)
    strategy.entry("Buy on Monday", strategy.long)
    
if (shortCondition and LongOnly==false)
    strategy.entry("Short on Friday", strategy.short)

if (shortCondition and LongOnly)
    strategy.close("Buy on Monday", comment="Sell on Friday")

if (low < Stoploss)
    strategy.close("Buy on Monday", comment="Long Stopped on Someday")
if (high > Stoploss)
    strategy.close("Short on Friday", comment="Short Stopped on Someday")

更多内容