Ваши вопросы по языку MQL4

MakarFX

Элитный участник
Код:
Expand Collapse Copy
double Stopi0()//Установка стопов по фиксированному значению стоплоса
  {
   for(int y=1; y<=OrdersTotal(); y++)
     {
      if(OrderSelect(y, SELECT_BY_TICKET)==true)
         {
          if(OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
             {
             !!! StopLoss2 = Bid-(MarketInfo(Symbol(),33)*Point)-(StopLoss*Point);
             };
           }
         }
     }
   return(StopLoss2);
  };
//+------------------------------------------------------------------+
 на той строчке где 3 !выдает ошибку: possible loss of data due to type conversion    Umr.mq4    433    25

на той строчке где 3 !выдает ошибку: possible loss of data due to type conversion Umr.mq4 433 25 Подскажите почему пожалуйста.
Какой тип переменной "StopLoss2"? Должна быть double
 

star603

Новичок форума
Какой тип переменной "StopLoss2"? Должна быть double
Такая запись как? Скажите пожалуйста

Код:
Expand Collapse Copy
double Stopi0(double StopLoss2)//Установка стопов по фиксированному значению стоплоса
  {
   for(int y=1; y<=OrdersTotal(); y++)
     {
      if(OrderSelect(y, SELECT_BY_TICKET)==true)
         {
          if(OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
             {
              StopLoss2 = Bid-(MarketInfo(Symbol(),33)*Point)-(StopLoss*Point);
             };
           }
         }
     }
   return(StopLoss2);
  };
Плюс эту строчку нормализовать надо будет думаю.
Код:
Expand Collapse Copy
 StopLoss2 = Bid-(MarketInfo(Symbol(),33)*Point)-(StopLoss*Point);
 

star603

Новичок форума
Покажи как прописано.
sinput string iT_Note = " --== Вводимые значения данных ==-- ";
extern int StopLoss = 20;//убытки
int StopLoss2;
extern int TakeProfit = 700;//прибыль
extern int Slippage = 3;//проскальзывание
extern int Magic = 677687;
extern double RISK = 0.01;
extern double Lot_2 = 0.01;
extern bool retorga = true;//Включение режима торговли
 

AlexeNP

Гуру форума
Такая запись как? Скажите пожалуйста

Код:
Expand Collapse Copy
double Stopi0(double StopLoss2)//Установка стопов по фиксированному значению стоплоса
  {
   for(int y=1; y<=OrdersTotal(); y++)
     {
      if(OrderSelect(y, SELECT_BY_TICKET)==true)
         {
          if(OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
             {
              StopLoss2 = Bid-(MarketInfo(Symbol(),33)*Point)-(StopLoss*Point);
             };
           }
         }
     }
   return(StopLoss2);
  };
Плюс эту строчку нормализовать надо будет думаю.
Код:
Expand Collapse Copy
 StopLoss2 = Bid-(MarketInfo(Symbol(),33)*Point)-(StopLoss*Point);
фиговая запись от начала до конца... я человек пожилой уже, склероз у меня и я не помню что такое MarketInfo. Поэтому, по своему пропишу...
Код:
Expand Collapse Copy
//Установка стопов по фиксированному значению стоплоса
double Stopi0(ushort StopLoss2)//Ахтунг! StopLoss2 - целое неотрицательное число!
  {
   /*это хз чё
    for(int y=1; y<=OrdersTotal(); y++)
      {
       if(OrderSelect(y, SELECT_BY_TICKET)==true)
          {
           if(OrderMagicNumber()==Magic)
            {
             if(OrderType()==OP_BUY)
              {
               StopLoss2 = Bid-(MarketInfo(Symbol(),33)*Point)-(StopLoss*Point);
              };
            }
          }
      }
    return(StopLoss2);
    */
//так напишем
   double StopLoss=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)
         if(OrderType()==OP_BUY)
            StopLoss=SymbolInfoDouble(NULL,SYMBOL_BID)-MathMax(SymbolInfoInteger(NULL,SYMBOL_TRADE_STOPS_LEVEL),StopLoss2)*_Point;
   return(NormalizeDouble(StopLoss,_Digits));
  }
 

MakarFX

Элитный участник
sinput string iT_Note = " --== Вводимые значения данных ==-- ";
extern int StopLoss = 20;//убытки
int StopLoss2;
extern int TakeProfit = 700;//прибыль
extern int Slippage = 3;//проскальзывание
extern int Magic = 677687;
extern double RISK = 0.01;
extern double Lot_2 = 0.01;
extern bool retorga = true;//Включение режима торговли
int StopLoss2;
поменяй на
double StopLoss2;
и оставь функцию такой
Код:
Expand Collapse Copy
double Stopi0() //Установка стопов по фиксированному значению стоплоса
  {
   for(int y=1; y<=OrdersTotal(); y++)
     {
      if(OrderSelect(y, SELECT_BY_TICKET)==true)
         {
          if(OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
             {
              StopLoss2 = Bid-(MarketInfo(Symbol(),33)*Point)-(StopLoss*Point);
             }
           }
         }
     }
   return(StopLoss2);
  }
 
