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

 
Artyom Trishkin:

Можно. Но осторожно. У открытой позиции он возвращает цену её закрытия. Соответственно: для Buy - Bid, для Sell - Ask

о. я не знал что его можно так использовать.

я думал OrderClosePrice() можно взять только у закрытой сделки.

в справке про это ничего нет)
 
igrok333:
о. я не знал что его можно так использовать.

я думал OrderClosePrice() можно взять только у закрытой сделки.

в справке про это ничего нет)

Недокументированная возможность. Но там есть некоторые условности. Сейчас не вспомню какие. Нужно Алексея @Alexey Viktorov спросить - он недавно писал о них.

 
Artyom Trishkin:

Недокументированная возможность. Но там есть некоторые условности. Сейчас не вспомню какие. Нужно Алексея @Alexey Viktorov спросить - он недавно писал о них.

а что по этому коду?

переменная не инициилизируется сразу нулем?

 void zakritj_vse_sdelki()
 {
 bool pr;
 for (int i=OrdersTotal()-1; i>=0; i--)       
   {                                        
   if(OrderSelect(i,SELECT_BY_POS)==true)
      {   
         if (OrderType()==OP_BUY)    pr=OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(),MODE_BID), 30 );                              
         if (OrderType()==OP_SELL)   pr=OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(),MODE_ASK), 30 );
         
         if (pr==false) Print("закрытие ордера ", OrderSymbol() ," завершилось с ошибкой #",GetLastError());
         if (pr==true) Print("ордер ", OrderSymbol() , " ЗАКРЫТ");
       }
    }
  } 
 
igrok333:
а что по этому коду?

переменная не инициилизируется сразу нулем?

Нельзя уповать на умолчания. Лучше сразу при объявлении локальной переменной озаботиться её значением: bool pr=false;

А вообще, конечно излишне её там задавать. Достаточно проверять что возвращает функция:

if(!OrderClose()) Print("Бяка");

 

Как узнать цену веера фибоначи на предыдущей свече? MQL5
ObjectGetValueByTime() не работает, возвращает то 0, то хай, то лоу свечи

 

@Artyom Trishkin

Добрый день. Пожалуйста, помогите. подскажите, в чем дело с моим индикатором. Я не понимаю, почему вообще ничего не рисует.

https://www.mql5.com/ru/forum/224805#comment_6372281

Файлы:
indicator.ZIP  21 kb
probability.zip  50 kb
 
Artyom Trishkin:

Недокументированная возможность. Но там есть некоторые условности. Сейчас не вспомню какие. Нужно Алексея @Alexey Viktorov спросить - он недавно писал о них.

Это было так давно... но всё-же получилось найти. Ренат доступно объясняет почему нежелательно. Но всё-же на мой взгляд ничего страшного. Проблема может возникнуть тогда когда на закрытие ордера получили реквоту. Если в запросе ставим цену Ask или Bid то всегда можно обновить цены и повторить попытку. А в случае указания цены закрытия OrderClosePrice() придётся повторно выбирать ордер с целью обновить данные по ордеру.

Вывод: Если нельзя, но очень нужно, то можно.

Применение функция OrderClosePrice() к открытым ордерам
Применение функция OrderClosePrice() к открытым ордерам
  • 2006.09.11
  • www.mql5.com
Вопрос к разработчикам: Корректно ли использование данной конструкции: OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,CLR_NONE) Проверка...
 

Подскажите пожалуйста! Читаю данные из CSV файла, в том числе столбец с ценой  с разделителем разряда "." (1.22426) через FileReadString(handle), далее через функцию StrToDouble, все ОК. Но есть столбец тоже с ценой, но уже с разделителем "," (1,22426) и его уже StrToDouble не считывает. Как быть, если нет возможности  менять запятую на точку в самом CSV ?

 
WinProject:

Подскажите пожалуйста! Читаю данные из CSV файла, в том числе столбец с ценой  с разделителем разряда "." (1.22426) через FileReadString(handle), далее через функцию StrToDouble, все ОК. Но есть столбец тоже с ценой, yо уже с разделителем "," (1,22426) и его уже StrToDouble не считывает. Как быть если нет возможности  менять запятую на точку в самом CSV ?


FileReadString


а потом можете поменять с запятой на точку:


StringReplace

Заменяет в строке все найденные подстроки на заданную последовательность символов.

int  StringReplace(
   string&         str,              // строка, в которой будет осуществляться замена
   const string    find,             // искомая подстрока
   const string    replacement       // подстрока, которая будет вставлена в найденные места
   );

 
Vladislav Andruschenko:

FileReadString


а потом можете поменять с запятой на точку:


StringReplace

Заменяет в строке все найденные подстроки на заданную последовательность символов.

int  StringReplace(
   string&         str,              // строка, в которой будет осуществляться замена
   const string    find,             // искомая подстрока
   const string    replacement       // подстрока, которая будет вставлена в найденные места
   );


Спасибо!) , переменную Cena=FileReadString(handle); вставляю в функцию  Separator=StringReplace(Сena,",",".");  пишет ошибку "implicit conversion from number to string" -

не хочет читать значение с разделителем "," (1,22426) как строку,  и StringReplace не срабатывает. Или я неправильно действую?

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