Такое дело - нужно определить минимальное и максимальное значение цены за последние, например 100 баров, ну и потом зафиксировать рост/падение при снижении/росте цены, чтобы обрисовать разворотный патерн типа 1 2 3. Не могу понять разницу между функциями ArrayMaximum и iHighest. Если я правильно понимаю, то результатом их вычислений будет только индекс максимального бара на указанном промежутке массива? А для расчётов требуется использование оператора for при работе с массивами, как в задаче 26 из учебника? Я изменил этот код то такого вида
//--------------------------------------------------------------------
// extremumprice.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
extern int Quant_Bars=100; // Количество баров
//--------------------------------------------------------------------
int start() // Спец. функция start
{
int i; // Номер бара
double Minimum=Bid, // Минимальная цена
Maximum=Bid; // Максимальная цена
for(i=0;i<=Quant_Bars-1;i++) // От нуля (!) до..
// ..Quant_Bars-1 (!)
if (Low[i]< Minimum) // Если < известного
Minimum=Low[i]; // то оно и будет мин
if (High[i]> Maximum) // Если > известного
Maximum=High[i]; // то оно и будет макс
double
Level_1, // Сигнальный уровень 1
Level_2, // Сигнальный уровень 2
Price; // Текущая цена
Level_1=Minimum; // Задаём минимальный уровень
Level_2=Maximum; // Задаём максимальный уровень
Price=Bid; // Запрашиваем цену
if (Price<Level_1)
{ // Проверка сложн услов
Alert("Образовался патерн на продажу");
}
if (Price<Level_2)
{ // Проверка сложн услов
Alert("Образовался патерн на покупку"); // Сообщение
}
return;
}
//--------------------------------------------------------------------
Но он почему-то на каждом тике выдаёт исключительно патерн на покупку, хотя должен бы сигнализировать только при изменении минимума или максимума.
Такое дело - нужно определить минимальное и максимальное значение цены за последние, например 100 баров, ну и потом зафиксировать рост/падение при снижении/росте цены, чтобы обрисовать разворотный патерн типа 1 2 3. Не могу понять разницу между функциями ArrayMaximum и iHighest. Если я правильно понимаю, то результатом их вычислений будет только индекс максимального бара на указанном промежутке массива? А для расчётов требуется использование оператора for при работе с массивами, как в задаче 26 из учебника? Я изменил этот код то такого вида
Если хочешь торговать по этим сигналам, то не стоит. Если учишься программировать, пиши правильно.
double
Level_1, // Сигнальный уровень 1
Level_2, // Сигнальный уровень 2
Price; // Текущая цена
if (Low[i]< Minimum) // Если < известного
Minimum=Low[i]; // то оно и будет мин
if (High[i]> Maximum) // Если > известного
Maximum=High[i]; // то оно и будет макс
}
добавлены фигурные скобки.
if (Price<Level_2) измени знак if (Price > Level_2) выше верхнего
Начал изучать работу с файлами. Встретился с термином хэндл. Вопрос возник после написания кода:
int filehandle;
filehandle=FileOpen("news.csv",FILE_READ);
Print("Файл открыт успешно. Хендл файла=", filehandle);
filehandle=FileOpen("news150901.csv",FILE_READ);
Print("Файл открыт успешно. Хендл файла=", filehandle);
Открыв первый файл news.csv программа присвоила переменной filehandle значение 1. Далее, программа открыла второй файл news150901.csv и присвоила переменной filehandle значение 2. Получается, что в программе теперь осталось значение хэндла только от открытия второго файла. Иными словами, я убил значение хэндла для первого открытого файла. Т.е. обращаться к данным/контенту и закрыть я смогу только второй файл? Является-ли использование одной переменной для хранения хэндла открытого файла ошибкой? Переменную для хэндла нужно создавать к каждому открываемому файлу свою?
Начал изучать работу с файлами. Встретился с термином хэндл. Вопрос возник после написания кода:
Открыв первый файл news.csv программа присвоила переменной filehandle значение 1. Далее, программа открыла второй файл news150901.csv и присвоила переменной filehandle значение 2. Получается, что в программе теперь осталось значение хэндла только от открытия второго файла. Иными словами, я убил значение хэндла для первого открытого файла. Т.е. обращаться к данным/контенту и закрыть я смогу только второй файл? Является-ли использование одной переменной для хранения хэндла открытого файла ошибкой? Переменную для хэндла нужно создавать к каждому открываемому файлу свою?
Открыв файл, Вы получили "код доступа" к нему - хэндл. Пока Вы его не закрыли, можете работать с этим файлом через его хэндл, не зависимо открыты другие файлы или нет.
P.S. Не забывайте закрывать файлы (в примере они не закрыты).
Нuжен скрипт для исследования в экселе. Описание. За 30 дней с 8.00 до 12.00 каждый день отпечатать в файл csv отпечатать цены открытия и закрытия свеч в этом промежутке времени.Период - на каком поставлен индикатор но не больше часа.Сам индикатор не должен ничего отоброжать и сохронят в буфферах.
Как закрутить правильно циклы ?
externint DayMax =30; //количество дней для печатиexternint DayStart =1; //начинаем с первого бараexternint HourStart =10; //время старта внутри дняexternint HourEnd =12; //время конца внутри дня//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---int per=Period();
if(per>60)return; //если период больше часа , прекращаем работу скриптаdouble c_o=0,ABS_o_c=0;
for(int d=DayStart;d<=DayMax;d++)//перебираем дни от DayStart до DayMax, т.е с вчерашнего до 30
{
for(int h=0;h<60/per*24;h++) //перебираем бары с нолевого до последнего в сутках учитывая ТФ
{
if(Time[h]>HourStart && Time[h]<HourEnd)//проверка промежутка времени
{
//данные для печати и печать
c_o=(Close[h]-Open[h])*Point;
ABS_o_c=MathAbs(c_o);
f_PrintToFile(DayOfWeek(),TimeToString(TimeCurrent(),TIME_DATE|TIME_MINUTES),Open[h],Close[h],c_o,ABS_o_c);
Print(DayOfWeek(),TimeToString(TimeCurrent(),TIME_DATE|TIME_MINUTES),Open[h],Close[h],c_o,ABS_o_c);
}
}
}
}
//+------------------------------------------------------------------+// 1. В файл //+------------------------------------------------------------------+void f_PrintToFile(int f_DayOfWeek=0,
string f_TimeCurrent="",
double f_Open=0,
double f_Close=0,
double f_c_o=0,
double f_ABS_o_c=0)
{
string fileName=StringConcatenate(Symbol()," M",Period()," Tyrimas");
string FileType=".csv";
int handle;
handle=FileOpen(fileName+FileType,FILE_WRITE|FILE_READ,";");
if(handle!=INVALID_HANDLE)
{
FileSeek(handle,0,SEEK_END);
FileWrite(handle,f_DayOfWeek,f_TimeCurrent,f_Open,f_Close,f_c_o,f_ABS_o_c);
FileClose(handle);
}
}
Вот сомневаюсь в строке, так ка к наверное этот цикл непонимает начало дня , а работает просто с нуливого бара
А надо-ли такое извращение с индикаторами? Не проще всё засунуть в советник?
Со временем советник обростает дополнительными условиями для корректной работы и становится не гибким.
(Возможно извращение. Мы, Россияне, не ищем легких путей:)
Как можно в эксперте определить "Market is closed"?
Добрый день!
Как можно в эксперте определить "Market is closed"?
Зачем тебе это? Если рынок закрыт, то не будет тиков, соответственно эксперт не будет работать.
Но если тебе все-таки очень надо, то попробуй
MarketInfo(Symbol(), MODE_TRADEALLOWED);Если рынок открыт, то возвращает 1. Если рынок закрыт, то должен возвращать 0, только как он это сделает, если тики не идут :)
Такое дело - нужно определить минимальное и максимальное значение цены за последние, например 100 баров, ну и потом зафиксировать рост/падение при снижении/росте цены, чтобы обрисовать разворотный патерн типа 1 2 3. Не могу понять разницу между функциями ArrayMaximum и iHighest. Если я правильно понимаю, то результатом их вычислений будет только индекс максимального бара на указанном промежутке массива? А для расчётов требуется использование оператора for при работе с массивами, как в задаче 26 из учебника? Я изменил этот код то такого вида
//-------------------------------------------------------------------- // extremumprice.mq4 // Предназначен для использования в качестве примера в учебнике MQL4. //-------------------------------------------------------------------- extern int Quant_Bars=100; // Количество баров //-------------------------------------------------------------------- int start() // Спец. функция start { int i; // Номер бара double Minimum=Bid, // Минимальная цена Maximum=Bid; // Максимальная цена for(i=0;i<=Quant_Bars-1;i++) // От нуля (!) до.. // ..Quant_Bars-1 (!) if (Low[i]< Minimum) // Если < известного Minimum=Low[i]; // то оно и будет мин if (High[i]> Maximum) // Если > известного Maximum=High[i]; // то оно и будет макс double Level_1, // Сигнальный уровень 1 Level_2, // Сигнальный уровень 2 Price; // Текущая цена Level_1=Minimum; // Задаём минимальный уровень Level_2=Maximum; // Задаём максимальный уровень Price=Bid; // Запрашиваем цену if (Price<Level_1) { // Проверка сложн услов Alert("Образовался патерн на продажу"); } if (Price<Level_2) { // Проверка сложн услов Alert("Образовался патерн на покупку"); // Сообщение } return; } //-------------------------------------------------------------------- Но он почему-то на каждом тике выдаёт исключительно патерн на покупку, хотя должен бы сигнализировать только при изменении минимума или максимума.Зачем тебе это? Если рынок закрыт, то не будет тиков, соответственно эксперт не будет работать.
Но если тебе все-таки очень надо, то попробуй
Если рынок открыт, то возвращает 1. Если рынок закрыт, то должен возвращать 0, только как он это сделает, если тики не идут :)
Для получения информации. Надо подсчитать время между тиками.
Использую OnTimer().
Такое дело - нужно определить минимальное и максимальное значение цены за последние, например 100 баров, ну и потом зафиксировать рост/падение при снижении/росте цены, чтобы обрисовать разворотный патерн типа 1 2 3. Не могу понять разницу между функциями ArrayMaximum и iHighest. Если я правильно понимаю, то результатом их вычислений будет только индекс максимального бара на указанном промежутке массива? А для расчётов требуется использование оператора for при работе с массивами, как в задаче 26 из учебника? Я изменил этот код то такого вида
Если хочешь торговать по этим сигналам, то не стоит. Если учишься программировать, пиши правильно.
double
Если хочешь торговать по этим сигналам, то не стоит. Если учишься программировать, пиши правильно.
Начал изучать работу с файлами. Встретился с термином хэндл. Вопрос возник после написания кода:
Открыв первый файл news.csv программа присвоила переменной filehandle значение 1. Далее, программа открыла второй файл news150901.csv и присвоила переменной filehandle значение 2. Получается, что в программе теперь осталось значение хэндла только от открытия второго файла. Иными словами, я убил значение хэндла для первого открытого файла. Т.е. обращаться к данным/контенту и закрыть я смогу только второй файл? Является-ли использование одной переменной для хранения хэндла открытого файла ошибкой? Переменную для хэндла нужно создавать к каждому открываемому файлу свою?
Начал изучать работу с файлами. Встретился с термином хэндл. Вопрос возник после написания кода:
Открыв первый файл news.csv программа присвоила переменной filehandle значение 1. Далее, программа открыла второй файл news150901.csv и присвоила переменной filehandle значение 2. Получается, что в программе теперь осталось значение хэндла только от открытия второго файла. Иными словами, я убил значение хэндла для первого открытого файла. Т.е. обращаться к данным/контенту и закрыть я смогу только второй файл? Является-ли использование одной переменной для хранения хэндла открытого файла ошибкой? Переменную для хэндла нужно создавать к каждому открываемому файлу свою?
Открыв файл, Вы получили "код доступа" к нему - хэндл. Пока Вы его не закрыли, можете работать с этим файлом через его хэндл, не зависимо открыты другие файлы или нет.
P.S. Не забывайте закрывать файлы (в примере они не закрыты).
Нuжен скрипт для исследования в экселе.
Описание.
За 30 дней с 8.00 до 12.00 каждый день отпечатать в файл csv отпечатать цены открытия и закрытия свеч в этом промежутке времени.Период - на каком поставлен индикатор но не больше часа.Сам индикатор не должен ничего отоброжать и сохронят в буфферах.
Как закрутить правильно циклы ?
Вот сомневаюсь в строке, так ка к наверное этот цикл непонимает начало дня , а работает просто с нуливого бара
Помогите разобраться.