wemersonrv

Contagem de velas em um lado, após cruzamento

Feb 27th, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.35 KB | None | 0 0
  1. /**
  2.  *  A idéia é contar quantas velas de trás pra frente ( da atual até o ponto que houve o cruzamento )
  3.  *  primeiro    - Descobriremos o lado que iremos trabalhar ( acima ou abaixo )
  4.  *  segundo     - Faremos um loop (quase) infinito usando while ( true ) e armazenando a contagem num contador
  5.  *              - Em cada iteração do loop, iremos incrementar o contador apenas se toda a vela estiver do lado analisado
  6.  *              - O loop só será interrompido quando uma vela tiver parte de seu corpo ( ou toda ) atravessado para o outro lado
  7.  *  terceiro    - Após interromper o loop analisaremos se estamos a 20 velas após o cruzamento
  8.  * ------------------------------------------------------------------------------------------------------------------------------
  9.  *  
  10.  * Como a cada nova vela os índices são atualizados, se tiver um cruzamento agora, a cada nova vela reiniciaremos tudo
  11.  * e ao chegar na vigésima, a contagem da mais recente para a mais antiga, irá ser interrompida no cruzamento
  12.  * e o contador estará em 20... e nesse caso estará pronto para ser feito o trade
  13.  *
  14.  */
  15. input int NumVelas=20;  // Limite de velas de um lado para entrar
  16. enum ENUM_SIDE { SIDE_NONE, SIDE_UP, SIDE_DOWN };
  17.  
  18. void Trade(){
  19.  
  20.     // Descarta ações se não for uma nova vela
  21.     if( !IsNewCandle() ){ return ;}
  22.  
  23.     ENUM_SIDE trade_side = SIDE_NONE;
  24.  
  25.     // Contador para armazenar quantas velas estão de um lado ou de outro,
  26.     // iniciando na vela anterior ( shift = 1 );
  27.     int i = 1;
  28.    
  29.     // Verifica se a vela anterior está acima ou abaixo
  30.     double MA21 = iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE, i); // shift = i (1)
  31.     double MA50 = iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE, i);
  32.  
  33.     // Checa acima
  34.     if( Close[1] > MA21 && Close[1] > MA50 )
  35.         trade_side = SIDE_UP;
  36.  
  37.     // Checa abaixo
  38.     if( Close[1] < MA21 && Close[1] < MA50)
  39.         trade_side = SIDE_DOWN;
  40.  
  41.     // Só continua se estiver acima ou abaixo...
  42.     // se estiver em cima da média quer dizer que está cruzando e não tem sentido continuar
  43.     if( trade_side == SIDE_NONE ){ return ; }  
  44.  
  45.     while( true ){ // Rodará o loop vela a vela, até achar um cruzamento
  46.         // Faz a checagem das médias
  47.         MA21 =iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE, i); // shift = i (1, 2, 3...20, etc )
  48.         MA50 = iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE, i); // shift = i (1, 2, 3...20, etc )
  49.  
  50.         // Se o lado a analisar está acima
  51.         // verifica se a vela está totalmente acima das médias
  52.         if( trade_size == SIDE_UP && High[i] > MA21 && Low[i] > MA50 )
  53.             i++;
  54.         else
  55.             break;
  56.             // Chegamos ponto em que houve o cruzamento para o lado
  57.             // que estamos analizando ( de baixo pra cima )
  58.  
  59.         // Se o lado a analisar está abaixo
  60.         // verifica se a vela está totalmente abaixo das médias
  61.         if( trade_size == SIDE_DOWN && High[i] < MA21 && Low[i] < MA50 )
  62.             i++;
  63.         else
  64.             break;
  65.             // Chegamos ponto em que houve o cruzamento para o lado
  66.             // que estamos analizando ( de cima pra baixo )
  67.     }
  68.  
  69.     // Nesse ponto, temos um contador "i" armazenado
  70.     // com o número de velas que está acima ou abaixo do último cruzamento
  71.     if( i==NumVelas && trade_side == SIDE_UP ){
  72.         // Está na vigésima vela acima... faça sua mágica
  73.     }
  74.  
  75.     if( i==NumVelas && trade_side == SIDE_DOWN ){
  76.         // Está na vigésima vela abaixo... faça sua mágica
  77.     }
  78.  
  79. }
  80.  
  81. void IsNewCandle(){
  82.    static datetime time0; bool newcandle = time0 != Time[0]; time0 = Time[0];
  83.    return newcandle;
  84. }
Add Comment
Please, Sign In to add comment