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

star603

Новичок форума
Код:
double LOTHIS()
  {
   double hislot;
   for(int y=0; y<=OrdersHistoryTotal()-1; y++)
     {
      if(OrderSelect(y, SELECT_BY_POS,MODE_HISTORY)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
        {
        }
     }
   return(hislot);
  }
//##

Почему выдает эту ошибку:
possible use of uninitialized variable 'hislot' Umr3.mq4 162 11

Ведь я проинициализировал в самой функции.
 

mobidik

-----
Код:
double LOTHIS()
  {
   double hislot;
   for(int y=0; y<=OrdersHistoryTotal()-1; y++)
     {
      if(OrderSelect(y, SELECT_BY_POS,MODE_HISTORY)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
        {
        }
     }
   return(hislot);
  }
//##

Почему выдает эту ошибку:
possible use of uninitialized variable 'hislot' Umr3.mq4 162 11

Ведь я проинициализировал в самой функции.
А, если не было в истории ни одного ордера с указанным меджиком и символом - какое значение должна вернуть ф-ция ???
 

Абдулхаким

Почетный гражданин
Я их не обнулял нигде.
при такой записи
C:
extern int StopLoss = 250;//Фиксированный уровень стопа
extern int TakeProfit = 500;//Фиксированный уровень профита
int coeff,intBars;
//+------------------------------------------------------------------+
int OnInit(){
   if(MarketInfo(Symbol(),MODE_DIGITS)==5)
      coeff = 10;
   if(MarketInfo(Symbol(),MODE_DIGITS)==3)
      coeff = 10;
   StopLoss  *= coeff;
   TakeProfit*= coeff;
}
если Digits() не равен 3 или 5, допустим он равен 2 или 1, то чему будет равен StopLoss и TakeProfit ?
 

star603

Новичок форума
Код:
void OnTick()
  {
   if(OrdersTotal()==0)
     {
      uo(svecha);
      ue(sltp);
      if(svecha[4][1]<0 && svecha[4][2]<0 && svecha[4][3]<0)
         Print(Bid-sltp[0]*Point);
      ticketss=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,Bid-sltp[0]*Point,0,"S1 buy",Magic,clrNONE);
      if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0)
         ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Ask+sltp[0]*Point,0,"S1 sell",Magic,clrNONE);
     }
  }
//+------------------------------------------------------------------+
//| User function                                                    |
//+------------------------------------------------------------------+
void ue(double &gh2[3])//Значения стопп и профита sltp[2];
  {
   gh2[0]=NormalizeDouble(StopLoss*Point,Digits);//Фиксирование убытков
   gh2[1]=NormalizeDouble(TakeProfit*Point,Digits);//Фиксирование приболи
   gh2[2]=NormalizeDouble(MarketInfo(Symbol(),MODE_FREEZELEVEL),Digits);//Минимальный стоплос и профит
   gh2[3]=NormalizeDouble(MarketInfo(Symbol(),33),Digits);//Минимальный лот
  };
//###############################################################################
void uo(double &gh[10][31])//Массив свечей svecha[10][31];
  {
   for(int i = 0; i < ArrayRange(gh, 1); i++)
     {
      gh[0][i] = Open[i];//Открытие свечи
      gh[1][i] = Close[i];//Закрытие свечи
      gh[2][i] = High[i];//Макс свечи
      gh[3][i] = Low[i];//Мин свечи
      gh[4][i] = Open[i]-Close[i];//Тело свечи
      gh[5][i] = High[i]-Low[i];//Высота свечи
      gh[6][i] = High[i]-Open[i];//верхняя тень черной свечи
      gh[7][i] = High[i]-Close[i];//Верхняя тень белой свечи
      gh[8][i] = Open[i]-Low[i];//Нижняя тень белой свечи
      gh[9][i] = Close[i]-Low[i];//Нижняя тень черной свечи
     }
  };
//+------------------------------------------------------------------+

Весь код. Не понимаю что не так.
 

star603

Новичок форума
при такой записи
C:
extern int StopLoss = 250;//Фиксированный уровень стопа
extern int TakeProfit = 500;//Фиксированный уровень профита
int coeff,intBars;
//+------------------------------------------------------------------+
int OnInit(){
   if(MarketInfo(Symbol(),MODE_DIGITS)==5)
      coeff = 10;
   if(MarketInfo(Symbol(),MODE_DIGITS)==3)
      coeff = 10;
   StopLoss  *= coeff;
   TakeProfit*= coeff;
}
если Digits() не равен 3 или 5, допустим он равен 2 или 1, то чему будет равен StopLoss и TakeProfit ?
if(MarketInfo(Symbol(),MODE_DIGITS)==2)
coeff = 10;
if(MarketInfo(Symbol(),MODE_DIGITS)==1)
coeff = 10
 

star603

Новичок форума
Код:
void OnTick()
  {
   if(OrdersTotal()==0)
     {
      uo(svecha);
      ue(sltp);
      if(svecha[4][1]<0 && svecha[4][2]<0 && svecha[4][3]<0)
         Print(Bid-sltp[0]*Point);
      ticketss=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,Bid-sltp[0]*Point,0,"S1 buy",Magic,clrNONE);
      if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0)
         ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Ask+sltp[0]*Point,0,"S1 sell",Magic,clrNONE);
     }
  }
//+------------------------------------------------------------------+
//| User function                                                    |
//+------------------------------------------------------------------+
void ue(double &gh2[3])//Значения стопп и профита sltp[2];
  {
   gh2[0]=NormalizeDouble(StopLoss*Point,Digits);//Фиксирование убытков
   gh2[1]=NormalizeDouble(TakeProfit*Point,Digits);//Фиксирование приболи
   gh2[2]=NormalizeDouble(MarketInfo(Symbol(),MODE_FREEZELEVEL),Digits);//Минимальный стоплос и профит
   gh2[3]=NormalizeDouble(MarketInfo(Symbol(),33),Digits);//Минимальный лот
  };
