[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 339

 
artmedia70:

Eu não estava falando de variáveis externas. Eu estava falando sobre isso.

Vamos imaginar uma situação. Uma decisão deve ser tomada de acordo com a última posição em aberto.


Para o testador:

Criamos variáveis, nas quais armazenaremos os dados necessários da última posição aberta.

Assim que uma nova posição for aberta, adicionaremos imediatamente os dados necessários a estas variáveis.

Quando chega um sinal para abrir uma próxima posição (por exemplo, após 20 minutos de teste), precisamos verificar alguns critérios, pelos quais decidimos sobre os dados da posição a ser aberta. Estes critérios, por convenção, dependem da posição anterior aberta. Nós as lemos a partir de variáveis (as salvamos na abertura anterior) e as usamos como dados adicionais para uma nova posição.

Quando abrimos uma posição, armazenamos os novos dados sobre a nova posição aberta nas variáveis.


De verdade:

Vamos imaginar a mesma situação, mas ... Imagine que depois que a última posição foi aberta e seus dados armazenados em variáveis, 10 minutos tenham passado (outros 10 minutos têm que passar antes que a próxima posição seja aberta (acabamos de assumir isso em um "testador")). E neste intervalo de tempo, o consultor especializado foi reiniciado por alguma razão.

O que acontece após o reinício do EA com os dados da última posição aberta que foram armazenados em variáveis? Eles não existirão.

Então, onde precisamos obtê-los? Certo - busca. É por isso que precisamos da função de buscar os dados necessários. Portanto, é melhor encontrar tudo de uma vez, quando precisamos, e não armazená-lo em variáveis, o que é realmente muito mais fácil e rápido.


Desculpe pelo esclarecimento tardio - acabamos de sair para o mundo ... :))

Você está certo como sempre! Eu também uso funções quando preciso de novos dados. E eu não uso as "variáveis" que você mencionou, porque elas não fazem sentido, as informações rapidamente se tornam obsoletas. E aconselhei Victor a não ficar preso a funções que possam ser evitadas, para não tornar o código mais pesado! Obrigado por sua atenção!
 
Boa tarde. É possível estabelecer limites de lucro no MetaTrader 4. Exatamente nos limites da moeda, não em pips. Em caso afirmativo, como
 
   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);
   }

Ajude-me a lidar com a lógica, eu não posso de alguma forma traduzir a lógica simples para o programa (você pode recomendar alguma literatura)

O desafio: Calcular o RSI máximo (mínimo) em valores acima de 70 (abaixo de 30) e desenhar uma seta para baixo (para cima) acima da barra

a estes valores.

Implementação (a primeira parte, a segunda parte é semelhante):

1. calcular o valor do RSI para cada barra

2. Enquanto o RSI é maior que 70, preencha o buffer RSI com seus valores

3. Encontrar a posição do valor máximo na matriz

4. Procure a barra com o valor RSI igual ao valor RSI máximo na matriz.

5. Desenhe uma seta acima desta barra.

Bem, há algo assim, mas enquanto escrevo o código, tenho muitas perguntas, erros e estou em uma confusão ((

E aqui está a implementação no código.

 
misturou o texto e o código, desculpe
 

Cavalheiros, favor aconselhar como codificar o seguinte algoritmo usando um laço.

se (iLow (Símbolo (),0,1) > iLow (Símbolo (),0,10))// se o MÍNIMO da primeira vela > MÍNIMO da décima vela

OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point, "jfh",123 ); // abra o pedido.

TENHO DE

Se Baixa 1 e simultaneamente Baixa 2 e simultaneamente Baixa 3...... . ...e ao mesmo tempo Vela 9 baixa> Vela 10 baixa (ou seja, vela baixa de 1 a 9)

/ / ordem aberta.

Obrigado.

 
solnce600:

Cavalheiros, favor aconselhar como codificar o seguinte algoritmo usando um laço.

se (iLow (Símbolo (),0,1) > iLow (Símbolo (),0,10))// se o MÍNIMO da primeira vela > MÍNIMO da décima vela

OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point, "jfh",123 ); // abra o pedido.

TENHO DE

Se Baixa 1 e simultaneamente Baixa 2 e simultaneamente Baixa 3...... . ...e ao mesmo tempo Vela 9 baixa> Vela 10 baixa (ou seja, vela baixa de 1 a 9)

/ / ordem aberta.

Obrigado.


Criamos uma bandeira de sucesso de condição, a colocamos em tru, passamos o número necessário de velas no laço, se em alguma delas a condição não for atendida, colocamos a bandeira na bandeira falsa e saímos do laço.
 
FAQ:

Criar uma bandeira de sucesso da condição, colocá-la no tubo, passar o número necessário de velas no laço, se em alguma delas a condição não for atendida, colocar a bandeira na bandeira falsa e sair do laço.

Muito obrigado. Desculpe, pelo amor de Deus.... Ainda estou um pouco lento em compreender o que você escreveu.

Eu ficaria muito grato se você pudesse escrever code..... e então eu entenderia tudo.

 

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{

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

}

Muito obrigado. Graças a você .... e pessoas como você...eu fiz mais alguns progressos no aprendizado da sabedoria da programação....
 

pessoas, como fechar uma ordem pendente em n, número de pips se ela não tiver acionado?

Razão: