Я ж не говорил о внешних переменных. Я говорил вот о чём.
Представим ситуацию. Необходимо принять решение в соответствии с данными последней открытой позиции.
Для тестера:
Создаём переменные, в которых будем хранить необходимые данные последней открытой позиции.
Как только новая позиция открывается, тут же складываем нужные нам данные в эти переменные.
Когда приходит сигнал на открытие следующей позиции (например через 20 тестерных минут), нам нужно проверить некие критерии, по которым принимаем решение о данных открываемой позиции. Эти критерии, по условию, зависят от предыдущей открытой позиции. Мы их считываем с переменных (мы ж их сохранили при прошлом открытии) и используем в качестве дополнительных данных для новой позиции.
Когда открываем позицию, сохраняем в переменных новые данные о вновь открытой позиции.
Для реала:
Представим ту же ситуацию, но ... ещё представим, что после открытия прошлой позиции и сохранения её данных в переменных, прошло 10 минут (до открытия следующей ещё 10 минут должно пройти (ну мы так предположили в тестерной ситуации)). И вот в этом промежутке времени советник был перезагружен по каким-либо причинам.
Что после рестарта советника произойдёт с данными о последней открытой позиции, которые хранились в переменных? Их не будет.
Значит где их нужно брать? Правильно - искать. Для того и нужны функции поиска необходимых данных. Поэтому для реала лучше сразу всё находить тогда, когда это нам потребуется, а не хранить в переменных, что действительно гораздо проще и быстрее.
Извиняюсь за поздние пояснения - только в свет вышел ... :))
Вы правы как всегда! Я тоже применяю функции, когда нужны свежие данные. А "переменные", о которых Вы рассказали, я не использую, т.к. не имеют смысла, инфа быстро устаревает. А Виктору я советовал не зацикливаться на функциях, которых можно избежать, чтобы не утяжелять код! Спасибо за Ваше внимание!
for(i=0;i<limit;i++) /*вопрос: еще использовал и такую последовательность for(i=Bars-1; i>=0; i--), есть ли разница с какой
"стороны" заполнять массив и рассматривать значения?*/
RSI=iRSI(0,0,8,PRICE_CLOSE,i);
// задаем пустое значение буфера
RSIBuffer3[i]=0.0/* вроде так, мысль такая, что буфер должен быть пустым в цикле for(int i=0;i<limit;i++), до момента достижения
RSI заданных значений. Вопрос: так ли? и где он должен находится? *///ставим условие при котором пока RSI >= 70
{
while RSI>=70
{
i++; //вопрос: где то видел эту часть кода в конце цикла, есть ли разница?// заполняем буфер значениями RSI
RSIBuffer3[i]=iRSI(0,0,8,PRICE_CLOSE,i);
}
// определяем позицию максимального значения в массиве int RSI_max = ArrayMaximum (RSIBuffer3[i], int count=WHOLE_ARRAY, int start=0); /* тут выдает ошибку на значениях count и start отсюда вопрос: нужно ли определять размер массива через ArraySize? и какое начальное значение должно быть, не i ли?*///ищем бар со значением RSI равным максимальному значению RSI в массиве if RSI=RSIBuffer3[RSI_max];
// рисуем стрелку на этом значении
ExtMapBuffer2[i]=High[i]+5*Point;
else
ExtMapBuffer2[i]=0.0;
}
//ставим условие при котором пока RSI <= 30
{
while RSI<=30
{
i++;
// заполняем буфер значениями RSI
RSIBuffer3[i]=iRSI(0,0,8,PRICE_CLOSE,i);
{
// определяем позицию минимального значения в массиве int RSI_min = ArrayMinimum (RSIBuffer3[i], int count=WHOLE_ARRAY, int start=0);
//ищем бар со значением RSI равным максимальному значению RSI в массиве if RSI=RSIBuffer3[RSI_min];
// рисуем стрелку на этом значении
ExtMapBuffer1[i]=Low[i]-5*Point;
else
ExtMapBuffer1[i]=0.0;
}
return(0);
}
помогите разобраться с логикой, чето я как-то никак не могу простую логику переложить в программу (может литературу какую порекомендуете)
Задача: Рассчитать максимальное (минимальное) RSI при значениях выше 70 (ниже 30) и нарисовать стрелку вниз (вверх) над баром
при этих значениях.
Реализация (первая часть, вторая аналогичная):
1. рассчитываем значение RSI для каждого бара
2. пока RSI больше 70 наполняем буфер RSI его значениями
3. определяем позицию максимального значения в массиве
4. ищем бар со значением RSI равным максимальному значению RSI в массиве
5. рисуем стрелку над этим баром.
ну вот как-то так, только при написании кода куча вопросов, ошибок и полная каша(((
Если Low 1 и одновременноLow 2 и одновременно Low 3...... .. .и одновременноLow 9 свечи > Low 10 свечи (т.е Low свечей с 1 по 9)
//открыть ордер.
Спасибо.
Создаем флаг успешности условия, устанавливаем его в тру, проходим в цикле нужное количество свечей, если на любой из них условие не соблюдается, устанавливаем флаг в фальсе и выходим из цикла.
Создаем флаг успешности условия, устанавливаем его в тру, проходим в цикле нужное количество свечей, если на любой из них условие не соблюдается, устанавливаем флаг в фальсе и выходим из цикла.
Большое спасибо.Извините ради бога....я еще немного торможу с пониманием того что Вы написали.
Буду Вам очень признателен если напишете код..... и тогда я все пойму.
Я ж не говорил о внешних переменных. Я говорил вот о чём.
Представим ситуацию. Необходимо принять решение в соответствии с данными последней открытой позиции.
Для тестера:
Создаём переменные, в которых будем хранить необходимые данные последней открытой позиции.
Как только новая позиция открывается, тут же складываем нужные нам данные в эти переменные.
Когда приходит сигнал на открытие следующей позиции (например через 20 тестерных минут), нам нужно проверить некие критерии, по которым принимаем решение о данных открываемой позиции. Эти критерии, по условию, зависят от предыдущей открытой позиции. Мы их считываем с переменных (мы ж их сохранили при прошлом открытии) и используем в качестве дополнительных данных для новой позиции.
Когда открываем позицию, сохраняем в переменных новые данные о вновь открытой позиции.
Для реала:
Представим ту же ситуацию, но ... ещё представим, что после открытия прошлой позиции и сохранения её данных в переменных, прошло 10 минут (до открытия следующей ещё 10 минут должно пройти (ну мы так предположили в тестерной ситуации)). И вот в этом промежутке времени советник был перезагружен по каким-либо причинам.
Что после рестарта советника произойдёт с данными о последней открытой позиции, которые хранились в переменных? Их не будет.
Значит где их нужно брать? Правильно - искать. Для того и нужны функции поиска необходимых данных. Поэтому для реала лучше сразу всё находить тогда, когда это нам потребуется, а не хранить в переменных, что действительно гораздо проще и быстрее.
Извиняюсь за поздние пояснения - только в свет вышел ... :))
помогите разобраться с логикой, чето я как-то никак не могу простую логику переложить в программу (может литературу какую порекомендуете)
Задача: Рассчитать максимальное (минимальное) RSI при значениях выше 70 (ниже 30) и нарисовать стрелку вниз (вверх) над баром
при этих значениях.
Реализация (первая часть, вторая аналогичная):
1. рассчитываем значение RSI для каждого бара
2. пока RSI больше 70 наполняем буфер RSI его значениями
3. определяем позицию максимального значения в массиве
4. ищем бар со значением RSI равным максимальному значению RSI в массиве
5. рисуем стрелку над этим баром.
ну вот как-то так, только при написании кода куча вопросов, ошибок и полная каша(((
Ну и вот реализация в коде.
Господа подскажите пожалуйста как при помощи цикла закодировать такой алгоритм.
if (iLow (Symbol (),0,1) > iLow (Symbol (),0,10)) // если МИНИМУМ первой свечи > МИНИМУМА десятой свечи
OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point,"jfh",123 ); //открыть ордер.
А МНЕ НУЖНО
Если Low 1 и одновременно Low 2 и одновременно Low 3...... .. .и одновременно Low 9 свечи > Low 10 свечи (т.е Low свечей с 1 по 9)
//открыть ордер.
Спасибо.
Господа подскажите пожалуйста как при помощи цикла закодировать такой алгоритм.
if (iLow (Symbol (),0,1) > iLow (Symbol (),0,10)) // если МИНИМУМ первой свечи > МИНИМУМА десятой свечи
OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point,"jfh",123 ); //открыть ордер.
А МНЕ НУЖНО
Если Low 1 и одновременно Low 2 и одновременно Low 3...... .. .и одновременно Low 9 свечи > Low 10 свечи (т.е Low свечей с 1 по 9)
//открыть ордер.
Спасибо.
Создаем флаг успешности условия, устанавливаем его в тру, проходим в цикле нужное количество свечей, если на любой из них условие не соблюдается, устанавливаем флаг в фальсе и выходим из цикла.
Создаем флаг успешности условия, устанавливаем его в тру, проходим в цикле нужное количество свечей, если на любой из них условие не соблюдается, устанавливаем флаг в фальсе и выходим из цикла.
Большое спасибо.Извините ради бога....я еще немного торможу с пониманием того что Вы написали.
Буду Вам очень признателен если напишете код..... и тогда я все пойму.
bool have = true;
for(int i=0;i<10;i++){
if(Low[i]<=Low[i+1]){have=false; break;}
}
if(have){
// действия если условие соблюдено
}else{
// действия если условие не соблюдено
}bool have = true;
for(int i=0;i<10;i++){
if(Low[i]<=Low[i+1]){have=false; break;}
}
if(have){
// действия если условие соблюдено
}else{
// действия если условие не соблюдено
}люди подскажите как можно закрыть отложенный ордер через н, количество пунктовесли он не сработал?