 
等级: 机构版
- 注册:
- 2023-2-16
- 曾用名:
|
{
策略描述:基于开盘价的网格交易策略
逻辑:
1. 获取每日开盘价作为基准价格
2. 计算基准差(最小变动价*10)
3. 多单网格:价格每下跌基准差*10开多1手,平仓价为开仓价+基准差*10
4. 空单网格:价格每上涨基准差*10开空1手,平仓价为开仓价-基准差*10
5. 限制最多开仓10次(多空各自)
6. 收盘前撤销所有委托并平仓
}
// 参数定义
INPUT:MAX_GRID(10); // 最大网格层数
// 变量定义
VARIABLE:BASE_PRICE = 0; // 基准价格(每日开盘价)
VARIABLE:GRID_SIZE = 0; // 网格大小(最小变动价*10)
VARIABLE:LAST_LONG_PRICE = 0; // 上次多单开仓价
VARIABLE:LAST_SHORT_PRICE = 0; // 上次空单开仓价
VARIABLE:LONG_COUNT = 0; // 当前多单层数
VARIABLE:SHORT_COUNT = 0; // 当前空单层数
// 获取每日开盘价
IF TODAYBAR = 1 THEN BEGIN
BASE_PRICE : =OPEN; // 当日开盘价
GRID_SIZE := 2; // 网格基准差
LAST_LONG_PRICE := BASE_PRICE;
LAST_SHORT_PRICE := BASE_PRICE;
LONG_COUNT := 0;
SHORT_COUNT := 0;
END;
AB: BASE_PRICE;;
// 多单网格逻辑
IF CLOSE <= (LAST_LONG_PRICE - GRID_SIZE * 10) AND LONG_COUNT < MAX_GRID THEN BEGIN
// 开多单
BUY(1, 1, LIMITR, LAST_LONG_PRICE - GRID_SIZE * 10),ignorecheckprice;
// 设置平仓委托
//SELL(1, 1, LIMITR, ENTERPRICE + GRID_SIZE * 10),ignorecheckprice;
// 更新记录
LAST_LONG_PRICE := LAST_LONG_PRICE - GRID_SIZE * 10;
LONG_COUNT := LONG_COUNT + 1;
END;
IF HOLDING()>0 AND ENTERBARS()>0 AND H-LAST_LONG_PRICE>=GRID_SIZE THEN BEGIN
SELL(1, 1, LIMITR, C),ignorecheckprice;
END
// 空单网格逻辑
IF CLOSE >= (LAST_SHORT_PRICE + GRID_SIZE * 10) AND SHORT_COUNT < MAX_GRID THEN BEGIN
// 开空单
BUYSHORT(1, 1, LIMITR, LAST_SHORT_PRICE + GRID_SIZE * 10),ignorecheckprice;
// 设置平仓委托
//SELLSHORT(1, 1, LIMITR, ENTERPRICE - GRID_SIZE * 10),ignorecheckprice;
// 更新记录
LAST_SHORT_PRICE := LAST_SHORT_PRICE + GRID_SIZE * 10;
SHORT_COUNT := SHORT_COUNT + 1;
END;
IF HOLDING()<0 AND ENTERBARS()>0 AND LAST_SHORT_PRICE-L>=GRID_SIZE THEN BEGIN
SELLSHORT(1, 1, LIMITR, C),ignorecheckprice;
END
// 收盘前处理
IF TIME = CLOSETIME(0) THEN BEGIN
// 撤销所有委托单
// TODO:需要确认PEL中撤销委托的函数
// GAP:缺少撤销委托单的函数
// 平掉所有持仓
IF HOLDING > 0 THEN BEGIN
SELL(1, HOLDING, MARKETR);
END;
IF HOLDING < 0 THEN BEGIN
SELLSHORT(1, ABS(HOLDING), MARKETR);
END;
// 重置网格状态
LONG_COUNT := 0;
SHORT_COUNT := 0;
LAST_LONG_PRICE := 0;
LAST_SHORT_PRICE := 0;
END;
// 显示信息
DRAWTEXT(TODAYBAR=1,LOW,'基准价:'+NUMTOSTR(BASE_PRICE,2),COLORWHITE);
DRAWTEXT(TODAYBAR=1,LOW-10*MINDIFF,'网格大小:'+NUMTOSTR(GRID_SIZE*10,2),COLORWHITE);
DRAWTEXT(TODAYBAR=1,LOW-20*MINDIFF,'多单层数:'+NUMTOSTR(LONG_COUNT,0),COLORRED);
DRAWTEXT(TODAYBAR=1,LOW-30*MINDIFF,'空单层数:'+NUMTOSTR(SHORT_COUNT,0),COLORGREEN);
麻烦帮忙修改下,想变成每一次多单开仓对应的平仓均是开仓成本价+网格基准差,然后空单也是如此,每天限制多空各10次
|
|