Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * A idéia é contar quantas velas de trás pra frente ( da atual até o ponto que houve o cruzamento )
- * primeiro - Descobriremos o lado que iremos trabalhar ( acima ou abaixo )
- * segundo - Faremos um loop (quase) infinito usando while ( true ) e armazenando a contagem num contador
- * - Em cada iteração do loop, iremos incrementar o contador apenas se toda a vela estiver do lado analisado
- * - O loop só será interrompido quando uma vela tiver parte de seu corpo ( ou toda ) atravessado para o outro lado
- * terceiro - Após interromper o loop analisaremos se estamos a 20 velas após o cruzamento
- * ------------------------------------------------------------------------------------------------------------------------------
- *
- * Como a cada nova vela os índices são atualizados, se tiver um cruzamento agora, a cada nova vela reiniciaremos tudo
- * e ao chegar na vigésima, a contagem da mais recente para a mais antiga, irá ser interrompida no cruzamento
- * e o contador estará em 20... e nesse caso estará pronto para ser feito o trade
- *
- */
- input int NumVelas=20; // Limite de velas de um lado para entrar
- enum ENUM_SIDE { SIDE_NONE, SIDE_UP, SIDE_DOWN };
- void Trade(){
- // Descarta ações se não for uma nova vela
- if( !IsNewCandle() ){ return ;}
- ENUM_SIDE trade_side = SIDE_NONE;
- // Contador para armazenar quantas velas estão de um lado ou de outro,
- // iniciando na vela anterior ( shift = 1 );
- int i = 1;
- // Verifica se a vela anterior está acima ou abaixo
- double MA21 = iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE, i); // shift = i (1)
- double MA50 = iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE, i);
- // Checa acima
- if( Close[1] > MA21 && Close[1] > MA50 )
- trade_side = SIDE_UP;
- // Checa abaixo
- if( Close[1] < MA21 && Close[1] < MA50)
- trade_side = SIDE_DOWN;
- // Só continua se estiver acima ou abaixo...
- // se estiver em cima da média quer dizer que está cruzando e não tem sentido continuar
- if( trade_side == SIDE_NONE ){ return ; }
- while( true ){ // Rodará o loop vela a vela, até achar um cruzamento
- // Faz a checagem das médias
- MA21 =iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE, i); // shift = i (1, 2, 3...20, etc )
- MA50 = iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE, i); // shift = i (1, 2, 3...20, etc )
- // Se o lado a analisar está acima
- // verifica se a vela está totalmente acima das médias
- if( trade_size == SIDE_UP && High[i] > MA21 && Low[i] > MA50 )
- i++;
- else
- break;
- // Chegamos ponto em que houve o cruzamento para o lado
- // que estamos analizando ( de baixo pra cima )
- // Se o lado a analisar está abaixo
- // verifica se a vela está totalmente abaixo das médias
- if( trade_size == SIDE_DOWN && High[i] < MA21 && Low[i] < MA50 )
- i++;
- else
- break;
- // Chegamos ponto em que houve o cruzamento para o lado
- // que estamos analizando ( de cima pra baixo )
- }
- // Nesse ponto, temos um contador "i" armazenado
- // com o número de velas que está acima ou abaixo do último cruzamento
- if( i==NumVelas && trade_side == SIDE_UP ){
- // Está na vigésima vela acima... faça sua mágica
- }
- if( i==NumVelas && trade_side == SIDE_DOWN ){
- // Está na vigésima vela abaixo... faça sua mágica
- }
- }
- void IsNewCandle(){
- static datetime time0; bool newcandle = time0 != Time[0]; time0 = Time[0];
- return newcandle;
- }
Add Comment
Please, Sign In to add comment