[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 768

 
FoxUA:


我只需要调用函数,我只需要一行 "如果有多于一个的订单....而这就是全部"--而你为我提供了一个完整的功能

下面是我如何存储我的订单数据


这是个简单的问题,把它放在图书馆里。

要计算的订单类型和它的主人被作为输入,它返回未结订单或已结订单的数量。

int ChPos( int TypePos,int Magic) 
{
// возвращает кол-во позицй которые открыты или выставленн отложками с магиком  Magic 
   int i;
   int count=0 ;
   for( i=0; i < OrdersTotal(); i++)         
   {
      if(OrderSelect(i,SELECT_BY_POS)==true) 
       {                                   
           if(OrderType()==OP_BUY && TypePos==OP_BUY && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_SELL && TypePos==OP_SELL && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_BUYLIMIT && TypePos==OP_BUYLIMIT && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_BUYSTOP && TypePos==OP_BUYSTOP && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_SELLLIMIT && TypePos==OP_SELLLIMIT && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_SELLSTOP && TypePos==OP_SELLSTOP && Magic==OrderMagicNumber()){count++;}
       }
    }   
return(count);
}

你可以通过以下方式使用它

如果((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)

 
ivandurak:


这并不复杂,把它放在图书馆里。

输入的是要统计的订单类型和它的主控人,它返回未平仓或已平仓订单的数量。

这可以按以下方式使用

如果((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)

我有这样的功能,我不需要它,我只需要
只有一行 "如果有超过一个的订单,....然后",就这样了

我对你所展示的同一函数的数据存储在这里

int total_order;            // переменная в которой хранится общее количество открытых ордеров в терминале
int my_total_order;         // переменная в которой хранится общее количество открытых ордеров с нашим Magic

这里是它的样子

void Myorders(){
      int cnt;
      total_order = OrdersTotal();
      my_total_order = 0;
      HaveBuyOrder          = false;
      HaveSellOrder         = false;
      HaveBuyStopOrder      = false;
      HaveSellStopOrder     = false;
      HaveBuyLimitOrder     = false;
      HaveSellLimitOrder    = false;
      HaveBuyLimitOrderEnd  = false;
      HaveSellLimitOrderEnd = false;      
      for(cnt = total_order - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Curr_symb && OrderMagicNumber() == Magic) {
         if (OrderType() == OP_BUY)       {HaveBuyOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELL)      {HaveSellOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYSTOP)   {HaveBuyStopOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLSTOP)  {HaveSellStopOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrderEnd = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrderEnd = true; my_total_order++;}
} } }
 

我想我已经得到了。

static int aaa = OrdersHistoryTotal()+OrdersTotal( )

如果(你的条件 &&aaa < OrdersHistoryTotal()+ OrdersTotal() )

{

经营者

aaa=OrdersHistoryTotal()+OrdersTotal()。

}

如果是这样的话,还是把它放到一个考虑到魔术师的功能里比较好.你能告诉我们你在做什么工作吗?如果我没有理解错的话,逻辑有点奇怪,当多开一个订单时,不是更容易开出不大于OpenPosition的订单吗?

你的函数返回未平仓订单和挂单的总数。 有多少订单OP_BUY,如果有OP_BUYLIMIT OP_SELLLIMIT OP_SELL等等,它没有显示。

 
ivandurak:

我已经弄明白了,现在if函数的问题是,我无法弄清楚问题出在哪里。

if(bt==1&&bl==7) 
{OpenBuyStopOrder(Lot,PRBidS);
OpenBuyLimitOrder(Lot*3,PRAskL); 
  if (HaveBuyLimitOrderEnd== true) 
  {ModifyBuyStopOrder(PRAskS);  // Выбираем            
  } }          
  

重点是,第一个值被执行。

如果(HaveBuyLimitOrderEnd==true),这一条就不起作用。
{ModifyBuyStopOrder(PRAskS); //选择
} }

换句话说,如果有一个订单HaveBuyLimitOrderEnd,就用一个价格变化来修改它 PRAskS

我不知道哪里出了问题。 HaveBuyLimitOrderEnd的值取自上述代码中的void Myorders()。

if(bt==1&&bl==7)的值是主要的,所以如果它是真的,就使用以下所有的方法


最有可能的是haveBuyLimitOrderEnd==true,因为我已经设置了OrderLots()==3*Lot,所有的工作只有它修改了0.3手的订单。

 
void Myorders(){
      int cnt;
      total_order = OrdersTotal();
      my_total_order = 0;
      HaveBuyOrder          = false;
      HaveSellOrder         = false;
      HaveBuyStopOrder      = false;
      HaveSellStopOrder     = false;
      HaveBuyLimitOrder     = false;
      HaveSellLimitOrder    = false;
      HaveBuyLimitOrderEnd  = false;
      HaveSellLimitOrderEnd = false;      
      for(cnt = total_order - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Curr_symb && OrderMagicNumber() == Magic) {
         if (OrderType() == OP_BUY)       {HaveBuyOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELL)      {HaveSellOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYSTOP)   {HaveBuyStopOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLSTOP)  {HaveSellStopOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrderEnd = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrderEnd = true; my_total_order++;}
} } }
请注意,它是用红色突出显示的。交易订单的类型是相同的,而管道中的变量设置是不同的,这应该是这样的。
 
ivandurak:
请注意用红色标出的内容。交易订单的类型是相同的,而管道中的变量设置是不同的,这应该是这样的。

是的,应该是这样的,因为有不同的打开功能,我没有对OrderType()提出请求,并要求提供是否打开的标志,但问题不在这个功能上,因为其他请求也不工作,这是我第一次抛出的,而且在相同的功能上正常打开。

所以问题出在操作员的请求上。

 

问题似乎出在其他地方。但你也许应该看看这些代码。

 
Vinin:

问题似乎出在其他地方。但我想我需要看到代码。


这肯定不是在其他地方,其他的都可以,问题是请求(HaveBuyLimitOrderEnd==true)是错误的,所以我在想还能怎么告诉它修改和删除。

或查询本身有误

如果(bs==1&&bl==3)
{OpenBuyLimitOrderEnd(Lot*15,PRAskL);

如果(HaveBuyLimitOrderEnd==true)

{ModifyBuyStopOrder(PRAskS);
} }

 
FoxUA:

是的,应该是这样,因为有不同的打开功能,我没有对OrderType()提出请求,并要求提供是否打开的标志,但问题很可能不在这个功能上,因为其他请求也不工作,这是我第一次抛出,而且在相同的功能上正常打开。

所以问题出在操作者的查询上。

if(bt==1&&bl==7) 
{OpenBuyStopOrder(Lot,PRBidS);
OpenBuyLimitOrder(Lot*3,PRAskL); 
  if (HaveBuyLimitOrderEnd== true) 
  {ModifyBuyStopOrder(PRAskS);  // Выбираем            
  } }         


我不知道在标红的函数中,HaveBuyLimitOrderEnd是否在管道中被设置。 如果不是,你需要在if之前调用Myorders()。否则你就不知道那里有什么。而为了以防万一,标志(变量)是指

HaveBuyOrder = false。
HaveSellOrder = false。
HaveBuyStopOrder = false。
HaveSellStopOrder = false。
HaveBuyLimitOrder = false。
HaveSellLimitOrder = false。
HaveBuyLimitOrderEnd = false。
HaveSellLimitOrderEnd = false。
必须在全局层面进行定义。

 
ivandurak:


我不知道HaveBuyLimitOrderEnd标志在管道中是否被设置成红色。 如果不是,你需要在if之前调用Myorders()。否则你就不知道那里有什么。而为了以防万一,标志(变量)是指

HaveBuyOrder = false。
HaveSellOrder = false。
HaveBuyStopOrder = false。
HaveSellStopOrder = false。
HaveBuyLimitOrder = false。
HaveSellLimitOrder = false。
HaveBuyLimitOrderEnd = false。
HaveSellLimitOrderEnd = false。
必须全局定义。

它是在一个冰冷的水平


bool HaveBuyOrder; // 标志着是否有公开市场的买单。
bool HaveSellOrder; // 标志着公开市场订单的出售。
bool HaveBuyStopOrder; // 未执行的买入订单的标志。
bool HaveSellStopOrder; // 未执行的卖出订单的标志。
bool HaveBuyLimitOrder; // 未执行的买入订单的标志。
bool HaveSellLimitOrder; // 未执行的卖出订单的标志。
bool HaveBuyLimitOrderEnd; // 标志着是否存在未完成的买入订单。
bool HaveSellLimitOrderEnd; // 标志着待定的卖出订单打开

它是在订单开放功能中。

ticket = OrderSend(Curr_symb,OP_BUYSTOP, Lot, PRAskS, Slippage, SL, TP, 0, Magic, 0,CLR_NONE) 。
如果(ticket > 0) {
HaveBuyStopOrder = true。

如果(OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))打印("下买入止损单的功能:", OrderOpenPrice())
}
else Print("错误#", GetLastError(), " 下买入止损单的函数",MarketInfo(Curr_symb,MODE_ASK))。
return(ticket)。
}

因此,其他一切都能正常工作

原因: