我的基本代码如下:
1 IF TBuyHolding(1)>0 THEN
2 BEGIN
3 IF 满足开空仓条件 THEN
4 BEGIN
5 WHILE TBuyHolding(1)>0 DO
6 BEGIN
7 TSell(1,0,LMT, 卖一价-MINDIFF);
8 Sleep(1000);
9 IF TBuyHolding(1)=0 THEN
10 break;
11 TCancel(1,0);
12 WHILE( TIsRemain(0)>0 ) DO
13 BEGIN
14 Sleep(100);
15 END
16 END
17 WHILE 价格在可接受的开仓范围内 AND TSellHolding(1)=0 THEN
18 BEGIN
19 TBuyShort(1,1,LMT,卖一价-MINDIFF);
20 Sleep(1000);
21 IF TSellHolding(1)>0 THEN
22 break;
23 TCancel(1,0);
24 WHILE( TIsRemain(0)>0 ) DO
25 BEGIN
26 Sleep(100);
27 END
28 END
29 END
30 END
我的问题如下:
1 如果交易系统和行情系统是独立的线程,则第7、19行的代码,在两次检测之间,价格已经发生了变化,可以追击当前价格平仓和开仓;反之,如果交易系统和行情系统不是独立的线程,行情价格不能更新,每次开仓点都是一样,可能会在很久以后(振荡行情)才开仓成功(单边行情可能导致死循环);
2 现在是轮询方式,平仓结果和开仓结果需要等待一定时间才能知道,有没有其他方法在交易成功后第一时间知道结果?
参考 http://www.weistock.com/bbs/dispbbs.asp?boardid=2&Id=49 问题36
此外,不建议在后台自动交易里使用循环来自己处理,否则容易出现你说的情况,此外效率也不见得提高,这种程序用户自己本身也很难去控制。
建议去掉循环,将固定轮循时间设为1秒,通过不断的检测来达到你的目的