在MT4里怎么写策略让在一个周期里只开仓一次?!

Discussion in 'MetaTrader' started by wj2000, Aug 27, 2008.

  1. 在MT4里怎么写策略让在一个周期里只开仓一次?!
    对于一般的开仓然后用“止损指标”平仓的情况来说容易处理,因为可以设置一个“开仓信号”标示,然后在平仓时解除这个标示就行了。但在用到“目标价位”主动性平仓时就有点麻烦了。
     
  2. bool cantrade=true;

    ...
    if(... && cantrade)
    {ordersend(...);cantrade=false;}

    不知道理解了不?
     
  3. 这个好像不能解决问题啊,
    比如这个例子:
    如果高于上一周期的收盘价就开仓买入,成交后50点止盈,30点止损,当价格高于50点止盈平仓后,好像会不会再次发出一个开仓指令?
     
  4. 1)在发送订单时将Bar的时间 当做订单OrderMagicNumber的参数。
    int Magic=Time[0];
    OrderSend(x,x,x,x,x,x,x,x,Magic,x,x,x);


    2)在程序的开始先检查OrdersHistoryTotal 和 OrdersTotal 里面是否有(OrderMagicNumber==当前Bar时间) , 如果有,则退出。如果无订单,则开始程序。

    int opened==0;
    //检查历史成交纪录
    for(i=0;i<OrdersHistoryTotal();i++)
    {
    if (OrderSelect(i,SELECT_BY_POS)==false) return(-1);
    if (OrderMagicNumber()==Time[0]) opened++;
    }

    //检查当前成交纪录
    for(i=0;i<OrdersTotal;i++)
    {
    if (OrderSelect(i,SELECT_BY_POS)==false) return(-1);
    if (OrderMagicNumber()==Time[0]) opened++;
    }


    // 如果历史纪录和当前成交里面没有 纪录,进入程序
    if (opened==0)
    {

    doing.........


    }
     
  5. MT中的编程还不太会,不过EL中,设置一个VAR就好了,把此固定,也就是一旦下单后,这个VAR赋一个值,直到date变动到下一周时,将其还原为可以允许下单的值。
     
  6. 控制每N分钟循环一次:N=7 每七分钟循环一次


    int Tag=0;

    if( Tag != Minute()/N )
    {
    Tag=Minute()/N;

    do coding.......


    }
     
  7. 谢谢二位!
    我昨天另外也想了一个变通的办法,就是判断一下最高/最低价的范围。