Последнее редактирование:

star603

Новичок форума
фиговая запись от начала до конца... я человек пожилой уже, склероз у меня и я не помню что такое MarketInfo. Поэтому, по своему пропишу...
Код:
Expand Collapse Copy
//Установка стопов по фиксированному значению стоплоса
double Stopi0(ushort StopLoss2)//Ахтунг! StopLoss2 - целое неотрицательное число!
  {
   /*это хз чё
    for(int y=1; y<=OrdersTotal(); y++)
      {
       if(OrderSelect(y, SELECT_BY_TICKET)==true)
          {
           if(OrderMagicNumber()==Magic)
            {
             if(OrderType()==OP_BUY)
              {
               StopLoss2 = Bid-(MarketInfo(Symbol(),33)*Point)-(StopLoss*Point);
              };
            }
          }
      }
    return(StopLoss2);
    */
//так напишем
   double StopLoss=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)
         if(OrderType()==OP_BUY)
            StopLoss=SymbolInfoDouble(NULL,SYMBOL_BID)-MathMax(SymbolInfoInteger(NULL,SYMBOL_TRADE_STOPS_LEVEL),StopLoss2)*_Point;
   return(NormalizeDouble(StopLoss,_Digits));
  }
Код:
Expand Collapse Copy
  double StopLoss=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)
         if(OrderType()==OP_BUY)
            StopLoss=SymbolInfoDouble(NULL,SYMBOL_BID)-MathMax(SymbolInfoInteger(NULL,SYMBOL_TRADE_STOPS_LEVEL),StopLoss2)*_Point;
   return(NormalizeDouble(StopLoss,_Digits));
Твоя запись вообьще не понятна только этот кусок не совсем понятен. но больше эем другая часть. Я же выбор стоплоса через енум собираюсь прописать. и чтобы соответственно выбору подставлялся
 

star603

Новичок форума
Запутаешь человека, ему пока надо разобраться с "int" и "double"
Код:
Expand Collapse Copy
double Stopi0()//Установка стопов по фиксированному значению стоплоса
  {
   for(int y=1; y<=OrdersTotal(); y++)
     {
      if(OrderSelect(y, SELECT_BY_TICKET)==true && OrderMagicNumber()==Magic)
         {
            if(OrderType()==OP_BUY)
             {
              StopLoss2 = Bid-(MarketInfo(Symbol(),MODE_FREEZELEVEL)*Point)-(StopLoss*Point);
               Далее модернизируем ордер с новым сл
             };
         }
     }
   return(StopLoss2);
  };

Теперь ошибок и предупреждений не выдает. Оно еще несколько таких выборов будет.
Код:
Expand Collapse Copy
enum stopi
  {
   ba,//Фиксированные стопы
   bc,//Торговля без стопов
   bd,//Задаваемые стопы
   bf,//Стопы по МА
   bs,//Стопы по Сар
   bg,//Стопы по теням свечей
   bz,//Стопы по лоу свечам
   br,//Стопы по определенным пунктам
   bt//Торговля в безубыток
  };

Тоже самое буду делать и с тп
 

AlexeNP

Гуру форума
свой вариант попробую реализовать на 90% должно сработать
на 100% работать не будет...

for(int y=1; y<=OrdersTotal(); y++)
Чтобы проще - ордера хранятся в массиве с размером OrdersTotal, т.е. для перебора всех ордеров индекс меняется с 0 до OrdersTotal.
if(OrderSelect(y, SELECT_BY_TICKET)==true && OrderMagicNumber()==Magic)
ты выбираешь ордер по тикету или по индексу? тут уж попробуй определиться сам) про то, что не происходит проверка по символу промолчу
потому, как символ важен, так как значение MarketInfo(Symbol(),MODE_FREEZELEVEL) у разных символов вообще говоря не совпадает... ну и всякое по мелочи - например уровень минимального стопа
 

Ugar

Гуру форума
на 100% работать не будет...

for(int y=1; y<=OrdersTotal(); y++)
Чтобы проще - ордера хранятся в массиве с размером OrdersTotal, т.е. для перебора всех ордеров индекс меняется с 0 до OrdersTotal.
От 0 до OrdersTotal()-1.
for(int y=0; y<OrdersTotal(); y++)

Или в обратном порядке. Если будет закрытие ордеров в этом цикле, то именно этот вариант рабочий.
for(int y=OrdersTotal()-1; y>=0; y--)
 
Верх