Bar上平仓后满足开仓条件不再开仓

来源:互联网 发布:哪个网络验证好 编辑:程序博客网 时间:2024/04/30 19:59
在K1这根Bar上达到了平仓条件已经平仓,但是平仓后满足开仓条件。造成开仓—平仓—开仓循环(假锁现象,至少重复10多次,交易费攀升),如何实现平仓后的Bar不再开仓?
每Bar的时间周期内,能够TICK多次。
问题一:程序每TICK就下一次单,如何防止重复下单呢?
====================
 
问题二:比如,我在1.3600下了单,当他涨到1.3620,没平,之后返回来到1.3600,还会再下一个单的,这个单是多余的,我希望在1.3590到1.3610之间都不下单了,如何办到?但是如果平了1.3600这个单的话可以再下。
或者你可以加上函数模块
bool isNewBar()
{ static datetime TimeBar=0;
bool flag=false;
if(TimeBar!=Time[0])
{
TimeBar=Time[0];
flag=true;
}
return (flag);
}
 
 
//============================
 请问如何控制1根k柱内只下单一次?
在一个k线内会反复下单-平单-再下单-再平单。
对于循环,有点不明白,比如一根15分钟的k柱,循环的tick会走多少次?。。
如何控制一根k线内只下一次单?
想到用数组控制,
int a;
double order[];
a=Bars;
order[a]=0.0;
之后判断是否满足开仓条件(开仓条件增加一条,order[a]==0),如果满足,开仓,并且,
order[a]=1
可是,还是不好用,很困惑,望高手指点!先谢谢了!
//根据仓位类型获取最后一次的交易时间
datetime GetLastTrade(int type)
{
 datetime lastTrade = 0;
 int i;
 for (i = 0; i < OrdersTotal(); i++)
 {
  if (!OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
  {
   continue;
  }
  if (OrderSymbol() !=Symbol())
  {
   continue;
  }
  if (OrderType() != type)
  {
   continue;
  }
  if (lastTrade <OrderOpenTime())
  {
   lastTrade =OrderOpenTime();
  }
 }
 if (lastTrade == 0)
 {
  for (i = 0; i <OrdersHistoryTotal(); i++)
  {
   if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
   {
    continue;
   }
   if(OrderSymbol() != Symbol())
   {
    continue;
   }
   if(OrderType() != type)
   {
    continue;
   }
   if (lastTrade< OrderOpenTime())
   {
    lastTrade= OrderOpenTime();
   }
  }
 }
 return (lastTrade);
}
//判断如下
//仅举例说明买入情形 卖出情形自己做
if (GetLastTrade(OP_BUY) < iTime(Symbol(), PERIOD_M15,0))
{
 //不在当前15分钟的K柱之内 可以下单
}
else
{
 //不可下单
}
 
=================
MQL是面向过程的语言,不能在一个函数内部声明另一个函数。你必须将 GetLastTrade这一段单独声明在startinit等函数之外。
 
---------------------------dmgy的方法
static datetime openTime;
if(Time[0] != openTime)
{
//不在此柱内
......
openTime = Time[0];
}
else
{
//在同一柱内
}
-------------------dmgy的方法结束-----------------------------------
顺便说一句dmgy的方法不可取 理由是判断不正确且依赖于图表的周期
正确的用法是这样的
int start()
{
//.............你自己的代码
//然后这里是判断代码
 if (GetLastTrade(OP_BUY) < iTime(Symbol(),PERIOD_M15, 0))
 {
 //不在当前15分钟的K柱之内 可以下单
 }
 else
 {
 //不可下单
 }
}
//然后这里是GetLastTrade函数的声明
datetime GetLastTrade(int type)
{
//函数内容................
}
0 0
原创粉丝点击