Любые вопросы новичков по 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);

при компиляции выдает предупреждение: "possible loss of data due to type conversion ...". Че ему надо? Не так чтобы критично, но хотелось бы знать.


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

Всем привет! Оживлю немного ветку: такой вопрос в коде:

при компиляции выдает предупреждение: "possible loss of data due to type conversion ...". Че ему надо? Не так чтобы критично, но хотелось бы знать.


Движок сайта сам вставил ссылку на ответ, а там есть пример явного приведения типов………

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

Всем привет! Оживлю немного ветку: такой вопрос в коде:

при компиляции выдает предупреждение: "possible loss of data due to type conversion ...". Че ему надо? Не так чтобы критично, но хотелось бы знать.


У вас не только предупреждение, но и ошибка. Уверены, что именно этот код компилируете?

Так нужно:

   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 и возвращаемые значения через symbolinfointeger ?

 
Sayberix:

Спасибо.

Не ругайте сильно, я только учусь - пытаюсь разобраться в чужом коде. Как по мне это самый быстрый способ научиться.

Не понимаю, зачем ему приведение типов, если все переменные int и возвращаемые значения через symbolinfointeger ?

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

Добрый день уважаемые программисты!

Подскажите, как мне сделать чтобы, советник открывал позиции, независимо от позиций открытых вручную, либо вообще других позиций открытых другим советником. Да пытался это сделать при помощи magic, но не получается почему-то. Вот код:

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:

Добрый день уважаемые программисты!

Подскажите, как мне сделать чтобы, советник открывал позиции, независимо от позиций открытых вручную, либо вообще других позиций открытых другим советником. Да пытался это сделать при помощи magic, но не получается почему-то. Вот код:


   У вас пропущены поля и не происходит выделение ордера для проверки номера

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:


   У вас пропущены поля и не происходит выделение ордера для проверки номера

Вставил. Ды не. Открывает пачками. Мagic - игнорирует


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

Причина обращения: