Доброго времени суток! Прошу помочь, есть простая задумка реализовать вызов Alert() при пересечении трех МА. Описание пересечения в программе. Вроде все работает, но не так как нужно. Я делаю округление значений переменный до одного знака, чтобы застать пересечение. И этот Alert() барабанит мне до тех пор пока средние будут находиться на одной позиции. Как сделать так, чтобы он вызывался один раз, ну или до 5 раз.
//+------------------------------------------------------------------+ //| Начало программы | //+------------------------------------------------------------------+
intinit(){return(0);} intEURUSD() {
if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD > SMA_Orange_EURUSD) { // Если зеленая МА пересекает оранжевую МА и при этом синяя МА выше - сигнал к покупке. Alert("Cигнал на ПОКУПКУ паре EURUSD"); return(11); // 11 - на первой паре сигнал на покупку. }
if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD < SMA_Orange_EURUSD) { // Если зеленая МА пересекает оранжевую МА и при этом синяя МА ниже - сигнал к продаже. Alert("Cигнал на ПРОДАЖУ паре EURUSD"); return(10); // 20 - на первой паре сигнал на продажу. } } int start()
{
//+------------------------------------------------------------------+ //| Блок работы с EURUSD | //+------------------------------------------------------------------+ if(EURUSD() != 11 || EURUSD() != 10) { // Если функция EURUSD() не зафиксировала ни один из сигналов, обрабатываем данные дальше. MA_Blue_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Blue,0,MODE_EMA,PRICE_CLOSE,0); MA_Green_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Green,0,MODE_EMA,PRICE_CLOSE,0); MA_Orange_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Orange,0,MODE_EMA,PRICE_CLOSE,0);
SMA_Blue_EURUSD = MA_Blue_EURUSD; // Преобразование int в string SMA_Blue_EURUSD = StringSetChar(SMA_Blue_EURUSD, 6, ''); // Округление до х.хххх SMA_Green_EURUSD = MA_Green_EURUSD; // Преобразование int в string SMA_Green_EURUSD = StringSetChar(SMA_Green_EURUSD, 6, ''); // Округление до х.хххх SMA_Orange_EURUSD = MA_Orange_EURUSD; // Преобразование int в string SMA_Orange_EURUSD = StringSetChar(SMA_Orange_EURUSD, 6, ''); // Округление до х.хххх
}
}
int deinit(){return(0);}
Если все не правильно на корню, предложите методы отслеживания пересечения. Спасибо.
Zherart: Доброго времени суток! Прошу помочь, есть простая задумка реализовать вызов Alert() при пересечении трех МА. Описание пересечения в программе. Вроде все работает, но не так как нужно. Я делаю округление значений переменный до одного знака, чтобы застать пересечение. И этот Alert() барабанит мне до тех пор пока средние будут находиться на одной позиции. Как сделать так, чтобы он вызывался один раз, ну или до 5 раз.Если все не правильно на корню, предложите методы отслеживания пересечения. Спасибо.
//+------------------------------------------------------------------+//| Глобальные переменные |//+------------------------------------------------------------------+externint Period_MA_Blue = 4; // Период 4-х расчётной синей МА (4 часа)externint Period_MA_Green = 13; // Период 13-ти расчётной зеленой МА (13 часов)externint Period_MA_Orange = 50; // Период 50-ти расчётной оранжевой МА (2 дня 2 часа)double MA_Blue_EURUSD, MA_Green_EURUSD, MA_Orange_EURUSD;
string SMA_Blue_EURUSD,SMA_Green_EURUSD,SMA_Orange_EURUSD;
int БАРАБАНИТЬ = 1; // Сколько раз подавать сигналint ПОКУПКА=0,ПРОДАЖА=0;
//+------------------------------------------------------------------+//| Начало программы |//+------------------------------------------------------------------+int init(){return(0);}
int EURUSD()
{
if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD > SMA_Orange_EURUSD)
{
// Если зеленая МА пересекает оранжевую МА и при этом синяя МА выше - сигнал к покупке.if(ПОКУПКА<БАРАБАНИТЬ) {Alert("Cигнал на ПОКУПКУ паре EURUSD");ПОКУПКА++;}
return(11); // 11 - на первой паре сигнал на покупку.
}
else ПОКУПКА=0;
if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD < SMA_Orange_EURUSD)
{
// Если зеленая МА пересекает оранжевую МА и при этом синяя МА ниже - сигнал к продаже.if(ПРОДАЖА<БАРАБАНИТЬ) {Alert("Cигнал на ПРОДАЖУ паре EURUSD");ПРОДАЖА++;}
return(10); // 20 - на первой паре сигнал на продажу.
}
else ПРОДАЖА=0;
}
Передаваемые параметры указываются в круглых скобках после названия вызываемой функции и перечисляются через запятую. Количество передаваемых в функцию параметров не должно превышать 64. Функция может также не использовать передаваемые параметры. В этом случае указывается пустой список параметров, т.е. сразу после названия функции располагаются открывающая и закрывающая круглые скобки.
Количество, тип и порядок упоминания передаваемых параметров в вызове функции должны совпадать с количеством, типом и порядком упоминания формальных параметров, указанных в описании функции (исключение составляет вызов функции, имеющей умолчательные параметры - см. Вызов функции и Описание функции и оператор return). Если такого совпадения нет, то редактор MetaEditor выдаст сообщение об ошибке. В качестве передаваемых параметров могут использоваться константы, переменные, выражения и массивы."
Передаваемые параметры указываются в круглых скобках после названия вызываемой функции и перечисляются через запятую. Количество передаваемых в функцию параметров не должно превышать 64. Функция может также не использовать передаваемые параметры. В этом случае указывается пустой список параметров, т.е. сразу после названия функции располагаются открывающая и закрывающая круглые скобки.
Количество, тип и порядок упоминания передаваемых параметров в вызове функции должны совпадать с количеством, типом и порядком упоминания формальных параметров, указанных в описании функции (исключение составляет вызов функции, имеющей умолчательные параметры - см. Вызов функции и Описание функции и оператор return). Если такого совпадения нет, то редактор MetaEditor выдаст сообщение об ошибке. В качестве передаваемых параметров могут использоваться константы, переменные, выражения и массивы."
Учебник читал перед тем как писать, выделенное подчеркиванием видел, но на практике реализовать не удалось - пишет о несовместимом типе.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Описание пересечения в программе. Вроде все работает, но не так как нужно. Я делаю округление значений переменный до одного знака, чтобы
застать пересечение. И этот Alert() барабанит мне до тех пор пока средние будут находиться на одной позиции. Как сделать так, чтобы он вызывался один раз, ну или до 5 раз.
//| Глобальные переменные |
//+------------------------------------------------------------------+
extern int Period_MA_Blue = 4; // Период 4-х расчётной синей МА (4 часа)
extern int Period_MA_Green = 13; // Период 13-ти расчётной зеленой МА (13 часов)
extern int Period_MA_Orange = 50; // Период 50-ти расчётной оранжевой МА (2 дня 2 часа)
double MA_Blue_EURUSD, MA_Green_EURUSD, MA_Orange_EURUSD;
string SMA_Blue_EURUSD,SMA_Green_EURUSD,SMA_Orange_EURUSD;
//+------------------------------------------------------------------+
//| Начало программы |
//+------------------------------------------------------------------+
int init(){return(0);}
int EURUSD()
{
if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD > SMA_Orange_EURUSD)
{
// Если зеленая МА пересекает оранжевую МА и при этом синяя МА выше - сигнал к покупке.
Alert("Cигнал на ПОКУПКУ паре EURUSD");
return(11); // 11 - на первой паре сигнал на покупку.
}
if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD < SMA_Orange_EURUSD)
{
// Если зеленая МА пересекает оранжевую МА и при этом синяя МА ниже - сигнал к продаже.
Alert("Cигнал на ПРОДАЖУ паре EURUSD");
return(10); // 20 - на первой паре сигнал на продажу.
}
}
int start()
{
//+------------------------------------------------------------------+
//| Блок работы с EURUSD |
//+------------------------------------------------------------------+
if(EURUSD() != 11 || EURUSD() != 10)
{
// Если функция EURUSD() не зафиксировала ни один из сигналов, обрабатываем данные дальше.
MA_Blue_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Blue,0,MODE_EMA,PRICE_CLOSE,0);
MA_Green_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Green,0,MODE_EMA,PRICE_CLOSE,0);
MA_Orange_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Orange,0,MODE_EMA,PRICE_CLOSE,0);
SMA_Blue_EURUSD = MA_Blue_EURUSD; // Преобразование int в string
SMA_Blue_EURUSD = StringSetChar(SMA_Blue_EURUSD, 6, ''); // Округление до х.хххх
SMA_Green_EURUSD = MA_Green_EURUSD; // Преобразование int в string
SMA_Green_EURUSD = StringSetChar(SMA_Green_EURUSD, 6, ''); // Округление до х.хххх
SMA_Orange_EURUSD = MA_Orange_EURUSD; // Преобразование int в string
SMA_Orange_EURUSD = StringSetChar(SMA_Orange_EURUSD, 6, ''); // Округление до х.хххх
}
}
int deinit(){return(0);}
Если все не правильно на корню, предложите методы отслеживания пересечения. Спасибо.
Доброго времени суток! Прошу помочь, есть простая задумка реализовать вызов Alert() при пересечении трех МА.
Описание пересечения в программе. Вроде все работает, но не так как нужно. Я делаю округление значений переменный до одного знака, чтобы
застать пересечение. И этот Alert() барабанит мне до тех пор пока средние будут находиться на одной позиции. Как сделать так, чтобы он вызывался один раз, ну или до 5 раз.Если все не правильно на корню, предложите методы отслеживания пересечения. Спасибо.
Где-то так навскидку...
Или я туплю или что-то с терминалом. Хотел оптимизировать советника, а там нет вкладки "входные параметры" в свойствах эксперта. Помогите.
https://forum.mql4.com/ru/46980/page417#702426
https://www.mql5.com/ru/forum/138609/page417#702426
Можно ли в принимаемых параметрах функции использовать массив? Например, мне нужно создать функцию, которая будет обрабатывать информацию в массиве:
Можно ли в принимаемых параметрах функции использовать массив? Например, мне нужно создать функцию, которая будет обрабатывать информацию в массиве:
А что учебник здесь пишет?
"
Передаваемые параметры указываются в круглых скобках после названия вызываемой функции и перечисляются через запятую. Количество передаваемых в функцию параметров не должно превышать 64. Функция может также не использовать передаваемые параметры. В этом случае указывается пустой список параметров, т.е. сразу после названия функции располагаются открывающая и закрывающая круглые скобки.
Количество, тип и порядок упоминания передаваемых параметров в вызове функции должны совпадать с количеством, типом и порядком упоминания формальных параметров, указанных в описании функции (исключение составляет вызов функции, имеющей умолчательные параметры - см. Вызов функции и Описание функции и оператор return). Если такого совпадения нет, то редактор MetaEditor выдаст сообщение об ошибке. В качестве передаваемых параметров могут использоваться константы, переменные, выражения и массивы."
Можно ли в принимаемых параметрах функции использовать массив? Например, мне нужно создать функцию, которая будет обрабатывать информацию в массиве:
Попробуйте так:
https://docs.mql4.com/ru/basis/variables/formalТоже самое относится и Close - iClose, Open - iOpen, Time - iTime Volume - iVolume и т.д.
А индикатор может рисовать до 8 линий от 0 до 7 https://docs.mql4.com/ru/customind/indicatorbuffers
большое спасибо :) индикатор все равно не рисуется, посыпались шибки в строках типа price=iL[k]; где iL это мой iLow...бывший Low
в общем узнал много полезного...но дальше копать не буду...
есть метод проще визуализиторовать перерисовку...без пользовательского индикатора.
А что учебник здесь пишет?
"
Передаваемые параметры указываются в круглых скобках после названия вызываемой функции и перечисляются через запятую. Количество передаваемых в функцию параметров не должно превышать 64. Функция может также не использовать передаваемые параметры. В этом случае указывается пустой список параметров, т.е. сразу после названия функции располагаются открывающая и закрывающая круглые скобки.
Количество, тип и порядок упоминания передаваемых параметров в вызове функции должны совпадать с количеством, типом и порядком упоминания формальных параметров, указанных в описании функции (исключение составляет вызов функции, имеющей умолчательные параметры - см. Вызов функции и Описание функции и оператор return). Если такого совпадения нет, то редактор MetaEditor выдаст сообщение об ошибке. В качестве передаваемых параметров могут использоваться константы, переменные, выражения и массивы."