Насколько я понимаю, после того, как вы определили пересечение и установили значение stop=1, сразу идет выход из цикла. Хорошо, тогда нужно пойти дальше и запомнить номер свечи, на которой произошло пересечение. Т.е.
Легче написать самому:
for( int i = 1; i < 1000; i++ )
{
iMaValue = ...; // Значение МА на i свече
if( iMaValue < High[ i ] && iMaValue > low[ i ] )
{
num = i; // Запоминаем номер свечи, на котором произошло пересечениеbreak; // Выходим из цикла
}
}
Это вы определили номер свечи. Если номер = 2 и не учитываем текущую, то с момента пересечения образовалась одна свеча (ну или интерпретируйте так, как Вам угодно).
Насколько я понимаю, после того, как вы определили пересечение и установили значение stop=1, сразу идет выход из цикла. Хорошо, тогда нужно пойти дальше и запомнить номер свечи, на которой произошло пересечение. Т.е.
Легче написать самому:
Это вы определили номер свечи. Если номер = 2 и не учитываем текущую, то с момента пересечения образовалась одна свеча (ну или интерпретируйте так, как Вам угодно).
alph: Подскажите пожалуйста, такой показатель тестера в жизни реален? И хороший это или плохой результат за год с депо 3000$?
Ответ прост: показатели тестера в жизни НЕ РЕАЛЬНЫ, если вы тестируете советника. Тестер стратегий используется трейдерами для проверки работоспособности АТС, либо для тестирования ручных стратегий в он-лайне.
Не стоит так писать, т.к. если за последние 1000 баров пересечения не было, во-первых, цикл пойдет дальше, во-вторых, возможно зацикливание/иные ошибки, т.к. если история закончится, а пересечения так и не произойдет, выхода из цикла не будет, т.к. Stop = 0. Лучше написать так, как я указал выше.
Не стоит так писать, т.к. если за последние 1000 баров пересечения не было, во-первых, цикл пойдет дальше, во-вторых, возможно зацикливание/иные ошибки, т.к. если история закончится, а пересечения так и не произойдет, выхода из цикла не будет, т.к. Stop = 0. Лучше написать так, как я указал выше.
А разве знак "или" не работает - по условию же либо перебор будет на 1000 баров или завершится как только будет найден искомый результат. Или он и так завершится не доходя до 1000, если будет найден искомый результат - пересечение ценой МА?
-Aleks-: А разве знак "или" не работает - по условию же либо перебор будет на 1000 баров или завершится как только будет найден искомый результат. Или он и так завершится не доходя до 1000, если будет найден искомый результат - пересечение ценой МА?
|| означает, что если хотя бы одно из условий в скобках истинно, то цикл будет повторяться, следовательно, даже когда будет i >= 1000, но stop = 0, то цикл будет продолжаться, i будет и дальше инкрементироваться, что повлечет за собой неверный значения МА (в случае, если произойдет выход за пределы истории). А за завершение при нахождении искомого результата отвечает оператор break;
Tapochun: || означает, что если хотя бы одно из условий в скобках истинно, то цикл будет повторяться, следовательно, даже когда будет 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 МСК. Прилагаю файл скриншота.
Подскажите пожалуйста, что я делаю не так!?
Нужно - подсчитать сколько баров прошло с момента пересечения ценой последний раз МА - без учета нулевого бара.
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