[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 339

 
artmedia70:

Я ж не говорил о внешних переменных. Я говорил вот о чём.

Представим ситуацию. Необходимо принять решение в соответствии с данными последней открытой позиции. 


Для тестера:

Создаём переменные, в которых будем хранить необходимые данные последней открытой позиции.

Как только новая позиция открывается, тут же складываем нужные нам данные в эти переменные.

Когда приходит сигнал на открытие следующей позиции (например через 20 тестерных минут), нам нужно проверить некие критерии, по которым принимаем решение о данных открываемой позиции. Эти критерии, по условию, зависят от предыдущей открытой позиции. Мы их считываем с переменных (мы ж их сохранили при прошлом открытии) и используем в качестве дополнительных данных для новой позиции.

Когда открываем позицию, сохраняем в переменных новые данные о вновь открытой позиции.


Для реала:

Представим ту же ситуацию, но ... ещё представим, что после открытия прошлой позиции и сохранения её данных в переменных, прошло 10 минут (до открытия следующей ещё 10 минут должно пройти (ну мы так предположили в тестерной ситуации)). И вот в этом промежутке времени советник был перезагружен по каким-либо причинам.

Что после рестарта советника произойдёт с данными о последней открытой позиции, которые хранились в переменных? Их не будет.

Значит где их нужно брать? Правильно - искать. Для того и нужны функции поиска необходимых данных. Поэтому для реала лучше сразу всё находить тогда, когда это нам потребуется, а не хранить в переменных, что действительно гораздо проще и быстрее.


Извиняюсь за поздние пояснения - только в свет вышел ... :))

Вы правы как всегда! Я тоже применяю функции, когда нужны свежие данные. А "переменные", о которых Вы рассказали, я не использую, т.к. не имеют смысла, инфа быстро устаревает. А Виктору я советовал не зацикливаться на функциях, которых можно избежать, чтобы не утяжелять код! Спасибо за Ваше внимание!
 
Добрый день. Возможно ли в MetaTrader 4 установить ограничения прибыли. Именно уже в валюте ограничения, а не в пунктах. Если да, то как
 
   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. рисуем стрелку над этим баром.

   ну вот как-то так, только при написании кода куча вопросов, ошибок и полная каша(((  

   Ну и вот реализация в коде. 

 
местами перепутал текстовку и код, сори
 

Господа подскажите пожалуйста как при помощи цикла закодировать такой алгоритм.

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)

                                                                                                                                             //открыть ордер.

Спасибо.

 
solnce600:

Господа подскажите пожалуйста как при помощи цикла закодировать такой алгоритм.

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)

                                                                                                                                             //открыть ордер.

Спасибо.


  Создаем флаг успешности условия, устанавливаем его в тру, проходим в цикле нужное количество свечей, если на любой из них условие не соблюдается, устанавливаем флаг в фальсе и выходим из цикла. 
 
FAQ:

  Создаем флаг успешности условия, устанавливаем его в тру, проходим в цикле нужное количество свечей, если на любой из них условие не соблюдается, устанавливаем флаг в фальсе и выходим из цикла. 

Большое спасибо.Извините ради бога....я еще немного торможу с пониманием того что Вы написали.

Буду Вам очень признателен если напишете код..... и тогда я все пойму.

 

bool have = true;

for(int i=0;i<10;i++){

   if(Low[i]<=Low[i+1]){have=false; break;} 

if(have){

// действия если условие соблюдено 

}else{

 // действия если условие не соблюдено

}

 
FAQ:

bool have = true;

for(int i=0;i<10;i++){

   if(Low[i]<=Low[i+1]){have=false; break;} 

if(have){

// действия если условие соблюдено 

}else{

 // действия если условие не соблюдено

}

Большое спасибо.Благодаря Вам .... и таким как Вы...я еще немного продвинулся в освоении премудростей программирования....
 

люди подскажите как можно закрыть отложенный ордер через н, количество пунктовесли он не сработал?

Причина обращения: