多空方向单子如何互不干扰

大神老师好,

最近遇到 同个策略中,同个品种的策略中,多单开仓和空单开仓,会互相抵消。

比如,在rb2510合约中,

多单信号:连续两个阳棒,开多单1手,

空单信号:连续两个阴棒,开空单1手。

在多单未平仓的时候,空单开仓,会互相有干扰。如何解决。

还有个问题,如果同个信号原理,可否多开几组多单,同时他们的开平仓信号遵循一套算法。

比如,在RB2510合约中

多单信号:连续两根阳棒,开多单1手,

空单信号:连续两根阴棒,开空单1手,

首单的多单和首单的空单开仓次数,定在5次,5次之后,再有信号,要等现有单组平仓后,才能继续开仓。

在此过程中,每组的多单和空单的开仓和平仓,互相不干扰!

破损之后,反手开单。反手单也有平仓算法,该算法共享于反手单组里面。根据算法和各自的点位不同,平仓点位也不一样。

就不知道如何实现出这样的功能。能够具体说说实现过程。万分感谢。

onFill里面怎么取到成交单子的方向
onBar和onFill两个不同的事件,若刚好同时触发,是串行执行,还是支持并行执行互不干扰?
多单平仓和空单开仓同时进行,怎么让同时的单子,延迟20秒,避开同时
关于BBI多空指标?
在持有多单的情况下开空单如何表达
一个品种两个策略,一个做多,一个做空,如何只撤做多挂单,或者做空挂单
单根均线多空如何编写程序化交易策略?
如何识别空bar
实现多空单同时存在问题?
旗舰版多空两个程序加载超级图表后同时多空持仓

写了段 最简单版本的代码,编译没问题,回测时,不开单,没数据。请大神老师过目,指正。

代码大致如下:

Params

   Numeric lots(2);  // 首单开仓手

   Numeric stopp(5); // 止损点 Stoppiont * minpoint

   Numeric myentry(7); // 累积开仓次数


Vars

   Global Numeric MinPoint;// 最小跳

   Global Numeric tmpcon; //

   Global Numeric aa ; // 限制开仓条件A

   Global Numeric bb ; // 限制开仓条件b

   Global Numeric cc ; // 限制开仓条件c

   Global Numeric MyEntryP1; // 首单开仓

   Global Numeric MyExitP1; // 首单止损

   Global Numeric MyProfitP1; // 首单止盈

//   Series<Numeric> tempexit;

//    Series<Numeric> tempprofit;

//    Global Numeric condc; // 进程控制


Events  

OnInit()

   {

       SetTradeSide(1); // 多空,共存模式

   }


OnBarOpen(ArrayRef<Integer> indexes)

   {

       MinPoint= MinMove *PriceScale;

       if(( 条件A and (MarketPosition==0 and (CurrentEntries>0 or CurrentEntries<myentry))) aa = 1;

       if(开仓条件2) bb=1; // 标准多单开仓模式

       

   }

   

OnBar(ArrayRef<Integer> indexes)

   {

       if(aa==1 and bb==1)

       {

           While(CurrentEntries < myentry)  // 循环开仓,平仓,反手!简单版本没有反手

           {

               MyEntryP1 = open; // 开仓价==开盘价

               buy(lots, MyEntryP1);

               MyExitP1 = low[3]-stopp*MinPoint;    //  止损算法

   

               MyProfitP1 =MyEntryP1 + 5*minpoint;  // 简单止盈算法

             

               Commentary("首单多单开仓价:" + Text(MyEntryP1) +"首单多单止盈价:"

               + Text(MyProfitP1) +"首单多单止损价:"

               + Text(MyExitP1));  // 输出价格内容


               if(high>MyProfitP1) sell(lots,min(high,MyProfitP1));   // 止盈平仓

               if(low<MyExitP1) sell(lots,max(low,MyExitP1));      //止损平仓

           }

       }

   }    

   

   

是否在 while循环外面,要做一个 首单开平仓的写入,然后while里面的内容不变。就可以了呢??

不知道怎么说你才明白

图表很多函数、DEMO

都是回溯模式


如果你要实盘

而且策略有一些复杂需求

自己用序列变量或全局变量去控制


1 aa这个条件应该不靠谱

不存在这个状态

2 一系列图表函数先理解含义 你这里出现的大多函数都不应该用 也不能用

你这while啥意思?

一次把开仓次数用完?

那你一次发完不就完事了?

测试除了不开仓

策略有没有卡住?

对了

策略没卡是因为没运行进去🤔

第一个回复就说了不要用MK

结果代码里变本加厉

settradeside不行?之前不是好像说过这个问题么,有一个人的帖子下面我还给demo了

https://bbs.tbquant.net/thread/20250428064245460768

我记得回过你

难道又有新的问题?

设置成双向交易啊

你不至于到现在还是系统默认的交易方向+MarketPosition吧?