Доброго времени суток... Вопрос по функциям FileIsEnding и FileIsLineEnding. Для того, чтобы понять как работают функции FileIsEnding и FileIsLineEnding я написал такой скрипт:
//+------------------------------------------------------------------------------------------+//+------------------------------------------------------------------------------------------+//| script program start function |//+------------------------------------------------------------------------------------------+#property show_inputs //выводим перед запуском скрипта окно свойствexternint position=0; //внешняя переменная: смещение файлового указателя ОТ НАЧАЛА ФАЙЛА (в БАЙТАХ)//---------------------------------------------------------------------------------------- 1 -int start() //функция start
{ //начало startdouble Timestart=GetTickCount(); //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения эксперта string name="Копия Запись чисел в файл.csv"; //имя создаваемого файлаbool h; //переменная: значение функции FileIsEndingbool h_l; //переменная: значение функции FileIsLineEndingint error; //переменная: ошибкаint handle=FileOpen(name,FILE_CSV|FILE_WRITE,';'); //открываем заданный файл n записываем туда данныеint запись=FileWrite(handle,DoubleToStr(1.3584,4)); //записываем цены OHLC в файл csv (в преобразованном виде, т.е в виде текста)FileClose(handle); //закрываем файл//---------------------------------------------------------------------------------------- 2 -
handle=FileOpen(name,FILE_CSV|FILE_READ,';'); //открываем заданный файлbool pos=FileSeek(handle,position,SEEK_SET); //смещаем от начала вправо указатель файлаdouble чтение=FileReadNumber(handle); //считываем число из текущей позиции (уже измененной функцией FileSeek) файлового указателяint size=FileSize(handle); //вычисляем размер заданного файла
h=FileIsEnding(handle); //устанавливаем текущее значение переменной h
h_l=FileIsLineEnding(handle); //устанавливаем текущее значение переменной h_l
error=GetLastError(); //значение ошибки, производимой функцией FileIsEndingif(error!=0)Alert("Текущая ошибка ",error); //если код текущей ошибки не равен 0, то получаем номер текущей ошибкиFileClose(handle); //закрываем файл//----------------------------------------------------------------------------------------- 3 -Comment("Размер файла ",name," составил ",size," байт",
"\nФункция FileSeek вернула: ",pos,
"\nФункция FileReadNumber(handle) вернула: ",чтение,
"\nФункция FileIsLineEnding(handle) вернула: ",h_l,
"\nФункция FileIsEnding(handle) вернула: ",h,
"\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000," миллисекунд");//печать сообщения на экран//----------------------------------------------------------------------------------------- 4 -return(0); //выход из start
} //конец start//-------------------------------------- КОНЕЦ START -------------------------------------- 5 -
В блоке 1-2 я открыл и записал в файл число 1.3584 (к-е функция DoubleToStr преобразует в текст).
Блоке 3-4 я открыл файл и прочитал записанное там число.
Внешняя переменная extern int position по задумке предназначена для того, чтобы, передвигая файловый указатель с помощью функции FileTell, попытаться понять, как работают функции FileIsEnding и FileIsLineEnding И что собой представляет файловый указатель.
В книге по MQL4, к-я находится на MQL4.community говорится, что файловый указатель является аналогом текстового курсора.
НО, запуская данный скрипт несколько раз и изменяя с каждым разом внешнюю переменную postiton на 1 (т.е. сдвигая таким образом файловый указатель на 1 байт вправо от начала файла), функция Comment выводила ряд сообщений, например:
если postiton=7, то сообщение выглядело так:
если postiton=8, то сообщение выглядело так:
Я понимаю, что т.к. в памяти ПК строковые константы занимают 8 байт и в файле записано всего 1 преобразованное в текст число, то сдвигая файловый указатель на 8 байт вправо, я получу ошибку 4099 (к-я означает, что достигнут конец файла). Я также понимаю, что функция FileIsEnding вернула 1 (истина) по той же причине (достигнут конец файла). Но я не понимаю, почему функция FileIsLineEnding вернула 0 (ложь, что означает, что файловый указатель не достиг конца строки). Ведь, руководствуясь приведенной в книге по MQL аналогией (файловый указатель примерно то же, что и текстовый курсор), я рассуждал, что конец файла одновременно является концом строки. Но учитывая несовпадение значений функций FileIsEnding и FileIsLineEnding при достижении файловым указателем конца файла, я зашел в тупик в плане того, ЧТО ЕСТЬ ФАЙЛОВЫЙ УКАЗАТЕЛЬ
Вопрос:
1. Что есть файловый указатель?
2. Почему не совпадают: конец строки и конец файла (при достижении файловым указателем конца файла)?
P.S. Чтобы не захламлять форум, заранее благодарю за ответ
2. Почему не совпадают: конец строки и конец файла (при достижении файловым указателем конца файла)?
P.S. Чтобы не захламлять форум, заранее благодарю за ответ
1. файловый указатель - фактически курсор при наборе текста
2. а кто вам сказал что они должны совпадать? есть символ конца строки '\n', есть символ конца файла 'EOF' это разные символы. Это как символ конца предложения (точка) и символ конца абзаца ("символ переноса строки"). Сначала идет точка - конец строки. Потом конец абзаца.
мне одно интересно - если ордер не ставится, то наверное есть какая то ошибка ? А распринтовать ее прочитать и исправить вам видимо не судьба ?
/*ставьте ордер с нулевыми тейком и стопом, а потом правьте, это они типа ЕЦН исполнения ввели*/
мне одно интересно - если ордер не ставится, то наверное есть какая то ошибка ? А распринтовать ее прочитать и исправить вам видимо не судьба ?
/*ставьте ордер с нулевыми тейком и стопом, а потом правьте, это они типа ЕЦН исполнения ввели*/
в том то и дело что логи чистые!
"это они типа ЕЦН исполнения ввели*/ " - расшифруйте пожайлуста, если вопрос в стопах - это я как вариант страховки на непредвиденный случай ввел
в том то и дело что логи чистые!
"это они типа ЕЦН исполнения ввели*/ " - расшифруйте пожайлуста, если вопрос в стопах - это я как вариант страховки на непредвиденный случай ввел
Ставите ордер без стопов и тейков и смотрите открылся он или нет!
Установка стопов и тейков в Вашем ДЦ на этом типе торгового счёта возможна ТОЛЬКО посредством модификации ранее установленных нулевых их значений.
Ставите ордер без стопов и тейков и смотрите открылся он или нет!
Установка стопов и тейков в Вашем ДЦ на этом типе торгового счёта возможна ТОЛЬКО посредством модификации ранее установленных нулевых их значений.
Благодарю, помогло.
получается нужно открывать счет с 0, а потом модифицировать вводя стопы?
Благодарю, помогло.
получается нужно открывать счет с 0, а потом модифицировать вводя стопы?
открывать ордер с нулевыми значениями этих параметров, далее уже менять их посредством модификации открытого ордера.
открывать ордер с нулевыми значениями этих параметров, далее уже менять их посредством модификации открытого ордера.
Логи чистые, потому что никто за вас выявление и обработку ошибок делать не будет.
Спасибо, стопы устанавливаются в точностью до символов графика, т.е. 0,00001 или с точностью до 0,0001?
МаркетИнфо вам в руки.
Нет желающих разбираться с Вашим вопросом. Хотя Вы могли уже давно ответить на свой вопрос, при желании конечно.
Доброго времени суток... Вопрос по функциям FileIsEnding и FileIsLineEnding. Для того, чтобы понять как работают функции FileIsEnding и FileIsLineEnding я написал такой скрипт:
В блоке 1-2 я открыл и записал в файл число 1.3584 (к-е функция DoubleToStr преобразует в текст).
Блоке 3-4 я открыл файл и прочитал записанное там число.
Внешняя переменная extern int position по задумке предназначена для того, чтобы, передвигая файловый указатель с помощью функции FileTell, попытаться понять, как работают функции FileIsEnding и FileIsLineEnding И что собой представляет файловый указатель.
В книге по MQL4, к-я находится на MQL4.community говорится, что файловый указатель является аналогом текстового курсора.
НО, запуская данный скрипт несколько раз и изменяя с каждым разом внешнюю переменную postiton на 1 (т.е. сдвигая таким образом файловый указатель на 1 байт вправо от начала файла), функция Comment выводила ряд сообщений, например:
если postiton=7, то сообщение выглядело так:
если postiton=8, то сообщение выглядело так:
Я понимаю, что т.к. в памяти ПК строковые константы занимают 8 байт и в файле записано всего 1 преобразованное в текст число, то сдвигая файловый указатель на 8 байт вправо, я получу ошибку 4099 (к-я означает, что достигнут конец файла). Я также понимаю, что функция FileIsEnding вернула 1 (истина) по той же причине (достигнут конец файла). Но я не понимаю, почему функция FileIsLineEnding вернула 0 (ложь, что означает, что файловый указатель не достиг конца строки). Ведь, руководствуясь приведенной в книге по MQL аналогией (файловый указатель примерно то же, что и текстовый курсор), я рассуждал, что конец файла одновременно является концом строки. Но учитывая несовпадение значений функций FileIsEnding и FileIsLineEnding при достижении файловым указателем конца файла, я зашел в тупик в плане того, ЧТО ЕСТЬ ФАЙЛОВЫЙ УКАЗАТЕЛЬ
Вопрос:
1. Что есть файловый указатель?
2. Почему не совпадают: конец строки и конец файла (при достижении файловым указателем конца файла)?
P.S. Чтобы не захламлять форум, заранее благодарю за ответ
1. Что есть файловый указатель?
2. Почему не совпадают: конец строки и конец файла (при достижении файловым указателем конца файла)?
P.S. Чтобы не захламлять форум, заранее благодарю за ответ
1. файловый указатель - фактически курсор при наборе текста
2. а кто вам сказал что они должны совпадать? есть символ конца строки '\n', есть символ конца файла 'EOF' это разные символы. Это как символ конца предложения (точка) и символ конца абзаца ("символ переноса строки"). Сначала идет точка - конец строки. Потом конец абзаца.