以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  K线模式下,同时出现开仓和平仓信号的处理  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=64645)

--  作者:fang2627
--  发布时间:2014/5/5 14:59:56
--  K线模式下,同时出现开仓和平仓信号的处理
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);

--  作者:jinzhe
--  发布时间:2014/5/5 15:03:03
--  

不希望同根k线就平仓的,那么在平仓条件里面加上 enterbars>0,开平都要加

还有限价下单limit要改成了limitr


--  作者:fang2627
--  发布时间:2014/5/5 15:25:59
--  
我原本的意图是同一根K线先出现开仓,后出现平仓信号时,希望程序不做任何操作。
应该在开仓条件中使用exitbars>0吗, 

--  作者:jinzhe
--  发布时间:2014/5/5 15:28:37
--  

那是坐不到的,出了信号一定是会下单的,如果不希望同根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.......;


--  作者:fang2627
--  发布时间:2014/5/6 8:01:18
--  
jinzhe版主好,再多问一句,既然程序出信号一定会下单的话,而且开仓和平仓出现在一个K线的情况下,程序会执行开仓单的(昨天实盘时也是这样开单的),倘若我想在同根K线平仓,程序应该如何修改?
--  作者:jinzhe
--  发布时间:2014/5/6 8:55:59
--  

意思是同根k线出现了开平两个信号,但是你的就处理了一个开仓信号,没有处理平仓信号?

贴下单日志


--  作者:fang2627
--  发布时间:2014/5/6 9:04:52
--  
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的平单信息,是我手动平仓的记录

--  作者:jinzhe
--  发布时间:2014/5/6 9:09:03
--  

因为当前没有持仓导致发送的平仓信号没有下单

所以你要在代码里面加上orederqueue

 

if 空 then begin
 sell(holding>0, 0, limit,CLOSE),orderqueue;
 buyshort(holding=0 AND TIME<150100, 0,limit,CLOSE),orderqueue;
 end

--  作者:fang2627
--  发布时间:2014/5/6 9:23:31
--  
if 空 then begin
 sell(holding>0, 0, market),ORDERQUEUE,IGNORECHECKPRICE;
 buyshort(holding=0 AND TIME<150100, 0,MARKET),ORDERQUEUE,IGNORECHECKPRICE;
 end

我刚才查过,这个日志的程序用了队列语句了。。

--  作者:fang2627
--  发布时间:2014/5/6 9:26:05
--  
貌似是我贴的有些乱,好几个测试程序一起跑。。重新上传日志对应的代码:

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;