Hi,版主好,在一根K线上先是出现开仓信号,紧接着同一根k线又出现平仓信号,这种情况下希望程序不操作,该如何设置?(逐K线计算下的,走完一根K线后方执行程序)
INPUT:M(20,5,500,30);
INPUT:N(2,0.1,10,1);
INPUT:X(0.2,0.2,10,0.2);
MID : MA(CLOSE,M);
UPPER: MID + N*STD(CLOSE,M);
LOWER: MID - N*STD(CLOSE,M);
多:=ALL(C>=O+15*X,2) AND ALL(O>=MID,2);
空:=ALL(C<=O-15*X,2) AND ALL(O<=MID,2);
if 多 then begin
sellshort(holding<0, 0, limit,CLOSE);
buy(holding=0 AND TIME<150100, 0,limit,CLOSE);
end
HH:=HHV(H,BARSLAST(HOLDING<=0));
多止损1:=HH<Enterprice*1.005 AND C<=HH*0.995,LINETHICK0;
if 多止损1 then sell(holding>0, 0, limit,CLOSE);
if 空 then begin
sell(holding>0, 0, limit,CLOSE);
buyshort(holding=0 AND TIME<150100, 0,limit,CLOSE);
end
LL:=LLV(L,BARSLAST(HOLDING>=0));
空止损1:=LL>Enterprice*0.995 AND C>=LL*1.005 ,LINETHICK0;
if 空止损1
此主题相关图片如下:qq截图20140505145205.jpg

