Бесконечный цикл while.
я никогда while использую, только for, в принципе с for можно сделать
все что и с while
Ага, только for ограничен по количеству циклов. Хотя то же можно
сделать бесконечное количество. В зависимости от условий. Например
for(int i=0;true;i+) {....} Будет работать бесконечно. Дело только в понимании
своих действий.
artem, попробуй делать проверку значения RSI просто по приходу нового тика, без цикла. Можно оставить все так же как было, в функции start(), но цикл просто убрать, а вместо него поставить одиночный if.
Разумеется, всё можно и на while делать, не применяя for. Это дело удобства и вкуса.
только что сделал так, чтоб посмотреть а что вообще вычиляется и оказалось, что значение RSI вообще не меняется!!!!!
for (i = 1; i<=20; i++)
{
Print("iRSIOnArray(ExtBuffer,0,3,0) "+ DoubleToStr(iRSIOnArray(ExtBuffer, 0,3,0), 4) +" ExtBuffer[0] - " + DoubleToStr(ExtBuffer[0], 4)+" "+i);
ExtBuffer[0]=ExtBuffer[0]-10*Point;
}
КАК ЭТО??????
Может кто-то из разработчиков скажет в чем прикол?
for (i = 1; i<=20; i++)
{
Print("iRSIOnArray(ExtBuffer,0,3,0) "+ DoubleToStr(iRSIOnArray(ExtBuffer, 0,3,0), 4) +" ExtBuffer[0] - " + DoubleToStr(ExtBuffer[0], 4)+" "+i);
ExtBuffer[0]=ExtBuffer[0]-10*Point;
}
КАК ЭТО??????
Может кто-то из разработчиков скажет в чем прикол?
Кстати это не первый случай когда я заметил эту проблему. Складывается
такое впечатление, что раз вычислившись индикатор тупо не перевычисляется!!!,
если нет нового тика а все изменения массивов происходят внутри тела start
Вопрос к stringo. Он то и получается бесконечным, так как значение iRSIOnArray не меняется,
а так ведь в коде все правильно...
Как написано в српавке по ArrayCopySeries:
Реального распределения памяти под массив данных и копирования не происходит. При обращении к такому массиву производится перенаправление доступа. Исключение составляют массивы, назначенные в качестве индексных в пользовательских индикаторах. В этом случае производится реальное копирование данных.Поэтому попытки изменить значение любого элемента такого массива
аналогично попыткам сдвинуть что-либо в голографическом изоюбражении.
Вроде трехмерно, а зацепиться не за что. Я так понимаю :)
Реального распределения памяти под массив данных и копирования не происходит. При обращении к такому массиву производится перенаправление доступа. Исключение составляют массивы, назначенные в качестве индексных в пользовательских индикаторах. В этом случае производится реальное копирование данных.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Смысл в том что на нулевом баре я ищу при какой цене значение RSI будет, наприме 50. Вот что я делаю:
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Green
double ExtBuffer[];
int init()
{IndicatorBuffers(1);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtBuffer);
return(0);
}
int start()
{
int i;
ArrayCopySeries(ExtBuffer,MODE_CLOSE,Symbol(),Period());
ArraySetAsSeries(ExtBuffer,true);
while(iRSIOnArray(ExtBuffer,0,3,0)>50)ExtBuffer[0]=ExtBuffer[0]-Point;
}
В итоге терминал зависает, я никак не могу понять что происходит и как мне решить задачу.