16 12
发新话题
打印

[指标EA编写讨论] 请教动态计算浮赢浮亏问题

本主题由 xfxyldj 于 2007-11-18 00:50 分割
对于订单的选定问题很多。
对于你的问题我不准备完全解答。我贴两个子程序,你研究下其中的代码。有问题再说。
还有昨晚不小心把你的关仓问题的帖子分割合并搞错了都删掉了,对不起。发信息今天起来一看发给自己了。
复制内容到剪贴板
代码:
//+------------------------------------------------------------------+
//| SearchOrder 订单查询 函数                                   |
//+------------------------------------------------------------------+
int SearchOrder (int MAGIC,int K)
  {
//----
   int i=0;
   for ( int z = OrdersTotal() - 1; z >= 0; z -- )
   {
     if ( !OrderSelect( z, SELECT_BY_POS ) )
     {
       Print("OrderSelect(", z, ",SELECT_BY_POS) - Error #",GetLastError() );
       continue;
     }
     if (OrderSymbol()!=Symbol())continue;
     if (OrderMagicNumber() != MAGIC )continue;
     if ( OrderType()==K ) i=OrderTicket();
   }
//----
   return(i);
  }
这个搜索程序搜索以MAGIC标记的类型为K的订单。
复制内容到剪贴板
代码:
//+------------------------------------------------------------------+
//| CloseOrderBuy function                                           |
//+------------------------------------------------------------------+
int CloseOrderBuy(int MAGIC)//CloseOrderBuy(Magic)
  {
//----
   for ( int z = OrdersTotal() - 1; z >= 0; z -- )
   {
     if ( !OrderSelect( z, SELECT_BY_POS ) )
     {
       Print("OrderSelect(", z, ",SELECT_BY_POS) - Error #",GetLastError() );
       continue;
     }
     if (OrderSymbol()!=Symbol())continue;
     if (OrderMagicNumber() != MAGIC )continue;
     if (OrderType()==OP_BUY)
     {
       if (!OrderClose(OrderTicket(), OrderLots(), Bid, 3))
       Print("OrderClose(",OrderTicket(), ",Buy) - Error #",GetLastError() );
     }
   }
//----
   return(0);
  }
这是一个买单关仓函数,关闭以MAGIC标记的成交买单。

TOP

谢谢版主的回答。
上边的程序我仔细读了下。 我已经知道OrderSelect的选择pos和SELECT_BY_TICKET 的区别,pos 是按照下单的顺序选, ticket是按照订单号码选。
我郁闷就在这里呢。
你看我的代码。
    for ( int m=1;m<=totalorders;m++)
        {
         if(OrderType() == OP_BUY || OrderType() == OP_SELL)
         {
         OrderSelect(m,SELECT_BY_POS,MODE_TRADES);
         currentprofit=OrderTakeProfit()+currentprofit;
         }
        }
     Comment("Current profit is","  ",currentprofit);

TOP

回复 12楼 的帖子

1、去读上面的代码吧,你没读懂。for不对。m从0开始。
2、OrderType() 是针对OrderSelect()选中的订单有效。因此次序错了。

TOP

版主 谢谢了。。问题我找到了。是OrderProfit()  不是OrderTakeProfit()

我命令用错了。感谢!

TOP

回复 14楼 的帖子

问题很严重。
OrderType() 是针对OrderSelect()选中的订单有效。因此次序错了。

TOP

弄明白了。 搞定了。。谢谢版主。

TOP

 16 12
发新话题