//###############################################################################
void uo(double &gh[10][31])//Массив свечей svecha[10][31];
  {
   for(int i = 0; i < ArrayRange(gh, 1); i++)
     {
      gh[0][i] = Open[i];//Открытие свечи
      gh[1][i] = Close[i];//Закрытие свечи
      gh[2][i] = High[i];//Макс свечи
      gh[3][i] = Low[i];//Мин свечи
      gh[4][i] = Open[i]-Close[i];//Тело свечи
      gh[5][i] = High[i]-Low[i];//Высота свечи
      gh[6][i] = High[i]-Open[i];//верхняя тень черной свечи
      gh[7][i] = High[i]-Close[i];//Верхняя тень белой свечи
      gh[8][i] = Open[i]-Low[i];//Нижняя тень белой свечи
      gh[9][i] = Close[i]-Low[i];//Нижняя тень черной свечи
     }
  };
//+------------------------------------------------------------------+

Весь код. Не понимаю что не так.
А в такой записи стопы ставяться что -не так не пойму?
Код:
void OnTick()
  {
   if(OrdersTotal()==0)
     {
      ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Ask+StopLoss*Point,0,"S1 sell",Magic,clrNONE);
     }
  }
 

Torn_ado

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

Абдулхаким

Почетный гражданин
if(MarketInfo(Symbol(),MODE_DIGITS)==2)
coeff = 10;
if(MarketInfo(Symbol(),MODE_DIGITS)==1)
coeff = 10
если переменная coeff везде равна 10, то почему бы сразу так не записать
C:
int coeff = 10;
или без переменной coeff
C:
StopLoss  *= 10;
TakeProfit*= 10;
или сразу так :)
C:
extern int StopLoss = 2500;//Фиксированный уровень стопа
extern int TakeProfit = 5000;//Фиксированный уровень профита
вот пример
C:
  int coeff = 1; // задай стартовое значение (инициализируй), может меньше условий придётся писать
  long dig = SymbolInfoInteger(symbol,SYMBOL_DIGITS); // для другого графика, для текущего достаточно Digits()
// тут не забудь про фильтры, к какой группе относится символ форекс/не форекс (когда будет актуально разберёшься ))
  if(dig == 3 || dig == 5)coeff = 10;
 

Абдулхаким

Почетный гражданин
А в такой записи стопы ставяться что -не так не пойму?
если не понятно, значит ошибка в таком месте, где даже не ждал, что она там будет.
тот же самый алгоритм действий: принтуй значения стопов от выставления ордера до их объявления.
если всё везде правильно, но стопы не выставляются, то проверь тип счёта может это ECN
Весь код. Не понимаю что не так.
скобки забываешь ставить после условий, может когда добавляешь принты
 

Ugar

Гуру форума
Добрый день знатокам, помогите написать индикатор. Сам, ну очень далек от программирования. условия очень простые, не займет много времени.
Берем бар, находим середину бара через хай и лоу. если уровень открытия и закрытия находится в нижней половине бара - то это бар на продажу. на покупку открытие и закрытие должно быть в верхней половине. удовлетворяющий условиям бар нужно подкрасить и стрелку добавить.
Помогите кому не трудно, буду очень признателен.
Подобные просьбы размещают в Бесплатное написание программ или в Предложения по автоматизации торговли.
А здесь задают вопросы по языку программирования те кто сам пишет и чего то не понял.
 

dadik

Местный знаток
Привет. Ребята, что вписать в код индикатора чтобы он ставился на график много раз при смене настроек, а непереставлялся только с новыми ???
И другой вопрос, чтобы убирал за собой линии и т.д.
 

griz

Активный участник
чтобы он ставился на график много раз при смене настроек, а непереставлялся только с новыми ???
Т.е. в настройках индикатора меняешь параметры, и на графике каждый раз (при изменении параметров) создаются новые версии этого индикатора, как бы каждая версия со своими параметрами, я правильно понял?
 

star603

Новичок форума
почему после нормализации все равно выдает:
2022.11.06 20:10:49.998 2004.04.13 00:00:46 Umr3 AUDCAD,H4: ДЛя открытия сделок Бай=SL=0.9844000000000001=TP=1.061=ASK=1.011=BID=1.0094
 

dadik

Местный знаток
Т.е. в настройках индикатора меняешь параметры, и на графике каждый раз (при изменении параметров) создаются новые версии этого индикатора, как бы каждая версия со своими параметрами, я правильно понял?
Да,все так.
 

griz

Активный участник
Т.е. в настройках индикатора меняешь параметры, и на графике каждый раз (при изменении параметров) создаются новые версии этого индикатора, как бы каждая версия со своими параметрами, я правильно понял?
Вроде так нельзя делать. Тут нужно разрабатывать индюк, чтобы он мог создавать свои дубли с настраиваемыми параметрами.
 

Абдулхаким

Почетный гражданин
И другой вопрос, чтобы убирал за собой линии и т.д.
если совсем простенький вариант, то добавь это
C:
//+------------------------------------------------------------------+

void OnDeinit(const int reason){
  ObjectsDeleteAll(chart_id/*идентификатор графика*/,prefix/*одинаковая не меняющаяся часть названия у объектов*/,sub_window/*номер подокна*/,object_type/*тип объекта*/);
}
если функция OnDeinit в коде уже есть, то в неё просто добавь содержимое из этого примера,
подставь нужные значения (последние два параметра не обязательные)
тут справка -https://docs.mql4.com/ru/objects/objectsdeleteall, возможно оттуда подойдут другие варианты
 
Верх