Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1227

 

Olá a todos, apenas uma rápida atualização no tópico: Há uma pergunta no código:

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);

Ao compilar, ele gera um aviso:"possível perda de dados devido à conversão do tipo ...". O que ele precisa? Não é tão crítico, mas eu gostaria de saber.


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

Olá a todos, apenas uma rápida atualização no tópico: Há uma pergunta no código:

Ao compilar, ele gera um aviso:"possível perda de dados devido à conversão do tipo ...". O que ele precisa? Não tão crítico, mas gostaria de saber.


O próprio motor do site inseriu um link para a resposta, e há um exemplo de conversão explícita do tipo .........

//--- ускорение свободного падения
   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:

Olá a todos, apenas uma rápida atualização no tópico: Há uma pergunta no código:

Ao compilar, ele gera um aviso:"possível perda de dados devido à conversão do tipo ...". O que ele precisa? Não é tão crucial assim, mas eu gostaria de saber.


Você tem não só um aviso, mas também um erro. Você tem certeza de que é esse código em particular que está compilando?

É assim que deve ser:

   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));

É só que sem escavar no código - para não receber erros e avisos.

E se você pensar nisso, você está misturando o quente e o molhado

 
Artyom Trishkin:

Você não só tem um aviso, mas também um erro. Você tem certeza de que este é o código que você está compilando?

É assim que deve ser:

É só que sem escavar no código - para não receber erros e avisos.

E se você pensar nisso, está misturando as coisas.

Obrigado.

Não me repreenda, estou apenas aprendendo - tentando entender o código dos outros. Parece-me que é a maneira mais rápida de aprender.

Eu não entendo porque ele precisa de conversão de tipo, se todas as variáveis são int e retornam valores via symbolinfointeger ?

 
Sayberix:

Obrigado.

Não me repreenda muito, estou apenas aprendendo - tentando dar sentido ao código das outras pessoas. Parece-me que esta é a maneira mais rápida de aprender.

Não entendo porque precisa de conversão de tipo, se todas as variáveis são int e retornam valores através do símboloinfointeger ?

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

Bom dia, caros programadores!

Como posso fazer com que minha EA abra posições independentemente de posições abertas manualmente ou outras posições abertas por outra EA? Eu tentei fazer isso com magia, mas não funcionou. Eu tentei fazer isso com magia, mas não funcionou:

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:

Bom dia, caros programadores!

Como posso fazer com que minha EA abra posições independentemente de posições abertas manualmente ou outras posições abertas por outra EA? Eu tentei fazer isso com magia, mas não funcionou. Aqui está o código:


Você está faltando campos e nenhuma ordem está selecionada para verificar o número

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);
}
 
Como retirar dinheiro de uma conta

 
Ajuda... Coloque-o dentro e não pode tirá-lo
 
Georgiy Liashchenko:


Você tem campos em falta e a ordem para verificar o número não está sendo destacada

Eu fiz. Eu não o fiz. Abre em lotes. A magia está ignorando-a.


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);
}

Razão: