新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 39

 
trader781:
我不知道该如何解释。但这绝对是一部杰作。
我告诉你,他们在这里喜欢挖苦人)。而特里什金对此不以为然。 他说他会有一个密码来帮助。
 
Movlat Baghiyev:
我告诉你,他们在这里喜欢挖苦人 )))特里什金也不以为然。 他说,该守则将有助于。

我和你一样是新手,但即使是我也有很多问题。

for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i。SELECT_BY_POS)==true)
{
if(OrderSymbol()!=Symbol() ||OrderMagicNumber()!=Magic)继续
if(OrderType()==OP_BUY||OrderType()==OP_SELL) p++;
if(OrderType()==OP_BUYSTOP)
如果(signal_bue)OrderDelete(OrderTicket());
else b++;
如果(OrderType()==OP_SELLSTOP)
if(signal_sell)OrderDelete(OrderTicket() );
else s++;
}

}

1)你在哪里得到b++

2) 你从哪里得到s++

3)如果(signal_bue)是什么别的?

以及其余的代码。如果我冒犯了你,很抱歉。

 
这可能是正确的做法。
//+------------------------------------------------------------------+
//|                                                      ОТЛОЖКИ.mq4 |
//+------------------------------------------------------------------+
extern double StopLoss     = 100; //Стоплосс ордера  
extern double TakeProfit   = 150; //Тейкпрофит ордера
extern double TrailingStop = 100; // трал
extern int    Delta        = 100; //Расстояние от цены для установки ордера
extern double LOT          = 0.1; //Объём позиции
extern int    Magic        =2;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  if (TrailingStop!=0) Trailing();
  
   //ИНДИКАТОР RSI
   double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0);
   double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1);
  
   int b = 0, s = 0, p = 0, res = 0;

   double BuyPrice=Ask+Delta*Point;
   double SellPrice=Bid-Delta*Point;
  
   for (int i=0; i<OrdersTotal(); i++)
    {
     if (OrderSelect(i, SELECT_BY_POS)==true)
      {
        if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        if (OrderType()==OP_BUYSTOP)
        {
           if(RSI0<50&&RSI1>50)
                OrderDelete(OrderTicket());
            else
                b++;
        }
        if (OrderType()==OP_SELLSTOP)
        {
           if(RSI0>50&&RSI1<50)
                OrderDelete(OrderTicket());
              else
                s++;
        }
      }
    }

   double SL,TP; // < !!!!!!!!! эти переменные не используются, можно удалить

//---- buy stop
   if(RSI0>50&&RSI1<50 && p<1 && b<1) // < !!!!!!!!!
     {
      res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue);
     }        
//---- sell stop  
   if(RSI0<50&&RSI1>50 && p<1 && s<1) // < !!!!!!!!!
     {
      res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red);
     }
//----
   return(0);
}
 
Movlat Baghiyev:
我告诉你,他们在这里喜欢挖苦人)。而特里什金对此很不以为然。 他说他会帮助我解决密码问题。

这样就更简单了。

void OrderDelete_(int Type)
  {
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         if(OrderType()==Type)
            OrderDelete(OrderTicket());
        }
     }
  }

它在void OnTick()函数之外的某个地方。

if (сигнал_bue) OrderDelete_(OP_SELLSTOP);

if (сигнал_sell)OrderDelete_(OP_BUYSTOP);

而这是在void OnTick()函数体内

 
Alekseu Fedotov:


而这是在void OnTick()函数体中 的内容

请在代码中进行更正
 
trader781:

好的。

算是完成了我能做的。说明已经完成。目的是要了解为什么它不能按我的意愿工作。

if()块别的东西 。它真的是这样的吗?

更进一步。Counts()函数接受一个未初始化的全局变量 count,此外,该变量在函数中再次被定义。

Counts()函数对订单进行计数,但将它们与一些票据进行比较,而这些票据在主函数中发生了几次变化。但在函数操作过程中,票面价值是相同的。那么,该函数将计算出多少个订单?是不是不止一个?

这种形式的函数不需要参数。 只要调用它,让它返回结果。

下一步。函数FindLastOType()再次与票据进行比较。你能保证它与有效的票据相比吗?当找到第一个具有必要的神奇数字和符号的订单时,中断循环,然后返回订单类型,这不是更简单吗?

与FindLastOrderOpenPrice()和FindLastLot()相同。

ModifyOrders()函数让我惊恐万分,为了避免晚上做噩梦,我有很长一段时间不会去研究它......

 
Movlat Baghiyev:
请在代码中进行更正

试试吧 ^_~

extern double StopLoss     = 100; //Стоплосс ордера  
extern double TakeProfit   = 150; //Тейкпрофит ордера
extern double TrailingStop = 100; // трал
extern int    Delta        = 100; //Расстояние от цены для установки ордера
extern double LOT          = 0.1; //Объём позиции
extern int    Magic        =2;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer


//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer


  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  
  int  res = 0;

//ИНДИКАТОР RSI
   double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0);
   double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1);

   double BuyPrice=Ask+Delta*Point;
   double SellPrice=Bid-Delta*Point;
  
//---- buy stop
   if(RSI0>50&&RSI1<50 && Number(OP_BUYSTOP)<0 && Number(OP_BUY)<1) // < !!!!!!!!!
     {
      res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue);
     }        
//---- sell stop  
   if(RSI0<50&&RSI1>50 && Number(OP_SELLSTOP)<0 && Number(OP_SELL)<1) // < !!!!!!!!!
     {
      res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red);
     }
//----  
  
  
if (RSI0>50&&RSI1<50) OrderDelete_(OP_SELLSTOP);

if (RSI0<50&&RSI1>50)OrderDelete_(OP_BUYSTOP);

  }

//+------------------------------------------------------------------+
void OrderDelete_(int Type)
  {
  bool  r;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         if(OrderType()==Type)
          r = OrderDelete(OrderTicket());
        }
     }
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int Number(int Type)
  {
  int kp=0;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         if(OrderType()==Type)
            kp++;
        }
     }
  return(kp);  
  }
//+------------------------------------------------------------------+
 
阿列克谢-费多托夫,谢谢你,上帝保佑你。
 
Vitalie Postolache:

if()块里面 其他的东西 。难道真的要这样吗?

更进一步。Counts()函数接受一个未初始化的全局变量 count,该变量也在函数本身中再次声明。

Counts()函数对订单进行计数,但将它们与一些票据进行比较,而这些票据在主函数中发生了几次变化。但在函数操作过程中,票面价值是相同的。那么,该函数将计算出多少个订单?是不是不止一个?

在这种形式下,这个函数不需要参数。 只要调用它并让它返回结果。

下一步。函数FindLastOType()再次与票据进行比较。你能保证它与有效的票据相比吗?当找到第一个具有必要的神奇数字和符号的订单时,中断循环,然后返回订单类型,这不是更简单吗?

与FindLastOrderOpenPrice()和FindLastLot()相同。

函数ModifyOrders()让我非常害怕,为了避免晚上做噩梦,我有很长一段时间不会去研究它......

纠正

在其他地方没有其他办法,这将是错误的参数。

它必须考虑到最新的

我会试着改变它。

我试图使用标准的OrderModify(),但如果我同时不断地移动一堆订单,它就会被禁止。

谢谢你的批评。

 
spoiltboy:
是的,那是支架上的一个错字。问题的其余部分是有效的。

bool condition;

if(condition) {}

等于

if(condition==true) {}

и

if(!condition) {}

等同于

if(condition==false) {}

它只是更短,更熟悉。

原因: