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

 

大家好,我只是简单地回顾一下这个主题:代码中有一个问题。

int stoplevel;
int  MinimumUseStopLevel;

// Calculate stoplevel as max of either STOPLEVEL or FREEZELEVEL
   stoplevel = fmax(SymbolInfoInteger(_Symbol,MODE_FREEZELEVEL), SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL));
// Then calculate the stoplevel as max of either this stoplevel or MinimumUseStopLevel
   stoplevel = fmax(MinimumUseStopLevel, stoplevel);

在编译时,它产生了一个警告:" 由于类型转换,可能会丢失数据......"。他需要什么?这不是那么关键,但我想知道。


Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL5 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...
 
Sayberix:

大家好,我只是简单地回顾一下这个主题:代码中有一个问题。

在编译时,它产生了一个警告:" 由于类型转换,可能会丢失数据......"。他需要什么?不是那么关键,但想知道。


该网站引擎自己插入了一个答案的链接,并有一个明确的类型转换的例子.........

//--- ускорение свободного падения
   double g=9.8;
   double round_g=(int)g;
   double math_round_g=MathRound(g);
   Print("round_g = ",round_g);
   Print("math_round_g =",math_round_g);
/*
   Результат:
   round_g = 9
   math_round_g = 10
*/
 
Sayberix:

大家好,我只是简单地回顾一下这个主题:代码中有一个问题。

在编译时,它产生了一个警告:" 由于类型转换,可能会丢失数据......"。他需要什么?这并不那么关键,但我想知道。


你不仅有一个警告,而且还有一个错误。你确定是你正在编译的这段特定代码吗?

应该是这样的。

   int stoplevel=0;
   int MinimumUseStopLevel=0;

// Calculate stoplevel as max of either STOPLEVEL or FREEZELEVEL
   stoplevel = int(fmax(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL), SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)));
// Then calculate the stoplevel as max of either this stoplevel or MinimumUseStopLevel
   stoplevel = int(fmax((int)MinimumUseStopLevel,(int)stoplevel));

只是没有挖掘代码--所以你不会得到错误和警告。

如果你想一想,你是在把温暖和湿润混合在一起。

 
Artyom Trishkin:

你不仅有一个警告,你还有一个错误。你确定这是你正在编译的代码吗?

这是它应该有的样子。

只是没有挖掘代码--所以你不会得到错误和警告。

如果你想一想,你就会把事情搞混。

谢谢你。

别骂我,我只是在学习--试图理解别人的代码。在我看来,这是最快速的学习方法。

我不明白为什么他需要类型转换,如果所有的变量都是int,返回值是通过符号infointeger?

 
Sayberix:

谢谢你。

不要过多地责备我,我只是在学习--试图弄懂别人的代码。在我看来,这是最快的学习方法。

我不明白为什么需要类型转换,如果所有的变量都是int,而返回值是通过符号infointeger?

SymbolInfoInteger()返回long
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
  • www.mql5.com
2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром. Если функция используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с...
 

亲爱的程序员们,你们好!

如何让我的EA开仓,而不考虑手动开仓或其他EA开仓的情况?我试图用魔法来做,但没有成功。我试图用魔法来做,但没有成功。

datetime some_time=TimeCurrent();
extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;


int start()
{

int send;
                                      
double SL=50;                                   
double TP=50;                       
double Lots=3;       

      
//&&(OrderMagicNumber() == MagicNumber)
//&&(OrdersTotal() ==0)&&    
 
              
if ((Close[0]>High[1])&&(OrderMagicNumber() != MagicNumber)) 
{
send=OrderSend(Symbol3,OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}

if ((Close[0]<Low[1])&&(OrderMagicNumber() != MagicNumber))
{
send=OrderSend(Symbol3,OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}

return(0);
}
 
Alexey Belyakov:

亲爱的程序员们,你们好!

如何让我的EA开仓,而不考虑手动开仓或其他EA开仓的情况?我试图用魔法来做,但没有成功。以下是代码。


你缺少字段,没有选择订单来检查号码

int n = 0;
for(int i = OrdersTotal(); i >= 0; i--) {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if(OrderSymbol() != _Symbol)continue;
      if(OrderMagicNumber() != magic)continue;     
n++;
}

if(n == 0){
OrderSend(_Symbol, _type, lot, price, 0, sl, tp, comment, magic, 0, clrNONE);
}
 
如何从账户中提取资金

 
帮助...放进去又拿不出来
 
Georgiy Liashchenko:


你有缺失的字段,而且检查号码的顺序没有被强调。

我做到了。我没有。它是成包打开的。魔术公司无视它。


datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;


int start()
{

int send;
                                     
double SL=200;                                   
double TP=200;                       
double Lots=1;       

int n = 0;
for(int i = OrdersTotal(); i >= 0; i--) 
{
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if(OrderSymbol() != "EURUSD")continue;
      if(OrderMagicNumber() != MagicNumber)continue;     
n++;
}
          
//&&(OrderMagicNumber() == MagicNumber)
//&&(OrdersTotal() ==0)&&    
             
if ((Close[0]>High[1])&&(n==0))
{
send=OrderSend("EURUSD",OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}

if ((Close[0]<Low[1])&&(n==0))  
{
send=OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}

return(0);
}

原因: