只对未成交的平仓单进行撤单

这两天发了个帖子请教如何对未成交报单在指定时间内进行撤单,这个问题已经解决,但是我现在想只对未成交的平仓单进行撤单, 用以下写法:if(A_OpenOrderEntryOrExit(orderIDs[j])==Enum_Exit or A_OpenOrderEntryOrExit(orderIDs[j])==Enum_ExitToday),为什么不对?

感谢!


if(time>pctime1 and time<pctime2)

       {    

           PlotBool("pc_jing",pc_jing);        

           Array<Integer> orderIDs;

           Bool ret=A_GetUnFillOrderIDs(RelativeSymbol,orderIDs,"");

           

           Integer j=0;

           For j = 0 To GetArraySize(orderIDs) - 1

           {

              Print("orderid:" + Text(orderIDs[j])+",A_GetOrder:");

              Commentary("orderid:" + Text(orderIDs[j])+",A_GetOrder:");

              Order value;

              ret=A_getorder(orderids[j],value);

              Print(IIFString(ret, "True", "False") + "," + Text(value));

             

              if(A_OpenOrderEntryOrExit(orderIDs[j])==Enum_Exit or A_OpenOrderEntryOrExit(orderIDs[j])==Enum_ExitToday)

              {

              A_DeleteOrderEx(orderids[j]);

              }

           }

         

       }

收市前对未成交订单进行撤单
A_OpenOrderEntryOrExit:未成交的平仓单取值问题
平仓单变成已撤单
怎么样在收盘前对未成交的平仓委托单进行撤单
图表交易系统,未成交撤单之后,在没有持仓情况下仍然发出平仓委托哦
有请大神写段代码:平仓单未成交,每10秒撤回重新提交,直到成交为止,谢谢!
交易助手撤单后未重发
部分成交时,如何获取未成交的委托量?
交易助手对于图表信号产生的“部分成交”委托单的平仓单无能为力?
关于撤单的问题

A_OpenOrderEntryOrExit

这类函数

需要锁定品种的

你按照我的方式试试


A_GetOrder(ids[ii], myOrder);

IF (myOrder.side == Enum_Sell && myOrder.combOffset > 2)

A_DeleteOrderEx(ids[ii]);

这是多单卖平

空单同理

A函数类别尽量一致

枚举尽量穷尽

既然已经get到Order value

又去A一遍A_OpenOrderEntryOrExit

是不是多此一举

用法又不对

还是尽量熟悉并逻辑一致处理问题

看上去没什么问题

昨天的测试找到了更简单的测试方法

这个函数是针对委托单索引的(从0开始排序,0表示最新)

我事先挂一个单,直接填0查就是出来了

说明不是报单索引,这个函数当下意义不大

√

按昨天wgy_king老师提供的方法,重新修改了代码,现在可以获取未成交订单信息也可以撤单,现在留下最后一步没法解决,想让老师帮忙解决下。就是撤单后按最新的价格进行重报这一步不知道如何处理。疑问如下:

1、我的需求是想在指定时间内(比如下午14:55至14:59之间)对当天未成交的平仓单进行撤单并按最新价重新报单。下述代码的写法是在撤单指令后马上就写重报指令,实际测试出来的结果是撤单是可以,但重报的指令没有执行。所以,上述需求应该如何改?

2、我不想在onorder里用撤单完成这个事件去触发重新报单,因为在14:55至14:59之前的盘中时间一样有撤单事件,如果在onorder域里写重报那么系统会对所有撤单都进行重报,而我并不想这样。因为我是日内交易,我就是在收盘前想把未成交的平仓单进行重报了结,避免隔夜头寸,用监控器平仓太麻烦会忘记。

3、ONBAR里正常的报单指令我想用图表函数而不是A函数,因为我有用监控器监控帐户持仓和图表信号持仓是否一致的习惯,纯粹用A函数报单就不能用监控器不放心。我只想收盘前对未成交平仓单进行撤单重报时用A函数,虽然这样图表函数和A函数混用,但只是收盘前作这一简单的处理对实际交易应该影响不大。

以上,希望能获得帮助,感谢!

以下是用双均线策略作为逻辑的测试代码,如下:


Params
	Numeric FastLength(5);// 短期指数平均线参数
	Numeric SlowLength(20);// 长期指数平均线参数
	Numeric pctime1(0.1455);
	Numeric pctime2(0.1459);
	Numeric pre_pctime(0.1459);
	
	
Vars
	Series<Numeric> AvgValue1; 
	Series<Numeric> AvgValue2;
	bool pc_jing;
	Series<Numeric> sellexit_canceled_num; 
	Series<Numeric> buyexit_canceled_num; 
Events
	OnInit()
	{
		AddDataFlag(Enum_Data_RolloverBackWard());	//设置后复权
		AddDataFlag(Enum_Data_RolloverRealPrice());	//设置映射真实价格
		AddDataFlag(Enum_Data_AutoSwapPosition());	//设置自动换仓
	}
	

	OnReady()
	{
		SetBackBarMaxCount(1+Max(FastLength,SlowLength));
	}
	OnBar(ArrayRef<Integer> indexs)
	{
		
		if(time==pre_pctime)
		{
			sellexit_canceled_num=0;
			buyexit_canceled_num=0;
		}
		
		
		if(time==pctime1)
		{
			
			PlotBool("pc_jing",pc_jing);		
			Integer j=0;
			Integer h=0;
			Array<Integer> orderIDs;
			Bool ret=A_GetUnFillOrderIDs(RelativeSymbol,orderIDs,"");
			
			For j = 0 To GetArraySize(orderIDs) - 1
            {
               
              
               Order value;
               ret=A_getorder(orderids[j],value);
 
               if(value.combOffset==Enum_Exit or value.combOffset==Enum_ExitToday and value.side==Enum_Sell and sellexit_canceled_num<>1)
               {
               bool ret1 =A_DeleteOrderEx(orderids[j]);          
               sellexit_canceled_num=1;
               bool ret= A_SendOrder(Enum_Sell, Enum_Exit, 0, open);             
               }
     
               if(value.combOffset==Enum_Exit or value.combOffset==Enum_ExitToday and value.side==Enum_buy and buyexit_canceled_num<>1)
               {             
               bool ret1= A_DeleteOrderEx(orderids[j]);             
               buyexit_canceled_num=1;
               bool ret= A_SendOrder(Enum_Sell, Enum_Exit, 0, open);
               
               }
            }   
         }

		AvgValue1 = AverageFC(Close,FastLength);
		AvgValue2 = AverageFC(Close,SlowLength);
		PlotNumeric("MA1",AvgValue1);
		PlotNumeric("MA2",AvgValue2);		

		If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1])
		{
			Buy(0,Open);
		}
		
		If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1])
		{
			Sell(0,Open+20*MinMove * PriceScale*rollover);
		}	
	}





onorder里也能写条件的

14:55至14:59

那么就是

if ( currenttime > 0.1455 and currenttime < 0.1459) 

筛选出正确的条件

撤单重报代码有问题

前几个帖子我已经明确告诉你了

你没有思考?


你先想想

不会我再说

我先跟你说

很简单就能实现

谢谢老师,之前提醒过,有思考,不过当时急着解决其它问题就把这个问题先放下了。在ONORDER里进行重报,目前应该是解决了。晚上再测试一下

别onorder域再折腾了啊

把事情搞复杂了

numeric sleep = SystemDateTime;

while(true)

{

   A_getOrder(orderids[j], value);

   if(value.status == Enum_Canceled)  break;

if(value.status == Enum_Filled)  break;

if(DateTimeDiffV2(Sleep, SystemDateTime) >= 1000) break;

}


然后发单

还有

你这个场景

放在onbaropen域多好

刚好每一个分钟做一次