[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 167

 
Fazer uma variável booleana global ou estática como uma bandeira. Quando a condição tiver ocorrido e a bandeira=verdadeira abrir a ordem e fazer a bandeira=falsa. Agora, se o pedido fechar, um novo pedido não será aberto. Quando a condição tiver desaparecido, colocar novamente a bandeira = Verdadeiro.
 
Roger:
Fazer uma variável booleana global ou estática do tipo bandeira. Quando a condição for atingida e a bandeira=verdadeiro, abrir um pedido e fazer bandeira=falso. Agora, se a ordem for fechada, uma nova ordem não será aberta. Quando a condição tiver desaparecido, colocar novamente a bandeira = Verdadeiro.

Como posso saber se uma ordem foi aberta mas fechada por causa da condição N? Porque há muitas condições, e a presença da condição N não garante que a ordem tenha sido fechada.

Ou seja, preciso saber que a ordem foi executada, mas fechou n velas há pouco porque a condição N desencadeou. E se a condição N desapareceu, e não mais do que n velas passaram desde o fechamento da ordem, devemos abrir a ordem novamente.

 
Xaoss1990:

Como posso saber se uma ordem foi aberta mas fechada por causa da condição N? Porque há muitas condições, e a presença da condição N não garante que a ordem tenha sido concluída.

Ou seja, preciso saber que a ordem foi concluída, mas foi fechada há n velas por causa da condição N. E se a condição N desapareceu e não mais do que n velas passaram desde o fechamento da ordem, devemos abrir a ordem novamente.


Seja mais ativo usando Alert(), Print() com Logic!
 
Xaoss1990:

Por favor, nos aconselhem, senhores!

Imagine a situação: uma parada é acionada, devido ao acionamento da N-ésima condição. Mas após um par de castiçais, a condição N-ésima caiu. Com a ajuda de qual função você pode abrir o negócio novamente depois que a N-ésima condição cair. Ou seja, você precisa determinar que isso desencadeou uma parada há algum número de barras atrás, e porque a N-ésima condição caiu, reabrir o comércio!


se programmaticamente - ao abrir um pedido - houver um magik e um comentário - você pode criptografar as informações sobre qual condição o pedido é aberto, no magik ou no comentário

em geral, a parada não é acionada por uma condição, mas quando o preço atinge um nível de preço - esta ordem pode ser fechada por uma condição

 
Xaoss1990:

Como posso saber se uma ordem foi aberta mas fechada por causa da condição N? Porque há muitas condições, e a presença da condição N não garante que o pedido seja fechado.

Ou seja, preciso saber que a ordem foi executada, mas fechou há n velas devido ao acionamento da condição N. E se a condição N desapareceu e não mais que n velas passaram desde que a ordem foi fechada, preciso abrir a ordem novamente.

Você não quer complicar muito as coisas? Afinal, a ordem poderia ter sido fechada se a condição X tivesse estado presente, embora a condição N também pudesse ter estado presente.

A solução depende muito de sua lógica de gerenciamento de posição, por exemplo, para encontrar pedidos que foram fechados o mais tardar em n castiçais e para verificar o evento N no momento em que o pedido é fechado, bem como para o momento atual.

 
 int CountH,NewCountH,CountL,NewCountL;
 double ResistH,ResistL;
 
 //========================
 
 int start(){

 //--------------------------
   double bid = Bid;
   double UPPprice = bid+3000.0*Point;
   double LOWprice = bid-3000.0*Point;
   NewCountH=0;
   ResistH=0;
   NewCountL=0;
   ResistL=0;
  
   while(LOWprice<UPPprice)
    {
      CountH=0;
      CountL=0;
      for(int i=1; i<=6000; i++){  
          if(LOWprice> bid)if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i))CountH++;  
          if(LOWprice<=bid)if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i))CountL++;
       } 
      if(CountH>NewCountH){NewCountH=CountH;ResistH=LOWprice;} 
      if(CountL>NewCountL){NewCountL=CountL;ResistL=LOWprice;}   
      LOWprice=LOWprice+5*Point;
    }
 //----------------------------
 
 return(0);
 }
Como faço para tornar este ciclo "mais fácil"? Demora muito tempo para contar.
 
DhP:

Como faço para tornar este ciclo "mais fácil"? Demora muito tempo para contar.


talvez algo que eu não entendo, mas aqui:

          if(LOWprice> bid)if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i)) CountH++;  
          if(LOWprice<=bid)if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i)) CountL++;
a mesma condição
 
abolk:


talvez eu não tenha entendido bem, mas aqui:

a mesma condição - em todos os momentos, CountH é igual a CountL

Não, se o preço for mais alto que o Bid, então CountH conta, se for mais baixo, então CountL conta
 
DhP:
Não, se o preço for mais alto que o Bid, então CountH? Se for mais baixo, então CountL


é possível acelerar o cálculo:

reduzir i<=6000

 
abolk:


É possível acelerar o cálculo:

a) Reduzir i<=6000
b) Calcular somente no início da barra

a) Reduzir o número de i pode ser feito, mas não é desejável. É assim que são necessárias barras para o ano.

b) No início de um bar... Esta é provavelmente uma opção. Funciona em M15.

No entanto, em qualquer caso, conta quase 2 segundos.