初学者的问题 MQL4 MT4 MetaTrader 4 - 页 5

 
伙计们,请告诉我测试器出了什么问题。它 在 "所有点位,最准确的方法 "模式下显示开盘价,而在其他模式下也是如此。
在测试器中,MT4散装货量也不充足
附加的文件:
 

你能告诉我为什么每次打勾 都会打开吗?

void OnTick()
  {
   Alert(Sborinfo(Magic));
   if(Sborinfo(Magic)<=0)
     {
      MassivPrice(step); 
      tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,0,0,0,NULL,0,0,Blue);
      if(tiket>=0
         LastPrice=Ask
      else LastPrice=-1
     }
   MassivPrice(step);
   tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,0,0,0,NULL,0,0,Red);
   if(tiket>=0)
      LastPrice=Bid;
   else LastPrice=-1;
  }
//+------------------------------------------------------------------+
int Sborinfo(int magic)
  {
   for(int i=0; i<OrdersTotal(); i++)
     {
      Print("колличество ордеров ",kol);
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==magic)
         kol++;
     }
   Print("новые ордера ",kol);
   return(kol);
  }
 
Ibragim Dzhanaev:

你能告诉我为什么每次打勾 都会打开吗?

因为我总是在这种模式下测试

void OnTick()
  {
   Alert(Sborinfo(Magic));
   if(Sborinfo(Magic)<=0)
     {
      MassivPrice(step); 
      tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,0,0,0,NULL,0,0,Blue);
      if(tiket>=0
         LastPrice=Ask
      else LastPrice=-1
     }
   MassivPrice(step);
   tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,0,0,0,NULL,0,0,Red);
   if(tiket>=0)
      LastPrice=Bid;
   else LastPrice=-1;
  }
//+------------------------------------------------------------------+
int Sborinfo(int magic)
  {
   for(int i=0; i<OrdersTotal(); i++)
     {
      Print("колличество ордеров ",kol);
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==magic)
         kol++;
     }
   Print("новые ордера ",kol);
   return(kol);
  }
附加的文件:
 
Ibragim Dzhanaev:

你能告诉我为什么每次勾选 都会打开吗?

因为代码就是这样写的。

简单地说,你的算法是这样的:如果没有订单,就打开买入,在每一个刻度,就打开卖出。

 
Vitalie Postolache:

因为代码就是这样写的。

简单地说,你的算法是这样的:如果没有订单,就开一个买入,在每一个点,就开一个卖出。

你怎样才能改变代码,使其在没有附加条件的情况下工作?
Alert(Sborinfo(Magic));
  // Closse(Magic);
   if(Sborinfo(Magic)==0)
     {
     Print("количество ордеров ",Sborinfo(Magic));
      MassivPrice(step);
      if(OrdersTotal()<2)// без таких условий
         tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,slippage,0,0,NULL,0,0,Green);
      if(tiket>=0)
         LastPrice=Ask;  
     }

   MassivPrice(step);
   if(OrdersTotal()<2)// без таких условий
      tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,slippage,0,0,NULL,0,0,Red);
   if(tiket>=0)
      LastPrice=Bid;
  
  }
//+------------------------------------------------------------------+
int Sborinfo(int magic)
  {
  kol=0;
   for(int i=0; i<OrdersTotal(); i++)
     {
     Print(" чему ровно кол " , kol );
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==magic)
      {
      Print(" ордера после " , kol );
      
        // kol++;
         }
     }
   return(kol);
  }
 
Ibragim Dzhanaev:
你如何改变代码,使其在没有附加条件的情况下工作?

但你不能,如果你需要既买又卖并限制其数量。只是我不会看OrdersTotal(),而会计算买入多少和卖出多少

再说一遍,如果你随后使用OrdersTotal(),为什么还需要这个 "if(Sborinfo(Magic)==0)"

 
Vitalie Postolache:

但你不能,如果你需要既买又卖并限制其数量。只是我不会看OrdersTotal(),而会计算买入多少和卖出多少

再说一遍,如果你随后使用OrdersTotal(),为什么需要这个 "if(Sborinfo(Magic)==0)"

你是说像这样吗?是否有其他选择--更简单?
{
  CloseFirst(Magic);
   int b=0;
   int s=0;
   for(int i=0; i<=OrdersTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol )
        {
         if(OrderType()==OP_BUY)
            b++;
         if(OrderType()==OP_SELL)
            s++;
        }
   if(b==0)
      tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,slippage,0,0,NULL,Magic,0,Green);
  if(s==0)
      tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,slippage,0,0,NULL,Magic,0,Red);
      }
 

同志们!我有一个问题。
专家顾问根据前一天的极值,在当天开始的00:00开启挂单。

在工作日,一切正常,但随着周一的开盘,挂单不是放在周五的极值,而是放在周四的水平,不知为何怎么会呢?

OpenTime="00:00";
currtime=TimeToStr(TimeCurrent(),TIME_MINUTES);
Format=Digits();
DH=NormalizeDouble(iHigh(NULL,PERIOD_D1,1),Format) ;
DL=NormalizeDouble(iLow(NULL,PERIOD_D1,1),Format);
if (currtime==OpenTime)
{
отложки
}
 
Ibragim Dzhanaev:
你是说像这样吗?还有其他选择吗--更简单的?

是的,这就对了。有多简单?

 
Vitalie Postolache:

是的,这就对了。能有多简单呢?

你是否碰巧知道关于数组的任何课程?如果你有,请把链接发给我。
原因: