[PEL] 复制代码 // 参数定义
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; // 当前空单层数
VARIABLE:P1[MAX_GRID]:=0,P2[MAX_GRID]:=0;
// 获取每日开盘价
IF TODAYBAR = 1 THEN BEGIN
initbound(P1,0);
initbound(p2,0);
BASE_PRICE : =OPEN; // 当日开盘价
GRID_SIZE := 5; // 网格基准差
GRID_DIF:=5;
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 * GRID_SIZE) AND LONG_COUNT < MAX_GRID THEN BEGIN
// 开多单
BUY(1, LONG_COUNT+1, LIMITR, LAST_LONG_PRICE - GRID_SIZE * GRID_SIZE),ignorecheckprice;
LONG_COUNT := LONG_COUNT + 1;
P1[LONG_COUNT]:=LAST_LONG_PRICE;
LAST_LONG_PRICE := LAST_LONG_PRICE - GRID_SIZE * GRID_SIZE;
END;
当前平多:0;
FOR I=1 TO MAX_GRID DO
BEGIN
IF P1[I]=0 THEN CONTINUE;
IF H>P1[I] AND HOLDING>0 AND ENTERBARS>0 THEN
BEGIN
SELL(1,I,LIMITR,P1[I]),IGNORECHECKPRICE;
P1[I]:=0;
当前平多:=I;
BREAK;
END
END
// 空单网格逻辑
IF CLOSE >= (LAST_SHORT_PRICE + GRID_SIZE * GRID_DIF) AND SHORT_COUNT < MAX_GRID THEN BEGIN
// 开空单
BUYSHORT(1, SHORT_COUNT+1, LIMITR, LAST_SHORT_PRICE + GRID_SIZE * GRID_DIF),ignorecheckprice;
SHORT_COUNT := SHORT_COUNT + 1;
P2[SHORT_COUNT]:=LAST_SHORT_PRICE;
LAST_SHORT_PRICE := LAST_SHORT_PRICE + GRID_SIZE * GRID_DIF;
END;
当前平空:0;
FOR J=1 TO MAX_GRID DO
BEGIN
IF P2[J]=0 THEN CONTINUE;
IF L<P2[J] AND HOLDING<0 AND ENTERBARS>0 THEN
BEGIN
SELLSHORT(1,J,LIMITR,P2[J]),IGNORECHECKPRICE;
P2[J]:=0;
当前平空:=J;
BREAK;
END
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;
持仓:holding;
PX:ENTERPRICE;
PY:EXITPRICE;
|