INPUT:M(30,5,300,1),N(2,1,10,1),总资金(10,0,10000,10);
MID1 : MA(CLOSE,M) ;//中轨
MID2 : MA(CLOSE,Max(M - enterbars,10)) ;//持仓后中轨
Z : N*STD(CLOSE,M) ;//通道宽度
UPPER : MID1 + z ;//上轨
LOWER : MID1 - z ;//下轨
GLYZ := C-REF(C,30);
手数 := FLOOR(总资金*200/(Z*MULTIPLIER ));//计算应开手数
//开始执行时 初始化数据
IF BARPOS=1 THEN BEGIN
position := 0 ;
end
//条件:
开多条件:=C>UPPER and ref(c,1)<UPPER AND position=0 and GLYZ > 0 and 手数> 0 ;//上穿上轨开多
开空条件:=C<LOWER AND ref(c,1)>LOWER and position=0 and GLYZ < 0 and 手数> 0 ;//下穿下轨开空
平多条件:=C<MID2 AND HOLDING>0; //下穿中轨平多
平空条件:=C>MID2 AND HOLDING<0; //上穿中轨平空
IF 开多条件 THEN begin
BUY(1,手数,MARKET);
position := 1 ;
end
IF 开空条件 THEN begin
BUYSHORT(1,手数,MARKET);
position := 1 ;
end
IF 平多条件 THEN begin
SELL(1,holding,MARKET);
position := 0 ;
end
IF 平空条件 THEN begin
SELLSHORT(1,holding,MARKET);
position := 0 ;
end
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;//输出当前资产,但不影响坐标最高最低值
以上程序,加载实盘后重复成交,啥道理?怎么避免?
序号 品种名称 公式名称 下单时间 类型 交易量 价格 滑点 帐户
1 RB05 螺纹钢1605 AB 15/12/29 14:42:51 平多 94 0 0
2 AU06 黄金1606 AB 15/12/29 14:44:09 开多 4 0.00 0
3 RB05 螺纹钢1605 AB 15/12/29 14:51:09 开多 13 1782 1
4 AU06 黄金1606 AB05 15/12/29 21:00:02 平多 4 227.75 1
5 RB05 螺纹钢1605 AB05 15/12/29 21:00:52 开多 13 1783 0
6 AU06 黄金1606 AB05 15/12/29 21:46:16 平多 4 228.15 0
7 AG06 白银1606 AB05 15/12/29 22:07:15 开多 16 3315.00 0
8 AG06 白银1606 AB05 15/12/29 22:10:57 开多 16 3315.00 0
9 AL03 沪铝1603 AB05 15/12/29 22:13:07 平多 19 0 0
10 AG06 白银1606 AB05 15/12/29 22:15:08 开多 16 0.00 0
11 RB05 螺纹钢1605 AB05 15/12/29 22:21:50 平多 13 0 0
以上为交易记录节选,我程序意图是只开一次仓,但写好程序后会多次重复开仓,比如银子、螺纹
而且发出信号后开仓持仓,和随后图表上标示的不一致,比如螺纹,开两次分别13手,平一次13手,应该还有13手,但图表上持仓是0.
是不是信号闪烁,盘中的时候出现了开仓信号但是盘后这个信号消失了。
C>UPPER这种条件在盘中因为c还没走完很有可能不确定是否大于上轨,调试的话可以考虑看下这个帖子实时的记录下条件值然后去看是不是盘中盘后条件变化导致的
http://www.weistock.com/bbs/dispbbs.asp?BoardID=4&ID=49428