初学者的问题 MQL5 MT5 MetaTrader 5 - 页 414

 
Leanid Aladzyeu:

唾液

由于类型转换可能造成的数据损失 .mq4 1697 29

在SL的类型Doble。

现在的编译器很严格,应该是这样的,MarketInfo返回类型为double

sl = NormalizeDouble(sl,(int)MarketInfo(Symbol(),MODE_DIGITS));
 
Alexey Volchanskiy:

现在的编译器很严格,应该是这样的,MarketInfo返回类型为double

"sumbol "变量是正确的,我把它作为修改器包装中的一个变量。

谢谢你,我把(int)和一切都很好

我不知道我以前是怎么做的,我写EA的 经验是21天))

我不知道我写了多久的EA,我也不知道如何正确地做。)

 

Leanid Aladzyeu:

我不知道我以前是怎么写EA 的(我已经 了21天了))。而我的EA正坚持不懈地在免费EA中名列前茅))

那么,你是非常幸运的,在600版之前,旧的MQL4是很可怕的))。请把我的EA的链接发给我,可能在你的邮箱里。
 
Alexey Volchanskiy:
那么,你很幸运,在600版之前,旧的MQL4是很糟糕的))请把MQL4专家顾问的链接发给我。
为我的绰号和产品干杯。
 

由于某些原因,它在最后一行出现了错误。

'}'- 不是所有的控制路径都会返回一个值 Expert4.mq4

每个非void函数都应该以返回操作符结束。

我只是看了视频教程中的这段代码,但它可能是为一个旧的构建。



#include#include <stderror.mqh>。

//+------------------------------------------------------------------+
//|专家4。ǞǞǞ
//|米哈伊尔 |
//||
//+------------------------------------------------------------------+
#财产版权"米哈伊尔"
#属性链接""
#财产版本 "1.00"
#属性严格

int signal = 1;

int start()
{
如果(信号==1)
{
OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, "Test", 123, 0, Blue) 。
}
return(0);
}
//+------------------------------------------------------------------+
int OrderSendX (string symbol, int cmd, double volume, double price, int slippage,double stoploss,
double takeprofit,string comment=NULL,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
{
int err = GetLastError()。
err = 0。
bool exit_loop = false。
int ticket = -1;

int Retry = 10;
int cnt = 0。
如果(cmd == OP_BUY || cmd == OP_SELL)
{
while(!exit_loop)
{
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color)。
err = GetLastError()。

switch(err)
{
case ERR_NO_ERROR:
exit_loop = true。
突破。

{ case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
cnt++。
突破。

case ERR_PRICE_CHANGED:


RefreshRates()。
继续。

默认情况下。
exit_loop +true。
突破。

}
如果(cnt> Retry)
exit_loop = true。


if (!exit_loop)
{
睡眠(1000)。
RefreshRates()。

}
否则
{
if(err != ERR_NO_ERROR)
{
打印("ERROR: " + err)。

}

}

如果(err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES)。
return(ticket)。
}

Print("Error: order open failed after" + cnt + "atempts");
返回(-1)。


}//while
}//if
}//exit
 
Mikhail Nikolaev:

这里....

}


}


return(ticket)。

}

 
Mikhail Nikolaev:

利安尼德-阿拉德兹耶乌

在论坛中正确插入代码

 
Mikhail Nikolaev:

由于某些原因,它在最后一行出现了错误。

'}'- 不是所有的控制路径都会返回一个值 Expert4.mq4

每个非void函数都应该以返回操作符结束。

我刚刚看了视频教程中的这段代码,但它可能是针对旧的构建。



#include#include <stderror.mqh>。

//+------------------------------------------------------------------+
//|专家4。ǞǞǞ
//|米哈伊尔 |
//||
//+------------------------------------------------------------------+
#财产版权"米哈伊尔"
#属性链接""
#财产版本 "1.00"
#属性严格

int signal = 1;

int start()
{
如果(信号==1)
{
OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, "Test", 123, 0, Blue) 。
}
return(0);
}
//+------------------------------------------------------------------+
int OrderSendX (string symbol, int cmd, double volume, double price, int slippage,double stoploss,
double takeprofit,string comment=NULL,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
{
int err = GetLastError()。
err = 0。
bool exit_loop = false。
int ticket = -1;

int Retry = 10;
int cnt = 0。
如果(cmd == OP_BUY || cmd == OP_SELL)
{
while(!exit_loop)
{
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color)。
err = GetLastError()。

switch(err)
{
case ERR_NO_ERROR:
exit_loop = true。
突破。

{ case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
cnt++。
突破。

case ERR_PRICE_CHANGED:


RefreshRates()。
继续。

默认情况下。
exit_loop +true。
突破。

}
如果(cnt> Retry)
exit_loop = true。


if (!exit_loop)
{
睡眠(1000)。
RefreshRates()。

}
否则
{
if(err != ERR_NO_ERROR)
{
打印("ERROR: " + err)。

}

}

如果(err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES)。
return(ticket)。
}

Print("Error: order open failed after" + cnt + "atempts");
返回(-1)。


}//while
}//if
}//exit

伙计,格式化代码真的这么难吗?原则上,我甚至不会去看它--它是一种痛苦的眼睛。
 
我又滞后了,装不下了
 
Leanid Aladzyeu:
我又滞后了,我不能让它适应。

这很好,你用的是什么浏览器?试着换成另一个。我有FFox。我在代码最后的注释中给出了答案。

#include <stderror.mqh>
//+------------------------------------------------------------------+
//|                                                      Expert4.mq4 |
//|                                                          Mikhail |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Mikhail"
#property link      ""
#property version   "1.00"
#property strict

int signal = 1;

int start()
{
   if (signal == 1)
   {
      OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, "Test", 123, 0, Blue);
   }
   return(0);
}
//+------------------------------------------------------------------+
int OrderSendX (string symbol, int cmd, double volume, double price, int slippage,double stoploss,
               double takeprofit, string comment=NULL, int magic=0, datetime expiration=0,color arrow_color=CLR_NONE)
{
   int err = GetLastError();
   err = 0;
   bool exit_loop = false;
   int ticket = -1;
  
   int Retry = 10;
   int cnt = 0;
   if (cmd == OP_BUY || cmd == OP_SELL)
   {
      while(!exit_loop)
      {
         ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color);
         err = GetLastError();
        
         switch(err)
         {
            case ERR_NO_ERROR:
            exit_loop = true;
            break;
           
            case ERR_SERVER_BUSY:
            case ERR_NO_CONNECTION:
            case ERR_INVALID_PRICE:
            case ERR_OFF_QUOTES:
            case ERR_BROKER_BUSY:
            case ERR_TRADE_CONTEXT_BUSY:
            cnt++;
            break;
           
            case ERR_PRICE_CHANGED:
           
          
            RefreshRates();
            continue;
           
            default:
               exit_loop +true;
               break;
         
         }
         if (cnt> Retry)
            exit_loop = true;
          
           
         if (!exit_loop)
            {
               Sleep(1000);
               RefreshRates();
              
            }
            else
               {
                  if(err != ERR_NO_ERROR)
                  {
                  Print ("ERROR: " + err);
                 
                  }
            
               }
              
               if(err == ERR_NO_ERROR)
               {
                  OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES);
                  return(ticket);
               }
              
               Print("Error: order open failed after" + cnt + "atempts");
               return(-1);
           
           
}//while
}//if
// тут надо вернуть какое-то значение, компилятор не понимает, что у вас есть return-ы внутри while, он не умеет анализировать код. Он ожидает, что при выходе из функции будет возвращаться значение
}//exit