Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 471
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
1. Все совпадают
2. Нет такого параметра.
Мне в другой ветке сказали, что эта проблема в МТ4 нерешаема. :(
2. Я не знаю где вы взяли МАшку в отдельном окне, чтобы мог что-либо вам сказать о параметре. Но... Если взять из Индикаторы --> Осцилляторы --> Moving Averages of Oscillator, то в нём есть "Применить к:"
Так вот, если вы на индикатор в отдельном окне попробуете положить ещё один, то в некоторых случаях его можно применить к не только стандартным ценам из перечисления ENUM_APPLIED_PRICE, но и к данным того индикатора, который уже есть в окне. Может вы как раз в такой ситуации.
3. Какая проблема? Что три МАшки не соответствуют трём таким же (по вашему утверждению) МАшкам? Так это не нерешаемо, это - нонсенс. Если они сделаны правильно, то они обязаны совпадать. Какая разница - три отдельные МАшки со своими параметрами, или те же три МАшки с теми же параметрами, но впихнутые в один индикатор с тремя буферами... Вы видите разницу? Я - нет. А если вы её видите, то ищите несоответствие в расчётах МАшек.
Кстати... Аллигатор - три МАшки в одном индикаторе, каждая со своими параметрами. Настройте параметры одинаково с вашими тремя раздельными МАшками - и они совпадут. Правда у вас вся эта вакханалия в отдельном окне... Ну так ... для примера
Я сделал индикатор ТриВОдном - 3МА(4,9,14) и решил его сравнить для проверки правильности с окном, где три индикатора - МА(4), МА(9), МА(14). Волосы встали дыбом. :)
"где три индикатора - МА(4), МА(9), МА(14)" индикаторное окно самомасштабируется по первому прикреплённому к этому окну индикатору. В Вашем случае, возможно, это МА(4)
Подскажите пожалуйста конструкцию получения через функцию значения встроенного индикатора с верхнего тайм фрейма, но внутри этого тайм фрейма.
Т.е. текущий график 15 минут, нужно получить значение индикатора рассчитанного по дням,но 45 минут назад, как это сделать?
Вот не хитрый алгоритм, который возвращает значение индикатора, но только для текущего бара.
double iDelta(int Variant,int n,int TF,int index)
{
double Fibo=0;
if(Variant==1) Fibo=0.236;
if(Variant==2) Fibo=0.382;
if(Variant==3) Fibo=0.5;
if(Variant==4) Fibo=0.618;
if(Variant==5) Fibo=0.764;
if(Variant==6) Fibo=1;
if(Variant==7) Fibo=1.236;
if(Variant==8) Fibo=1.382;
if(Variant==9) Fibo=1.5;
if(Variant==10) Fibo=1.618;
if(Variant==11) Fibo=2.0;
if(Variant==12) Fibo=2.236;
if(Variant==-1) Fibo=-0.236;
if(Variant==-2) Fibo=-0.382;
if(Variant==-3) Fibo=-0.5;
if(Variant==-4) Fibo=-0.618;
if(Variant==-5) Fibo=-0.764;
if(Variant==-6) Fibo=-1;
if(Variant==-7) Fibo=-1.236;
if(Variant==-8) Fibo=-1.382;
if(Variant==-9) Fibo=-1.5;
if(Variant==-10) Fibo=-1.618;
if(Variant==-11) Fibo=-2.0;
if(Variant==-12) Fibo=-2.236;
return ( NormalizeDouble(iOpen(Symbol(),TF,index)+iATR(Symbol(), TF, n, index+1)*Fibo,Digits) );
}
Попробуйте отключить самомасштабирование индикаторных окон, может всё и уляжется.
"где три индикатора - МА(4), МА(9), МА(14)" индикаторное окно самомасштабируется по первому прикреплённому к этому окну индикатору. В Вашем случае, возможно, это МА(4)
2. Я не знаю где вы взяли МАшку в отдельном окне, чтобы мог что-либо вам сказать о параметре. Но... Если взять из Индикаторы --> Осцилляторы --> Moving Averages of Oscillator, то в нём есть "Применить к:"
Так вот, если вы на индикатор в отдельном окне попробуете положить ещё один, то в некоторых случаях его можно применить к не только стандартным ценам из перечисления ENUM_APPLIED_PRICE, но и к данным того индикатора, который уже есть в окне. Может вы как раз в такой ситуации.
3. Какая проблема? Что три МАшки не соответствуют трём таким же (по вашему утверждению) МАшкам? Так это не нерешаемо, это - нонсенс. Если они сделаны правильно, то они обязаны совпадать. Какая разница - три отдельные МАшки со своими параметрами, или те же три МАшки с теми же параметрами, но впихнутые в один индикатор с тремя буферами... Вы видите разницу? Я - нет. А если вы её видите, то ищите несоответствие в расчётах МАшек.
Кстати... Аллигатор - три МАшки в одном индикаторе, каждая со своими параметрами. Настройте параметры одинаково с вашими тремя раздельными МАшками - и они совпадут. Правда у вас вся эта вакханалия в отдельном окне... Ну так ... для примера
Артём, "Применить к" - здесь есть только перечисление цен. Расчеты МА правильные, все три линии проверены путем добавления в окно с индикатором 3МА одиночного индикатора с периодом 4, потом 9, потом 14. В каждом случае одиночный индикатор совпадает с соответствующей линией индикатора 3МА
Подскажите пожалуйста конструкцию получения через функцию значения встроенного индикатора с верхнего тайм фрейма, но внутри этого тайм фрейма.
Т.е. текущий график 15 минут, нужно получить значение индикатора рассчитанного по дням,но 45 минут назад, как это сделать?
Вот не хитрый алгоритм, который возвращает значение индикатора, но только для текущего бара.
double iDelta(int Variant,int n,int TF,int index)
{
double Fibo=0;
if(Variant==1) Fibo=0.236;
if(Variant==2) Fibo=0.382;
if(Variant==3) Fibo=0.5;
if(Variant==4) Fibo=0.618;
if(Variant==5) Fibo=0.764;
if(Variant==6) Fibo=1;
if(Variant==7) Fibo=1.236;
if(Variant==8) Fibo=1.382;
if(Variant==9) Fibo=1.5;
if(Variant==10) Fibo=1.618;
if(Variant==11) Fibo=2.0;
if(Variant==12) Fibo=2.236;
if(Variant==-1) Fibo=-0.236;
if(Variant==-2) Fibo=-0.382;
if(Variant==-3) Fibo=-0.5;
if(Variant==-4) Fibo=-0.618;
if(Variant==-5) Fibo=-0.764;
if(Variant==-6) Fibo=-1;
if(Variant==-7) Fibo=-1.236;
if(Variant==-8) Fibo=-1.382;
if(Variant==-9) Fibo=-1.5;
if(Variant==-10) Fibo=-1.618;
if(Variant==-11) Fibo=-2.0;
if(Variant==-12) Fibo=-2.236;
return ( NormalizeDouble(iOpen(Symbol(),TF,index)+iATR(Symbol(), TF, n, index+1)*Fibo,Digits) );
}
На вопрос ответить не могу, а функцию можно упростить и существенно ускорить.
При инициализации индикатора создать статический массив
double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};
и все if в iDelta() можно будет заменить на:
if (Variant>0)
Fibo = arrFibo[ Variant];
else
Fibo = -arrFibo[-Variant];
На вопрос ответить не могу, а функцию можно упростить и существенно ускорить.
При инициализации индикатора создать статический массив
double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};
и все if в iDelta() можно будет заменить на:
if (Variant>0)
Fibo = arrFibo[ Variant];
else
Fibo = -arrFibo[-Variant];
Спасибо, попробую, может будет лучше.
На вопрос ответить не могу, а функцию можно упростить и существенно ускорить.
При инициализации индикатора создать статический массив
double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};
и все if в iDelta() можно будет заменить на:
if (Variant>0)
Fibo = arrFibo[ Variant];
else
Fibo = -arrFibo[-Variant];
Сделал. как Вы написали, но не получилось так как должно быть - пока не знаю что именно не так - надо принтить....
Я вот не пойму по поводу строки
else Fibo = -arrFibo[-Variant];
Сделал. как Вы написали, но не получилось так как должно быть - пока не знаю что именно не так - надо принтить....
Я вот не пойму по поводу строки
else Fibo = -arrFibo[-Variant];
В этом же случае нужны отрицательные значения Fibo, поэтому -arrFibo.