Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1257

 
для чего в ObjectCreate время и цена от 2 до 30 точки доступны? попробовал добавить на график, отображается только первая точка
ObjectCreate(0,"name",OBJ_ARROW_LEFT_PRICE,0,TimeCurrent()-600,1.29400,TimeCurrent()-1200,1.29500);   
 
Valerius:

Тебе не в OnInit надо писать данный код, а в OnTick().

Попробовал вообще не работает.
1 warning
 
Igor Makanu:

не можно

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

затем Вы осуществляете вызов такой шаблонной функции и компилятор подставляет нужные типы и лишь затем проверяет, что все будет работать корректно

а затем Вы делает еще один вызов шаблона и с другими типами параметров - и компилятор создает новую функцию, т.е. еще одну, т.е по сути как если бы Вы писали 2 раза 2 функции делающее одно и тоже, но с разными типами параметров


фух, кактотак )))



UPD:

можно, но если типы в шаблоне совпадут, вот пример, это работает корректно:

Спасибо, даже понятней чем в доках) Получается в шаблон предопределение переменных не дает возможности их не указывать. Мне для печати в файл нужно. Журнал не дает возможности разделять записи. Жаль нет 5ти журналов.) По итогу шаблоны дают возможность не приводить тип переменной к нужному, это можно сделать внутри шаблонной функции, но количество переменных надо указывать полностью. А простая функция с предопределенными переменными нужного типа дает возможность указывать меньшее количество переменных при вызове, но при этом типы переменных надо привести к нужному. Это конечно можно сделать и при вызове, но запись получается слишком длинной.

 
Valerius:

Всем добрый день!

Сделал функцию модификации стоплосса. Но при работе выдает  EURUSD,H1: OrderModify error 130.

Причем цена далеко от того места куда должен встать стоплосс.

вот сама функция:


....
    err=OrderModify(OrderTicket(), OrderOpenPrice(),New_Stop( NormalizeDouble(OrderOpenPrice()+spred*point, 
digits)), OrderProfit(), 0, clrNONE);// Цена открытия плюс спред может быть в зоне заморозки.
.....
.....
double New_Stop(double Parametr) // Проверка стоп-прик.
  {
   double Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Миним. дистанция
   if(Parametr<Min_Dist) // Если меньше допуст.
     {
      Parametr=Min_Dist;                        // Установим допуст.
      Alert("Increased the distance of a stop order or the opening price of pending orders.");
     }
   return(Parametr);                            // Возврат значения
  }
 
Valerius:

Попробуйте так:


Спасибо , сработало!

но еще два нюанса:

1 какое условие добавить чтобы не закрывались ордера которые открывались в пятницу ТЕКУЩЕЙ недели ,а в пятницы предыдущих недель соответственно закрывались ?

2  как откорректировать код -  OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE); 

   чтобы убрать   предупреждение  "possible loss of data due to type conversion" ? Касается видать в части - "...MarketInfo(nameSym,MODE_DIGITS)).." 

 
Добрый вечер. Как должен выглядеть код, который выбирает самый последний закрытый ордер. Неужели вот так: "OrderSelect(OrdersHistoryTotal, SELECT_BY_POS, MODE_HISTORY"?
 
возвращаемое значение функции суммирования лотов GetAmountLotFromOpenPos  выдаёт значениё  -1717986918 как исправить?
 

Подскажите пожалуйста.

В тестере, возвращаемое значение функции суммирования лотов GetAmountLotFromOpenPos  выдаёт значение  -1717986918 как исправить?

 
Valeriy Yastremskiy:

Нашел причину. Нужно было ставить в OrderModify не OrderProft(), а OrderTakeProfit(). Малость просмотрел.

Всё равно спасибо за помощь.

 
Yerkin Sagandykov:

Спасибо , сработало!

но еще два нюанса:

1 какое условие добавить чтобы не закрывались ордера которые открывались в пятницу ТЕКУЩЕЙ недели ,а в пятницы предыдущих недель соответственно закрывались ?

2  как откорректировать код -  OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE); 

   чтобы убрать   предупреждение  "possible loss of data due to type conversion" ? Касается видать в части - "...MarketInfo(nameSym,MODE_DIGITS)).." 

По первому вопросу нужно сделать такую функцию:


for(int is=OrdersTotal()-1; is>=0; is--)
 { 
  if(OrderSelect(is,SELECT_BY_POS,MODE_TRADES))  
   {//Закрытие ордеров, которые были открыты в пятницу не текущей недели. При этом в текущей неделе в пятницу мы не закрываем ордера.
    if(OrderMagicNumber()==Magic && TimeDayOfWeek(TimeCurrent())==5 &&  TimeDayOfWeek(OrderOpenTime())==5 && TimeDayOfYear(OrderOpenTime())<TimeDayOfYear(TimeCurrent()))
     {    
      if (OrderType()==OP_BUY)   result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_BID),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE); 
      if (OrderType()==OP_SELL)  result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE); 
      if(!result) {error=GetLastError(); Print("LastError = ",error, " ",Symbol()); }
      else        {error=0;}
    else  
     {Print("NoMagic ", OrderMagicNumber());}  // for Debug
  else 

   {Print( "Error when order select ", GetLastError());} 


По второму вопросу, должна быть такая запись:

OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(MarketInfo(nameSym,MODE_ASK)), 3, clrNONE); 

Удачи.

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