Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 441
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подскажите пожалуйста, что я делаю не так!?
Нужно - подсчитать сколько баров прошло с момента пересечения ценой последний раз МА - без учета нулевого бара.
if(Bars>1400)
{
int Stop;
double MATcycle;
for(int i=0;i!=1000 || Stop!=1; i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i+1);
if(MATcycle<High[i+1] && MATcycle>Low[i+1])
{
Stop=1;
Print("MATcycle=",MATcycle," i=",i);
}
else return (0);
}
Подскажите пожалуйста, что я делаю не так!?
Нужно - подсчитать сколько баров прошло с момента пересечения ценой последний раз МА - без учета нулевого бара.
if(Bars>1400)
{
int Stop;
double MATcycle;
for(int i=0;i<1000 || Stop==1; i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i+1);
if(MATcycle<High[i+1] && MATcycle>Low[i+1])
{
Stop=1;
Print("MATcycle=",MATcycle," i=",i);
}
else return (0);
}
Насколько я понимаю, после того, как вы определили пересечение и установили значение stop=1, сразу идет выход из цикла. Хорошо, тогда нужно пойти дальше и запомнить номер свечи, на которой произошло пересечение. Т.е.
Легче написать самому:
Это вы определили номер свечи. Если номер = 2 и не учитываем текущую, то с момента пересечения образовалась одна свеча (ну или интерпретируйте так, как Вам угодно).
Насколько я понимаю, после того, как вы определили пересечение и установили значение stop=1, сразу идет выход из цикла. Хорошо, тогда нужно пойти дальше и запомнить номер свечи, на которой произошло пересечение. Т.е.
Легче написать самому:
Это вы определили номер свечи. Если номер = 2 и не учитываем текущую, то с момента пересечения образовалась одна свеча (ну или интерпретируйте так, как Вам угодно).
Спасибо, у меня так получилось
int Stop=0;
if(Bars>1400)
{
double MATcycle;
for(int i=1;(i!=1000 || Stop==0); i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i);
if(MATcycle<=High[i] && MATcycle>=Low[i])
{
Print("MATcycle=",MATcycle," i=",i);
Stop=i;
break;
}
}
}
Подскажите пожалуйста, такой показатель тестера в жизни реален? И хороший это или плохой результат за год с депо 3000$?
Спасибо, у меня так получилось
int Stop=0;
if(Bars>1400)
{
double MATcycle;
for(int i=1;(i!=1000 || Stop==0); i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i);
if(MATcycle<=High[i] && MATcycle>=Low[i])
{
Print("MATcycle=",MATcycle," i=",i);
Stop=i;
break;
}
}
}
Не стоит так писать, т.к. если за последние 1000 баров пересечения не было, во-первых, цикл пойдет дальше, во-вторых, возможно зацикливание/иные ошибки, т.к. если история закончится, а пересечения так и не произойдет, выхода из цикла не будет, т.к. Stop = 0. Лучше написать так, как я указал выше.
Не стоит так писать, т.к. если за последние 1000 баров пересечения не было, во-первых, цикл пойдет дальше, во-вторых, возможно зацикливание/иные ошибки, т.к. если история закончится, а пересечения так и не произойдет, выхода из цикла не будет, т.к. Stop = 0. Лучше написать так, как я указал выше.
А разве знак "или" не работает - по условию же либо перебор будет на 1000 баров или завершится как только будет найден искомый результат. Или он и так завершится не доходя до 1000, если будет найден искомый результат - пересечение ценой МА?
|| означает, что если хотя бы одно из условий в скобках истинно, то цикл будет повторяться, следовательно, даже когда будет i >= 1000, но stop = 0, то цикл будет продолжаться, i будет и дальше инкрементироваться, что повлечет за собой неверный значения МА (в случае, если произойдет выход за пределы истории). А за завершение при нахождении искомого результата отвечает оператор break;
Здравствуйте! 2015.09.19_02:13 МСК. В функции ArrayResize() в любом случае компилятор пишет
напротив размера массива -- comma expected, хоть пиши int, хоть нет. А если не писать int, то пишет: "-
declaration without type. А ссылку & убрал и квадратные скобки, -- помогло!
Предупреждения: когда было нормально написано, -- компилятор писал: идентификатор скрывает
объявление на глобальном уровне. А когда убрал объявление идентификатора на глобальном уровне, -- стал
писать: ошибка, необъявленный идентификатор. А массивы High[] и Low[] я сменил на HighP[] и LowP[]. Не
помогло. Компилятор пишет то же самое. 02:27 МСК. Прилагаю файл скриншота.
Здравствуйте! 2015.09.19_02:13 МСК. В функции ArrayResize() в любом случае компилятор пишет
напротив размера массива -- comma expected, хоть пиши int, хоть нет. А если не писать int, то пишет: "-
declaration without type. А ссылку & убрал и квадратные скобки, -- помогло!
Предупреждения: когда было нормально написано, -- компилятор писал: идентификатор скрывает
объявление на глобальном уровне. А когда убрал объявление идентификатора на глобальном уровне, -- стал
писать: ошибка, необъявленный идентификатор. А массивы High[] и Low[] я сменил на HighP[] и LowP[]. Не
помогло. Компилятор пишет то же самое. 02:27 МСК. Прилагаю файл скриншота.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Вопросы от начинающих
Karputov Vladimir, 2015.09.17 18:46