Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 248

 
Ой ты и герой, Жунко, молча исправил код и... как будто так и было. Ведь еще будешь утверждать, что так и было, а я типа гоню? Да?
 
Roger:
А зачем Вы из файла читаете? У Вас же весь файл в переменной ReadCBOE, ее и мучайте,

С ней нет никаких проблем, НО не вся строка помещается в переменной! у МТ своё ограничение на длину строки, в то время как в файл записывается инфа с сайта, и кончается файл так </body></html> в то время как строка - обрывается при достижении 65к символов(или около того). В любом случае размер конечного файла 69КБ.

 
Integer:

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

Ого, спасибо, не нашел самостоятельно, надо было искать по тегу HTML.
 
Zhunko:

Вот так работает. Проверил.


В общем ошибка есть, и вот она
if (FileWriteString(hFile, sTextWrite, 10000) < 0)
записывает в файл ВСЮ строку, вне зависимости от 3 параметра функции, который отвечает за размер строки.
 
Integer:
Ой ты и герой, Жунко, молча исправил код и... как будто так и было. Ведь еще будешь утверждать, что так и было, а я типа гоню? Да?

Что исправил? Проверку на NULL? Это нормально. Что не нравится? Если нахожу ошибку - исправляю.

Ты не исправляешь. Это видел. Даже, когда прямо показал - не исправил. Любишь делать ошибки и не исправлять их? Потом бахвалишься этим?

=============

Мне простительно. На MQL4 почти совсем не пишу. Всё, что надо, написал. С дескрипторами и ошибками не работаю. Они давно написаны, инкапсулированы и забыты.

В С++ дескрипторы принято сравнивать с NULL.

mzk_3om6u:

В общем ошибка есть, и вот она
if (FileWriteString(hFile, sTextWrite, 10000) < 0)
записывает в файл ВСЮ строку, вне зависимости от 3 параметра функции, который отвечает за размер строки.
Не. Работает. Просто этот код не перезаписывает файл. Вы смотрите в файл, который уже написан. Кажется, что не работает. На самом деле было вписано, куда надо, а продолжение строки осталось старым.

Запишите что-нибудь другое или файл удалите или флаг только на запись поставте.

 
Zhunko:

Что исправил? Проверку на NULL? Это нормально. Что не нравится? Если нахожу ошибку - исправляю.

Ты не исправляешь. Это видел. Даже, когда прямо показал - не исправил. Любишь делать ошибки и не исправлять их? Потом бахвалишься этим?

=============

Мне простительно. На MQL4 почти совсем не пишу. Всё, что надо написал. С дескрипторами и ошибками не работаю. Они давно написаны, инкапсулированы и забыты.

В С++ дескрипторы принято сравнивать с NULL.

Не. Работает. Просто этот код не перезаписывает файл. Вы смотрите в файл, который уже написан. Кажется, что не работает. На самом деле было вписано, куда надо, а продолжение строки осталось старым.

Запишите что-нибудь другое или файл удалите или флаг только на запись поставте.


Ага, заработало...Спасибо.
 
Здравствуйте! Выйдет ли MetaTrader для Windows Phone или Windows RT? и когда планируется, если выйдет?
 
Доброго времени. Помогите разобраться с ошибкой.
extern int OpenHH = 14; // Время открытия ордеров (часы).
extern int OpenMM = 25; // Время открытия ордеров (минуты).

extern int CloseHH = 23; // Время закрытие/удаление ордеров (часы).
extern int CloseMM = 45; // Время закрытие/удаление ордеров (минуты).


Эта часть кода работает, и претензий к ней нет. Ордера в пятницу, в 23:45 закрываются нормально. Функция DeleteOrders() работает нормально.

if (DayOfWeek() == 0 || DayOfWeek() == 6 ) return(0); // В выходные не работаем.
if (!IsTradeAllowed()) return(0); // Пропустить тик, если терминал занят.
if (Close_All_Orders) // Разрешение на закрытие ордеров.
if (DayOfWeek() >= 5 && // Если пятница и закрытие ордеров разрешено, то
TimeHour(TimeCurrent()) >= CloseHH && // в назначенный час
TimeMinute(TimeCurrent()) >= CloseMM ) // в назначенные минуты -
{ DeleteOrders(); return(0); } // все ордера закрываются.


По аналогии составлен код на открытие ордеров. В указанном виде код не работает вообще.
Однако, если убрать, либо закомментировать строку с минутами - все работает нормально, ордера в 14:00 открываются. Функция OpenOrders() работает нормально.
Какая может быть проблема в этой (или в другой) строке кода: TimeMinute(TimeCurrent()) >= OpenMM ?

if (Trade) // Разрешение на торговлю.
if (TimeHour(TimeCurrent()) >= OpenHH && // В назначенный час,
TimeMinute(TimeCurrent()) >= OpenMM ) // в назначенные минуты -
{ OpenOrders(); return(0); } // открыть ордера.


PS: В принципе, в интернете довольно много советников, открывающих и закрывающих ордера по времени. Но, по той или иной причине, они могут не устраивать. Хотелось бы разобраться с указанной ошибкой...

Спасибо...

 
Crosswert:
Доброго времени. Помогите разобраться с ошибкой.


Вроде всё правильно, должно работать. Попробовал Ваш код у себя - работает с минутами. Но только с 14:25 до 14:59, с 15:25 до 15:59 и т.д.

int start()
  {
  int OpenHH=14,OpenMM=25;
  bool Trade=true;
//----
if (Trade) // Разрешение на торговлю.
 if (TimeHour(TimeCurrent()) >= OpenHH && // В назначенный час
 TimeMinute(TimeCurrent()) >= OpenMM ) // в назначенные минуты - 
 { OpenOrders();Print("Время пришло ",TimeHour(TimeCurrent()),":",TimeMinute(TimeCurrent())); return(0); } // открыть ордера.   
//----
   return(0);
  }
//+------------------------------------------------------------------+
void OpenOrders(){return(0);}


 

Может так лучше

if ((Hour() == OpenHH && Minute() >= OpenMM) || (Hour() > OpenHH))