Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 176
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Читаю, но никогда не догадалась бы открывать файл перед циклом )
Возможно невнимательно читала )Есть советник, который при торговле отталкивается от Пинбара. Робот корректно работает на валютах и абсолютно непредсказуемо на CFD.
Подскажите, пожалуйста, как такое может быть?
Написал робота который при торговле отталкивается от Пинбара. Робот корректно работает на валютах и абсолютно непредсказуемо на CFD.
Подскажите, пожалуйста, как такое может быть?
Вот такая функция определения Пинбара
Когда вставляю ее в советник, то функция отрабатывает (т.е. советник устанавливает сделки на след.свече после бара соответствующему условиям функции) на валютных парах отлично. А на CFD сделки устанавливаются где попало.
В чем разница для данной функции между CFD и валютными парами?
Вот такая функция определения Пинбара
Когда вставляю ее в советник, то функция отрабатывает (т.е. советник устанавливает сделки на след.свече после бара соответствующему условиям функции) на валютных парах отлично. А на CFD сделки устанавливаются где попало.
В чем разница для данной функции между CFD и валютными парами?
В первую очередь замените все && на {} чтобы каждое из условий было в своём блоке - тогда вы сможете в каждом из блоков распринтовать проверяемый результат - поглядите в журнале какие значения у вас получаются.
Спасибо, последовал совету - понял где туплю. Из-за того что советник ганялся по пятизнаку, а CFD - это всего лишь 2 знака, там где я ожидал реакцию советника на минимум 50 пунктов, а получал уже начиная с 5ти. Протупил.
Просьба помочь еще с таким моментом.
Есть в коде такая часть:
MathAbs(Close1-Open1)/(High1-Low1)
Иногда случается, что High1=Low1. Тогда тестер выдает критическую ошибку, что на ноль делить нельзя.
Как обойти?
Спасибо, последовал совету - понял где туплю. Из-за того что советник ганялся по пятизнаку, а CFD - это всего лишь 2 знака, там где я ожидал реакцию советника на минимум 50 пунктов, а получал уже начиная с 5ти. Протупил.
Просьба помочь еще с таким моментом.
Есть в коде такая часть:
Иногда случается, что High1=Low1. Тогда тестер выдает критическую ошибку, что на ноль делить нельзя.
Как обойти?
Можно не думая:
Здравствуйте, столкнулся с проблемой при компиляции:
void OnTick()
{
double minprice=999999, mp, maxprice=-999999;
for(int i=0; i<10; i++)
{
mp = iLow(Simbol(), PERIOD_CURRENT, i);
if (mp < minprice)
minprice = mp;
}
for(int i=0; i<10; i++)
{
mp = iHigh(Simbol(), PERIOD_CURRENT, i);
if (mp > maxprice)
maxprice = mp;
}
Comment("Minprice: " + DoubleToString(minprice, 5) + "\n"+
"Maxprice: " + DoubleToString(maxprice, 5));
}
В учебнике есть функции эти на которые компилятор ругается iLow и iHigh и переменная Simbol() там она в строчном режиме правда, но там другую задачу в примере решают. Что мне необходимо подправить в коде который выше. Я завис и не могу скомпилировать цикл чтобы проверить его.
ИЗ УЧЕБНИКА
Если необходимо получить значение, соответствующее текущему незавершенному бару, то
можно использовать первую форму вызова с указанием start_pos=0 и count=1.
Пример:
#property copyright "2009, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property description "Пример вывода значений High[i] и Low[i]"
#property description "для баров, выбранных случайным образом"
double High[],Low[];
//+------------------------------------------------------------------+
//| Получим Low для заданного номера бара |
//+------------------------------------------------------------------+
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
double low=0;
ArraySetAsSeries(Low,true);
int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low);
if(copied>0 && index<copied) low=Low[index];
return(low);
}
//+------------------------------------------------------------------+
//| Получим High для заданного номера бара |
//+------------------------------------------------------------------+
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
double high=0;
ArraySetAsSeries(High,true);
int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High);
if(copied>0 && index<copied) high=High[index];
return(high);
}
//+------------------------------------------------------------------+
Здравствуйте, столкнулся с проблемой при компиляции:
void OnTick()
{
double minprice=999999, mp, maxprice=-999999;
for(int i=0; i<10; i++)
{
mp = iLow(Simbol(), PERIOD_CURRENT, i);
if (mp < minprice)
minprice = mp;
}
for(int i=0; i<10; i++)
{
mp = iHigh(Simbol(), PERIOD_CURRENT, i);
if (mp > maxprice)
maxprice = mp;
}
Comment("Minprice: " + DoubleToString(minprice, 5) + "\n"+
"Maxprice: " + DoubleToString(maxprice, 5));
}
В учебнике есть функции эти на которые компилятор ругается iLow и iHigh b переменная Simbol() там она в строчном режиме правда, но там другую задачу в примере решают. Что мне необходимо подправить в коде который выше. Я завис и не могу скомпилировать цикл чтобы проверить его.
ИЗ УЧЕБНИКА
Если необходимо получить значение, соответствующее текущему незавершенному бару, то
можно использовать первую форму вызова с указанием start_pos=0 и count=1.
Пример:
#property copyright "2009, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property description "Пример вывода значений High[i] и Low[i]"
#property description "для баров, выбранных случайным образом"
double High[],Low[];
//+------------------------------------------------------------------+
//| Получим Low для заданного номера бара |
//+------------------------------------------------------------------+
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
double low=0;
ArraySetAsSeries(Low,true);
int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low);
if(copied>0 && index<copied) low=Low[index];
return(low);
}
//+------------------------------------------------------------------+
//| Получим High для заданного номера бара |
//+------------------------------------------------------------------+
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
double high=0;
ArraySetAsSeries(High,true);
int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High);
if(copied>0 && index<copied) high=High[index];
return(high);
}
//+------------------------------------------------------------------+
у вас ошибка в этом слове Simbol() надо Symbol() или _Symbol писать
у вас ошибка в этом слове Simbol() надо Symbol() или _Symbol писать
Спасибо, ошибка по Simbol исправлена путём правильного написания Symbol. Что-то не то у меня с функциями iLow и iHigh. см. фото
Насколько в % вообще сходство между MQL 4 и MQL 5 ? а то это я так буду каждый цикл голову ломать по видеоурокам MQL4.