then sellshort(holding<0, 0, limit,CLOSE);
不希望同根k线就平仓的,那么在平仓条件里面加上 enterbars>0,开平都要加
还有限价下单limit要改成了limitr
我原本的意图是同一根K线先出现开仓,后出现平仓信号时,希望程序不做任何操作。
应该在开仓条件中使用exitbars>0吗,
那是坐不到的,出了信号一定是会下单的,如果不希望同根k线就平仓掉,那么就要让平仓出现在下一个周期
if 空 then begin
sell(holding>0, 0, limit,CLOSE);
buyshort(holding=0 AND TIME<150100, 0,limit,CLOSE);
end
这样的改成
if ref(空,1) then sell........;
if 空 then buyshort.......;
jinzhe版主好,再多问一句,既然程序出信号一定会下单的话,而且开仓和平仓出现在一个K线的情况下,程序会执行开仓单的(昨天实盘时也是这样开单的),倘若我想在同根K线平仓,程序应该如何修改?
意思是同根k线出现了开平两个信号,但是你的就处理了一个开仓信号,没有处理平仓信号?
贴下单日志
2014-05-05 09:25:39.593 2014.05.05 09:25:39【图表】框架:Technic 触发下单 BUYSHORT 品种 IF00 下单K线 2014.05.05 09:25:00 公式:nextopen 窗格ID:0 代码行:26
2014-05-05 09:25:39.640 【图表】模型下单 3
2014-05-05 09:25:39.640 【图表】下单系数调整后 手数:3
2014-05-05 09:25:39.640 【图表】至队列下单
2014-05-05 09:25:39.640 2014.05.05 09:25:39【图表】框架:Technic 触发下单 SELLSHORT 品种 IF00 下单K线 2014.05.05 09:25:00 公式:nextopen 窗格ID:0 代码行:36
2014-05-05 09:25:39.640 【图表】模型下单 3
2014-05-05 09:25:39.640 【图表】下单系数调整后 手数:3
2014-05-05 09:25:39.640 【图表】实际持仓 0
2014-05-05 09:25:39.640 【图表】IF00 运行完毕
2014-05-05 09:25:39.640 【队列】当前队列准备处理数据:1条
2014-05-05 09:25:39.640 【队列】发送下单指令
2014-05-05 09:25:39.656 【下单】IF05 价0.000000 量3 买卖1 类型1 开平0 账户41005096 Formula 1
2014-05-05 09:25:39.656 【下单】确认报单已发送 ID=-435681637 RefID = 5
2014-05-05 09:25:39.656 【指令】收到回报指令 ID = -435681637 RefID = 5
2014-05-05 09:25:39.687 【回报】41005096 : IF1405 - 已报单 3 价格:0.0 开 卖
2014-05-05 09:25:39.765 【指令】收到回报指令 ID = -435681637 RefID = 5
2014-05-05 09:25:39.843 【指令】收到回报指令 ID = -435681637 RefID = 5
2014-05-05 09:25:39.843 【指令】收到成交回报指令 REFID = 5
2014-05-05 09:25:39.859 【指令】收到回报指令 ID = -435681637 RefID = 5
2014-05-05 09:25:39.968 【指令】收到成交回报指令 REFID = 5
2014-05-05 09:25:39.968 【指令】收到回报指令 ID = -435681637 RefID = 5
2014-05-05 09:25:40.187 【指令】收到成交回报指令 REFID = 5
2014-05-05 09:25:40.265 【回报】41005096 : IF1405 - 已成交 1 价格:2146.4 开 卖
2014-05-05 09:25:40.296 【回报】41005096 : IF1405 - 已成交 1 价格:2146.4 开 卖
2014-05-05 09:25:40.468 【回报】41005096 : IF1405 - 已成交 1 价格:2146.4 开 卖
2014-05-05 09:26:02.109 【下单】IF05 价2146.199951 量3 买卖0 类型0 开平1 账户41005096 Formula 0
2014-05-05 09:26:02.109 【下单】确认报单已发送 ID=-435681636 RefID = 6
2014-05-05 09:26:02.171 【指令】收到回报指令 ID = -435681636 RefID = 6
2014-05-05 09:26:02.187 【回报】41005096 : IF1405 - 已报单 3 价格:2146.2 平 买
2014-05-05 09:26:02.312 【指令】收到回报指令 ID = -435681636 RefID = 6
2014-05-05 09:26:02.312 【指令】收到回报指令 ID = -435681636 RefID = 6
2014-05-05 09:26:02.343 【指令】收到成交回报指令 REFID = 6
2014-05-05 09:26:02.343 【回报】41005096 : IF1405 - 已成交 3 价格:2146.2 平 买
最后那个2146.2的平单信息,是我手动平仓的记录
因为当前没有持仓导致发送的平仓信号没有下单
所以你要在代码里面加上orederqueue
if 空 then begin
sell(holding>0, 0, limit,CLOSE),orderqueue;
buyshort(holding=0 AND TIME<150100, 0,limit,CLOSE),orderqueue;
end
if 空 then begin
sell(holding>0, 0, market),ORDERQUEUE,IGNORECHECKPRICE;
buyshort(holding=0 AND TIME<150100, 0,MARKET),ORDERQUEUE,IGNORECHECKPRICE;
end
我刚才查过,这个日志的程序用了队列语句了。。
貌似是我贴的有些乱,好几个测试程序一起跑。。重新上传日志对应的代码:
INPUT:M(20,5,500,30);
INPUT:N(2,0.1,10,1);
INPUT:X(0.2,0.2,10,0.2);
MID : MA(CLOSE,M);
UPPER: MID + N*STD(CLOSE,M);
LOWER: MID - N*STD(CLOSE,M);
多:=ALL(C>=O+C/220*X,2) AND ALL(O>=MID,2);
空:=ALL(C<=O-C/220*X,2) AND ALL(O<=MID,2);
if 多 then begin
sellshort(holding<0, 0, market),ORDERQUEUE,IGNORECHECKPRICE;
buy(holding=0 AND TIME<150100, 0, MARKET),ORDERQUEUE,IGNORECHECKPRICE;
end
HH:=HHV(H,BARSLAST(HOLDING<=0));
多A:holding>0 and HH<Enterprice*1.005 AND C<=HH*0.995,LINETHICK0;
if 多A then sell(holding>0, 0,MARKET),IGNORECHECKPRICE;
if 空 then begin
sell(holding>0, 0, market),ORDERQUEUE,IGNORECHECKPRICE;
buyshort(holding=0 AND TIME<150100, 0,MARKET),ORDERQUEUE,IGNORECHECKPRICE;
end
LL:=LLV(L,BARSLAST(HOLDING>=0));
空A:holding<0 and LL>Enterprice*0.995 AND C>=LL*1.005 ,LINETHICK0;
if 空A then sellshort(holding<0, 0,MARKET),IGNORECHECKPRICE;