Como impedir que seja feita operações no mesmo Candle de entrada /TP /STP? - página 2

Para adicionar comentários, por favor Faça o login ou registrar
Danrlei Hornke
188
Danrlei Hornke  
//---Variaveis Globais
bool Operamos_Nesta_Vela=false;
string TIME_Abertura_Ultimo_Candle;
string Hora_Ultimo_Negocio;
void OnTick()
  {
//+------------------------------------------------------------------+
//|Checagem se ja abrimos uma ordem no caldle atual                  |
//+------------------------------------------------------------------+   
    TIME_Abertura_Ultimo_Candle=TimeToString((SeriesInfoInteger(Symbol_Operar,PERIODO_PARA_OPERACOES,SERIES_LASTBAR_DATE)),TIME_SECONDS);
   
      //---se tempo de abertura da ultima ordem  for MENOR que o tempo de abertura da ultima barra 
       if(Hora_Ultimo_Negocio < TIME_Abertura_Ultimo_Candle)
         {
         //---resetamos a variavel
         Operamos_Nesta_Vela=false;
         }
         //---se tempo de abertura da ultima ordem NAO for MENOR que o tempo de abertura da ultima barra 
        if(Hora_Ultimo_Negocio > TIME_Abertura_Ultimo_Candle)
         {
         //---entao ele continua sendo true e impedindo outra abertura de ordem na barra atual
         Operamos_Nesta_Vela=true;
         }
   if(Setup_De_ Compra && Operamos_Nesta_Vela==false )
    {
    // ENVIAMOS A COMPRA AQUI >>>
   
   //---ARMAZENAMOS O TEMPO DE abertura da ordem na variavel
     Hora_Ultimo_Negocio=TimeToString(TimeCurrent(),TIME_SECONDS);
    
     //---Definimos nesta variavel que ja executamos uma ordem nesta vela
     Operamos_Nesta_Vela=true; 
    }
    
  if(Setup_De_ Venda && Operamos_Nesta_Vela==false )
    {
    // ENVIAMOS A VENDA AQUI >>>
   
   //---ARMAZENAMOS O TEMPO DE abertura da ordem na variavel
     Hora_Ultimo_Negocio=TimeToString(TimeCurrent(),TIME_SECONDS);
    
     //---Definimos nesta variavel que ja executamos uma ordem nesta vela
     Operamos_Nesta_Vela=true; 
    }
  }

Esse codigo resolve o problema

Ruy Christian Hoffmann
225
Ruy Christian Hoffmann  

Eita que emoção! primeira vez que vou ajudar em algo mesmo que tardio, pois as poucas vezes que postei foi pedindo algo... rsrsrs

Vamos lá André, eu tava com o mesmo problema e fiz uma solução super-simples que não sei se é a mais "bonita", mas que ficou funcional ficou.

Meu GAIN está em 30 pontos, então o que fiz:  Comparei se o tamanho da "esticada" do candle atual é maior que 30. Se for maior que 30 significa que eu já realizei nesse candle então não quero entrar mais no candle atual.

O código ficou assim...


//Aqui pego as últimas 3 barras:

 MqlRates rates[];

   ArraySetAsSeries(rates,true);

   int copied=CopyRates(_Symbol,_Period,0,3,rates);


//Aqui defini as Variáveis:

int vb3hight=0;

int vb3low=0;

int vb3esticada=0;

 

//Aqui faço o cálculo para obter o tamanho do candle:

 vb3hight=rates[0].high;

    vb3low=rates[0].low;

    vb3esticada=vb3hight-vb3low;

 

Aqui é meu IF que diz se devo entrar ou não numa nova COMPRA... respectivamente fiz o mesmo para VENDA...

//SINAL DE COMPRA

    if(vb3esticada<=30)

      return 1;

else

    return 0;


e claro... por fim executo a compra ou venda apenas se "return  == 1;


Mesmo um pouco atrasado, espero que no meu humilde e pequeno conhecimento eu tenha ajudado em algo :) :) :)

12
Para adicionar comentários, por favor Faça o login ou registrar