Ошибки, баги, вопросы - страница 73

 
Swan:

или перебор не нужен, или ask,bid по символу позы запрашивать

 

Функция PositionGetSymbol автоматически выбирает позицию для дальнейшей работы.

Фактически PositionGetSymbol обеспечивает последовательный выбор, а PositionSelect - прямой выбор 

Документация по MQL5: Торговые функции / PositionGetSymbol
Документация по MQL5: Торговые функции / PositionGetSymbol
  • www.mql5.com
Торговые функции / PositionGetSymbol - Документация по MQL5
 
Swan:

или перебор не нужен, или ask,bid по символу позы запрашивать

Там для начала, как выяснилось, PositionGetInteger(POSITION_TYPE) юзается без выбора по PositionSelect. Что по сути не есть хорошо (как Слава мне напомнил)... :)

stringo:

Функция PositionGetSymbol автоматически выбирает позицию для дальнейшей работы.

Фактически PositionGetSymbol обеспечивает последовательный выбор, а PositionSelect - прямой выбор 

Исходя из этого в цикле нужно было применить именно PositionGetSymbol, а потом интересолваться всем остальным...
 

нуу если с использованием телепатии, то if(PositionSelect(Symbol())) надо вместо цикла поставить :)

Желательно еще проверять, что LevelProfit-LevelWLoss не меньше SymbolInfoInteger(Symbol,SYMBOL_TRADE_STOPS_LEVEL).

И таки double сравниваются не правильно..

в остальном вроде должно работать)


ps: не уверен, но для модификации sl/tp, deviation>0  ни чего хорошего не добавит.

 

Некорректно работает функция ObjectGetInteger() с идентификатором OBJPROP_TIME

Что бы воспроизвести ошибку, создайте объект "Прямоугольник" с именем "1"

Запустить скрипт, приведенный ниже, показывающий четыре координаты привязки нашего свежего созданного прямоугольника с именем "1"

void OnStart()
{ 
  Comment(ObjectGetDouble(0,"1",OBJPROP_PRICE,0),"   ",
          StringToTime   (IntegerToString(ObjectGetInteger(0,"1",OBJPROP_TIME, 0))),"\n",
          
          ObjectGetDouble(0,"1",OBJPROP_PRICE,1),"   ",
          StringToTime   (IntegerToString(ObjectGetInteger(0,"1",OBJPROP_TIME, 1))));

}

Видим, что ценовые координаты определены верно, а временые - нет:


Документация по MQL5: Графические объекты / ObjectGetInteger
Документация по MQL5: Графические объекты / ObjectGetInteger
  • www.mql5.com
Графические объекты / ObjectGetInteger - Документация по MQL5
 
joo:

Некорректно работает функция ObjectGetInteger() с идентификатором OBJPROP_TIME

Что бы воспроизвести ошибку, создайте объект "Прямоугольник" с именем "1"

Запустить скрипт, приведенный ниже, показывающий четыре координаты привязки нашего свежего созданного прямоугольника с именем "1"

Видим, что ценовые координаты определены верно, а временые - нет:



 

Почувствуйте разницу

  Comment(ObjectGetDouble(0,"1",OBJPROP_PRICE,0),"   ",
          datetime(ObjectGetInteger(0,"1",OBJPROP_TIME, 0)),"\n",
          
          ObjectGetDouble(0,"1",OBJPROP_PRICE,1),"   ",
          datetime(ObjectGetInteger(0,"1",OBJPROP_TIME, 1)));
 
joo:

Некорректно работает функция ObjectGetInteger() с идентификатором OBJPROP_TIME

Что бы воспроизвести ошибку, создайте объект "Прямоугольник" с именем "1"

Запустить скрипт, приведенный ниже, показывающий четыре координаты привязки нашего свежего созданного прямоугольника с именем "1"

Видим, что ценовые координаты определены верно, а временые - нет:



Вот скрипт.

//+------------------------------------------------------------------+
//|                                                       123123.mq5 |
//|                                  2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string msg="";
//---
   msg+=DoubleToString(ObjectGetDouble(ChartID(),"123456",OBJPROP_PRICE,0),_Digits)+" "+
        TimeToString(ObjectGetInteger(ChartID(),"123456",OBJPROP_TIME,0),TIME_DATE|TIME_MINUTES)+"\n";
   msg+=DoubleToString(ObjectGetDouble(ChartID(),"123456",OBJPROP_PRICE,1),_Digits)+" "+
        TimeToString(ObjectGetInteger(ChartID(),"123456",OBJPROP_TIME,1),TIME_DATE|TIME_MINUTES)+"\n";
   Comment(msg);
  }
//+------------------------------------------------------------------+

А вот результат.

 

 
stringo:

Почувствуйте разницу

Спасибо, разницу почувствовал.

Вы явно задали тип значению  - datetime

а я использовал преобразование данных.

Но не значит ли это, что конструкция 

StringToTime   (IntegerToString(

работает неверно?

 
joo:

Спасибо, разницу почувствовал.

Вы явно задали тип значению  - datetime

а я использовал преобразование данных.

Но не значит ли это, что конструкция 

работает неверно?

Не то чтобы неверно. Эти действия просто лишние.

Посмотрите справку по функции StringToTime() и вы поймете, почему получился неправильный результат.

Документация по MQL5: Преобразование данных / StringToTime
Документация по MQL5: Преобразование данных / StringToTime
  • www.mql5.com
Преобразование данных / StringToTime - Документация по MQL5
 
joo:

Спасибо, разницу почувствовал.

Вы явно задали тип значению  - datetime

а я использовал преобразование данных.

Но не значит ли это, что конструкция 

работает неверно?

 

Не совсем. Преобразованием IntegerToString Вы получили строку типа "12345612345", тогда как для StringToTime на вход должна подаваться строка, форматированная как дата "2010.07.29 08:10"

Однако, Вы показали нам нашу ошибку. В Вашем случае мы должны были вернуть дату 1970.01.01 00:00 и взвести ошибку last_error

 
stringo:

Не совсем. Преобразованием IntegerToString Вы получили строку типа "12345612345", тогда как для StringToTime на вход должна подаваться строка, форматированная как дата "2010.07.29 08:10"

Однако, Вы показали нам нашу ошибку. В Вашем случае мы должны были вернуть дату 1970.01.01 00:00 и взвести ошибку last_error

То есть, моё сообщение не напрасно, как я уже было подумал?
Причина обращения: