codigo mql5

 //+------------------------------------------------------------------+

//|                                           Keltner_scalper_v1.mq5 |

//|                                  Copyright 2022, MetaQuotes Ltd. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

//23/07/2022

#property copyright "Copyright 2022, MetaQuotes Ltd."

#property link      "https://www.instagram.com/programador_trader_oficial/"

#property version   "1.00"

#property icon "logo_keltner_scalper.ico"

#resource  "_painel.bmp"

#resource "keltner_v1.ex5"

#resource "sem_conexao.wav"

#resource "reconectado.wav"

#include <Controls\Defines.mqh>

#include <Controls\Button.mqh>

#define CONTROLS_DIALOG_COLOR_CAPTION_TEXT clrWhite

#define CONTROLS_DIALOG_COLOR_BG C'50,50,52'

#define CONTROLS_DIALOG_COLOR_BORDER_LIGHT C'50,50,52'

#define CONTROLS_DIALOG_COLOR_BG  C'50,50,52'

#define CONTROLS_DIALOG_COLOR_CLIENT_BG  C'20,12,52'

#define CONTROLS_FONT_SIZE 8

//+------------------------------------------------------------------+

//| Includes do Painel                                                        |

//+------------------------------------------------------------------+

#include <Controls\Dialog.mqh>

#include <Controls\Label.mqh>

#include <Controls\Panel.mqh>

#include <Controls\Picture.mqh>

//+------------------------------------------------------------------+

//| Parametros Painel                                               |

//+------------------------------------------------------------------+

int      painelXX     =  20;

int      painelYY     =  20;


int       LarguraPainel  =  282; // Ajustar largura do painel

int      AlturaPainel =  605; //Ajustar altura do painel]

//--- Painel itself

CAppDialog* m_panel;

//+------------------------------------------------------------------+

//| Timer Interval                                                   |

//+------------------------------------------------------------------+


input int update_interval = 1; // Intervalo de atualização em segundos

//+------------------------------------------------------------------+

//|    Linha                                                       |

//+------------------------------------------------------------------+

CPicture logo;

CPanel painel_cor;

//+------------------------------------------------------------------+

//|    1ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha1color;

CLabel m_Linha1label;

//+------------------------------------------------------------------+

//|    2ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha2color;

CLabel m_Linha2label;

//+------------------------------------------------------------------+

//|    3ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha3color;

CLabel m_Linha3label;

//+------------------------------------------------------------------+

//|    4ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha4color;

CLabel m_Linha4label;

//+------------------------------------------------------------------+

//|    5ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha5color;

CLabel m_Linha5label;

//+------------------------------------------------------------------+

//|    6ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha6color;

CLabel m_Linha6label;

//+------------------------------------------------------------------+

//|    7ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha7color;

CLabel m_Linha7label;

//+------------------------------------------------------------------+

//|    8ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha8color;

CLabel m_Linha8label;

//+------------------------------------------------------------------+

//|    9ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha9color;

CLabel m_Linha9label;

//+------------------------------------------------------------------+

//|    10ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha10color;

CLabel m_Linha10label;

//+------------------------------------------------------------------+

//|    11ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha11color;

CLabel m_Linha11label;

//+------------------------------------------------------------------+

//|    12ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha12color;

CLabel m_Linha12label;

//+------------------------------------------------------------------+

//|    13ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha13color;

CLabel m_Linha13label;

//+------------------------------------------------------------------+

//|    14ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha14color;

CLabel m_Linha14label;

//+------------------------------------------------------------------+

//|    15ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha15color;

CLabel m_Linha15label;

//+------------------------------------------------------------------+

//|    16ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha16color;

CLabel m_Linha16label;

//+------------------------------------------------------------------+

//|    17ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha17color;

CLabel m_Linha17label;

//+------------------------------------------------------------------+

//|    18ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha18color;

CLabel m_Linha18label;

//+------------------------------------------------------------------+

//|    19ª Linha                                                       |

//+------------------------------------------------------------------+

CPanel m_Linha19color;

CLabel m_Linha19label;

//+------------------------------------------------------------------+

//|    1ª Butao                                                       |

//+------------------------------------------------------------------+

CPanel m_Botao_1color;

CButton m_Botao_1;

//Importando bibliotecas

#include <Trade/Trade.mqh>

CTrade trade;

input group "Painel"

input bool    var_mostrar_painel = true;//Mostrar painel

input int fonte_texto = 10;//Fonte

//__________________________________________________________________________________

input group "Meta financeira"

input bool ativar_meta = true;                   // Ativar meta financeira

input double perda_maxima = 100;                 // Perda máxima diária

input double ganho_maximo = 200;                 // Ganho máximo diário

//__________________________________________________________________________________

input group "Configurações de Horário"

input bool var_ativar_controle_horario = true;      // Controle de Horário

input string hora_inicio = "09:00";              // Horário inicial

input string hora_final  = "16:00";              // Horário final

input bool  var_ativar_fechamento_no_horario = true; //Fechamento das posições no Horário

input string  HorarioFechamento = "16:50"; // Horário de fechamento das posições

//__________________________________________________________________________________

input group "Trailling stop financeiro"

input bool ativar_Trailling_stop_financeiro = true;      // Ativar/Desativar Trailling Stop financeiro

input double gatilho_finaceiro = 180;//Gatilho financeiro

input double proteger_financeiro = 150;//Proteger Lucro

input double passos_financeiro = 5;//Passos

//__________________________________________________________________________________

input group "Martingale"

input bool ativar_martingale = false;// Ativar/Desativar martingale

enum Tipo_martingale

  {

   historico, // Histórico

   tempo_real, // Tempo Real

  };

input int Volume_maximo_gale = 5;// Volume maximo martingale

input double multiplicar_martingale = 2;// Multiplicador martingale

input Tipo_martingale Modo_martingale       = tempo_real; // Modo do Martingale

input double orden_1 = 100;//1ª Ordem

input double lote_1 = 2;//1º Lote

input double orden_2 = 200;//2ª Ordem

input double lote_2 = 4;//2º Lote

input double orden_3 = 300;//3ª Ordem

input double lote_3 = 8;//3º Lote

input double orden_4 = 400;//4ª Ordem

input double lote_4 = 16;//4º Lote

input double orden_5 = 500;//5ª Ordem

input double lote_5 = 32;//5º Lote

input double orden_6 = 500;//6ª Ordem

input double lote_6 = 32;//6º Lote

input double orden_7 = 500;//7ª Ordem

input double lote_7 = 32;//7º Lote

input double orden_8 = 500;//8ª Ordem

input double lote_8 = 32;//8º Lote

input double orden_9 = 500;//9ª Ordem

input double lote_9 = 32;//9º Lote

input double orden_10 = 500;//10ª Ordem

input double lote_10 = 32;//10º Lote

input double orden_11 = 500;//11ª Ordem

input double lote_11 = 32;//11º Lote

input double orden_12 = 500;//12ª Ordem

input double lote_12 = 32;//12º Lote

input double orden_13 = 500;//13ª Ordem

input double lote_13 = 32;//13º Lote

input double orden_14 = 500;//14ª Ordem

input double lote_14 = 32;//14º Lote

input double orden_15 = 500;//15ª Ordem

input double lote_15 = 32;//15º Lote

input double orden_16 = 500;//16ª Ordem

input double lote_16 = 32;//16º Lote

input double orden_17 = 500;//17ª Ordem

input double lote_17 = 32;//17º Lote

input double orden_18 = 500;//18ª Ordem

input double lote_18 = 32;//18º Lote

input double orden_19 = 500;//19ª Ordem

input double lote_19 = 32;//19º Lote

input double orden_20 = 500;//20ª Ordem

input double lote_20 = 32;//20º Lote


//__________________________________________________________________________________

input group "Fechar a X distância do preço médio"

input bool    var_ativar_fechamento_preco_médio      = false;             // Ativar/Desativar fechamento

input int    distancia_preco_medio      = 1000;       // Fechar posições quando distânciar

input bool    filtro_volume      = false;             // Ativar/Desativar filtro volume

input double    volume_filtro     = 20;             // Filtro volume


input group "Trailling Stop"

input bool ativar_trail_stop = true;//Trailling

input double gatilhoTS = 165; // Gatilho Trailling

input double stepTS = 55;// Passos Trailling

input double var_incrementar_pontos = 110;//Frequência passos

//__________________________________________________________________________________

input group "Breakeven"

input bool     var_ativar_breakeven = true;     // Breakeven

input double   gatilhoBE = 110;              //Gatilho BreakEven

input double   proteger = -55;                // Passo unico

bool beAtivo;

//__________________________________________________________________________________

input group "Esperar X velas para entrar depois da entrada"

input bool var_ativar_espera_x_barras = false;           // Esperar X barras para a próxima entrada

input int esperar_x_barras = 30;                         // Esperar X barras para a próxima entrada

//__________________________________________________________________________________

input group "Configurações modo conservador"

input bool var_nao_entrar_apos_loss = false;             // Não entrar após perda

input bool var_nao_entrar_apos_win = false;              // Não entrar após lucro

//__________________________________________________________________________________

input group "Configurações de ordens"

enum config

  {

   var_usar_stop_e_take,                                 // Usar StopLoss e TakeProfit

   var_usar_tp,                                          // Usar somente TakeProfit

   var_usar_stop,                                        // Usar somente StopLoss

   var_nao_usar_stop_e_take,                             // Não usar  StopLoss e TakeProfit

  };

input config var_usar_stops       = var_usar_stop_e_take; // Configurações de stop e take

input double var_lote_inicial = 10;                      //Lote

double var_lote = var_lote_inicial;

input double var_sl = 160;                      //Stop Loss

input double var_tp = 2500;                      //Take Profit

input string var_comentario_Ea = "EA Keltner Scalper V2";

//__________________________________________________________________________________

input group "Parâmetros Gerais"

input int var_numero_magico = 0;                //Número Mágico do bot

input int SlippageMaximo  = 0; // Slippage (Derrapagem) máximo


//__________________________________________________________________________________

input group "Parâmetros Keltner"

input int    var_MAPeriod      = 20;             // Periodo Media Móvel

input ENUM_MA_METHOD    var_MAMethod      = MODE_SMA;       // Tipo da Média Móvel

input int    var_AtrPeriod     = 14;             // Range Period

input double var_AtrMultiplier = 1.3;            // Range Multiplier

//__________________________________________________________________________________

input group "Tipo de trabalho do bot"

enum Tipo_de_trabalho

  {

   var_estrategia_1,                             // Fechou dentro fechou fora

   var_estrategia_2,                             // Fechou fora fechou dentro

   var_estrategia_3,                             // Tocou na banda

  };

input Tipo_de_trabalho var_estrategia       = var_estrategia_1; // Tipo de trabalho Ea

//__________________________________________________________________________________

enum direcoes

  {

   var_modo_compra_e_venda,                      // COMPRA/VENDA

   var_modo_compra,                             // COMPRA

   var_modo_venda,                              // VENDA

  };

input direcoes var_modo_entrada       = var_modo_compra_e_venda; // Modo de entrada do robô

//__________________________________________________________________________________

enum modo

  {

   modo_1,// Comprar no fundo e vender no topo

   modo_2,// Comprar no topo e vender no fundo


  };

input modo var_modo_de_trabalho = modo_2; // Direção

//__________________________________________________________________________________

//handles

int var_handle_keltner;

//__________________________________________________________________________________

//Buffers

double var_linha_superior[];

double var_linha_inferior[];

double var_linha_central[];


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

long  numero_da_conta_atual = AccountInfoInteger(ACCOUNT_LOGIN);

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

string resultado[];               // Um array para obter strings


double rsiArray[];

int RSIDefinition;

//__________________________________________________________________________________

input group "Modo do filtro"

input bool ativar_filtro_rsi = false;                      //Ativar Filtro rsi

input int rsiPeriod = 14; // Periodo RSI

input double nivel_superior_rsi = 80; // Nivel superior

input double nivel_inferior_rsi = 30; //Nivel inferior

input ENUM_APPLIED_PRICE   applied_price = PRICE_CLOSE;  // Tipo de preço

input ENUM_TIMEFRAMES baseTimeframe = PERIOD_CURRENT; //RSI tempo grafico

enum filtro

  {

   nivel_1,                      // Nivel 1 do filtro

   nivel_2,                             // Nivel 2 do filtro

   nivel_3,                              // Nivel 3 do filtro

  };

input filtro var_modo_filtro       = nivel_1; // Modo do filtro

//__________________________________________________________________________________

input group "Fechar na média"

input bool ativar_sainda_na_media = false;                      //Ativar Fechamento na média

//__________________________________________________________________________________

input group "Dados do ativo"

input string ativo_operar = "WINZ24"; // Define qual ativo na B3 receberá as ordens

input string ativo_renko = "WINZ24_12R"; // Define o gráfico Renko para análise




//+------------------------------------------------------------------+

//| Convert time string to minutes                                    |

//+------------------------------------------------------------------+

int ConvertTimeStringToMinutes(string time_str)

  {

   int hour = StringToInteger(StringSubstr(time_str, 0, 2));

   int minute = StringToInteger(StringSubstr(time_str, 3, 2));

   return hour * 60 + minute;

  }


//+------------------------------------------------------------------+

//| Check if current time is within specified range                  |

//+------------------------------------------------------------------+

bool ConferirHorario()

  {

// Obtém a hora atual

   datetime agora = TimeCurrent();

   MqlDateTime dt;

   TimeToStruct(agora, dt);


   int minutos_atual = dt.min;

   int hora_atual = dt.hour;


// Converte os horários de string para minutos

   int hora_inicio_minutos = ConvertTimeStringToMinutes(hora_inicio);

   int hora_final_minutos = ConvertTimeStringToMinutes(hora_final);

   int hora_atual_minutos = hora_atual * 60 + minutos_atual;


   if((hora_atual_minutos >= hora_inicio_minutos && hora_atual_minutos <= hora_final_minutos && hora_final_minutos > hora_inicio_minutos)

      || ((hora_atual_minutos >= hora_inicio_minutos || hora_atual_minutos <= hora_final_minutos) && hora_final_minutos < hora_inicio_minutos))

     {

      return true; // Dentro do intervalo

     }


   return false; // Fora do intervalo

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int OnInit()

  {

   string ativo = ativo_operar; // Nome do ativo que receberá as ordens

   int underscore_position = StringFind(ativo, "_");

   if(underscore_position > 0)

     {

      ativo = StringSubstr(ativo, 0, underscore_position);

     }

   if(ativo == "")

     {

      ativo = ativo_operar;

     }

   Print("Ativo a ser operado: ", ativo);


// Verifica se o gráfico atual é o Renko

   if(Symbol() == ativo_renko)

     {

      AnalyzeRenkoChart();

     }

   else

     {

      Print("O gráfico atual não é o esperado para análise Renko. O robô não fará nada.");

     }


   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void AnalyzeRenkoChart()

  {

// Lógica de análise no gráfico Renko WINZ24_12R

   double RSIDefinition = iRSI(ativo_operar, baseTimeframe, rsiPeriod, applied_price);

   double Price = 70.00;

   ObjectCreate(1, "My Line", OBJ_HLINE, 0, 0, Price);


// Adicionando painel ao gráfico (se necessário)

   if(var_mostrar_painel == true)

     {

      Criar_painel();

      linhas_painel();

      // Conta

      if(IsHedgingAllowed() == true)

        {

         ObjectSetString(0, "conta", OBJPROP_TEXT, "Hedge");

        }

      else

        {

         ObjectSetString(0, "conta", OBJPROP_TEXT, "Netting");

        }

     }

   else

     {

      // Apagar Painel se não for necessário

      ObjectsDeleteAll(0, -1, -1);

     }


// Define nome do indicador

   IndicatorSetString(INDICATOR_SHORTNAME, "Painel_kentner_v1");


// Define número mágico do bot

   trade.SetExpertMagicNumber(var_numero_magico);


// Obtem dados do indicador e adiciona indicador Keltner ao gráfico

   var_handle_keltner = iCustom(ativo_renko, PERIOD_CURRENT, "::keltner_v1.ex5", var_MAPeriod, var_MAMethod, var_AtrPeriod, var_AtrMultiplier, 0, 0);

   ChartIndicatorAdd(0, 0, var_handle_keltner);


// Criar timer

   EventSetTimer(1);


   Print("Analisando gráfico Renko.");

  }


//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

   ObjectsDeleteAll(0, -1, -1);

   long total_windows;

   if(ChartGetInteger(0, CHART_WINDOWS_TOTAL, 0, total_windows))

      for(int i = 0; i < total_windows; i++)

        {

         long total_indicators = ChartIndicatorsTotal(0, i);

         for(int j = 0; j < total_indicators; j++)

           {

            ChartIndicatorDelete(0, i, ChartIndicatorName(0, i, 0));

           }

        }

   ChartRedraw(0);

//+------------------------------------------------------------------+

//|    Apagar Painel                             |

//+------------------------------------------------------------------+

   m_panel.Destroy(reason);

   if(CheckPointer(m_panel) == POINTER_DYNAMIC)

      delete m_panel;

//ObjectsDeleteAll(0,-1,-1);

//--- destruímos o temporizador no final do trabalho

   EventKillTimer();

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

//definir variaveis

double var_Takeprofit = 0.0;

double var_StopLoss = 0.0;

//definir variaveis de contoles

datetime var_tempo_vela_entrada;

bool var_precisa_esperar_x_barras = false;

datetime var_limitar;

int var_contar_velas = 0;

string  var_controle = "";

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void OnTick()


  {

   if(ativar_sainda_na_media == true)

     {

      saida_na_media_central();

     }

   CopyBuffer(RSIDefinition, 0, 0, 3, rsiArray);

   ArraySetAsSeries(rsiArray, true);

// Comment(rsiArray[0]);

   adicionar_take();

//+------------------------------------------------------------------+

   if(ativar_Trailling_stop_financeiro == true)

     {

      Tralling_stop_finaceiro();

     }

   if(parar_agora == true)

     {

      FecharTodasCompras();

      FecharTodasVendas();

     }

//+------------------------------------------------------------------+

//|    DATA QUE O ATIVO IRÁ EXPIRAR                                  |

//+------------------------------------------------------------------+

//expira

   long data_expiracao_ativ = (SymbolInfoInteger(ativo_operar, SYMBOL_EXPIRATION_TIME));

   string data_expiracao_ativo = TimeToString(data_expiracao_ativ, TIME_DATE);

   ObjectSetString(0, "vencimento", OBJPROP_TEXT, data_expiracao_ativo);

//Setando valores no painel

//if(ConferirHorario() == true)

   if(var_ativar_controle_horario && ConferirHorario())

     {

      ObjectSetString(0, "notificação_1", OBJPROP_TEXT, "Dentro do horário de negociação !");

      ObjectSetInteger(0, "notificação_1", OBJPROP_COLOR, clrLimeGreen);

     }

   else

     {

      ObjectSetString(0, "notificação_1", OBJPROP_TEXT, "Fora do horário de negociação !");

      ObjectSetInteger(0, "notificação_1", OBJPROP_COLOR, clrRed);

     }

//+------------------------------------------------------------------+

//|                   META FINANCEIRA                                |

//+------------------------------------------------------------------+

   if(resultado_do_dia() >= ganho_maximo && ativar_meta == true)

     {

      ObjectSetString(0, "notificação_2", OBJPROP_TEXT, "Meta Batida !");

      ObjectSetInteger(0, "notificação_2", OBJPROP_COLOR, clrLime);

     }

   if(resultado_do_dia() <= perda_maxima - (2 * perda_maxima) && ativar_meta == true)

     {

      ObjectSetString(0, "notificação_2", OBJPROP_TEXT, "Stoploss atingido !");

      ObjectSetInteger(0, "notificação_2", OBJPROP_COLOR, clrRed);

     }

   ulong ticket_2 = 0;

   for(int i = PositionsTotal(); i >= 0; i--)

     {

      ticket_2 = PositionGetTicket(i);

      if(ticket_2 > 0)

        {

         if(PositionGetInteger(POSITION_MAGIC) == var_numero_magico)

           {

            if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)

              {

               //lote compra

               ObjectSetString(0, "lote_compra", OBJPROP_TEXT, string(total_lotes_abertos_buy_e_Sell()));

               ObjectSetString(0, "preco_medio_1", OBJPROP_TEXT, DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN), 0));

               /////////////////////////////

               //Andamento compra

               double pontos_compra = 0;

               if(total_lucro_perca_abertos() != 0)

                 {

                  //verificar se o ativo e mini indece

                  if(StringFind(ativo_operar, "WIN", 0) == 0)

                    {

                     pontos_compra = total_lucro_perca_abertos() / (0.20 * total_lotes_abertos_buy_e_Sell());

                    }

                  //verificar se o ativo e mini dolar

                  if(StringFind(ativo_operar, "WDO", 0) == 0)

                    {

                     pontos_compra = total_lucro_perca_abertos() / (10 * total_lotes_abertos_buy_e_Sell());

                    }

                  // verificar se o ativo é uma ação (exemplo para PETR3)

                  if(StringFind(ativo_operar, "PETR", 0) == 0 || StringFind(ativo_operar, "VALE", 0) == 0)

                    {

                     pontos_compra = total_lucro_perca_abertos() / (total_lotes_abertos_buy_e_Sell() * 1); // ajuste conforme necessário

                    }

                 }

               ObjectSetString(0, "andamento_1", OBJPROP_TEXT, string(total_lucro_perca_abertos()) + AccountInfoString(ACCOUNT_CURRENCY) + " (" + DoubleToString(pontos_compra, 1) + " Pts)");

               if(pontos_compra < 0)

                 {

                  ObjectSetInteger(0, "andamento_1", OBJPROP_COLOR, clrRed);

                 }

               if(pontos_compra > 0)

                 {

                  ObjectSetInteger(0, "andamento_1", OBJPROP_COLOR, clrLime);

                 }

               ////////////////////////////////

              }

            if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)

              {

               ObjectSetString(0, "preco_medio_2", OBJPROP_TEXT, DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN), 0));

               //lote venda

               ObjectSetString(0, "lote_venda", OBJPROP_TEXT, string(total_lotes_abertos_buy_e_Sell()));

               double pontos_venda = 0;

               if(total_lucro_perca_abertos() != 0)

                 {

                  //verificar se o ativo e mini indece

                  if(StringFind(ativo_operar, "WIN", 0) == 0)

                    {

                     pontos_venda = total_lucro_perca_abertos() / (total_lotes_abertos_buy_e_Sell() * 0.20);

                    }

                  //verificar se o ativo e mini dolar

                  if(StringFind(ativo_operar, "WDO", 0) == 0)

                    {

                     pontos_venda = total_lucro_perca_abertos() / (total_lotes_abertos_buy_e_Sell() * 10);

                    }


                  // verificar se o ativo é uma ação (exemplo para PETR3)

                  if(StringFind(ativo_operar, "PETR", 0) == 0 || StringFind(ativo_operar, "VALE", 0) == 0)

                    {

                     pontos_venda = total_lucro_perca_abertos() / (total_lotes_abertos_buy_e_Sell() * 1); // ajuste conforme necessário

                    }

                 }

               ObjectSetString(0, "andamento_2", OBJPROP_TEXT, string(total_lucro_perca_abertos()) + " " + AccountInfoString(ACCOUNT_CURRENCY) + " (" + DoubleToString(pontos_venda, 1) + " Pts)");

               if(pontos_venda < 0)

                 {

                  ObjectSetInteger(0, "andamento_2", OBJPROP_COLOR, clrRed);

                 }

               if(pontos_venda > 0)

                 {

                  ObjectSetInteger(0, "andamento_2", OBJPROP_COLOR, clrLime);

                 }

              }

           }

        }

      else

        {

         //+------------------------------------------------------------------+

         //|      ZERAR O PAINEL                                              |

         //+------------------------------------------------------------------+

         //Limpando painel

         ObjectSetString(0, "andamento_2", OBJPROP_TEXT, "---");

         ObjectSetString(0, "lote_venda", OBJPROP_TEXT, "---");

         ObjectSetString(0, "preco_medio_2", OBJPROP_TEXT, "---");

         ObjectSetInteger(0, "andamento_2", OBJPROP_COLOR, clrLightSkyBlue);

         //Limpando painel

         ObjectSetString(0, "andamento_1", OBJPROP_TEXT, "---");

         ObjectSetString(0, "lote_compra", OBJPROP_TEXT, "---");

         ObjectSetString(0, "preco_medio_1", OBJPROP_TEXT, "---");

         ObjectSetInteger(0, "andamento_1", OBJPROP_COLOR, clrLightSkyBlue);

        }

     }

//resultado dia

   ObjectSetString(0, "dia", OBJPROP_TEXT, DoubleToString(resultado_do_dia(), 2) + " " + AccountInfoString(ACCOUNT_CURRENCY));

   if(resultado_do_dia() < 0)

     {

      ObjectSetInteger(0, "dia", OBJPROP_COLOR, clrRed);

     }

   else

      if(resultado_do_dia() > 0)

        {

         ObjectSetInteger(0, "dia", OBJPROP_COLOR, clrLime);

        }

//resultado semana

   ObjectSetString(0, "semanal", OBJPROP_TEXT, DoubleToString(resultado_semana(), 2) + " " + AccountInfoString(ACCOUNT_CURRENCY));

   if(resultado_semana() < 0)

     {

      ObjectSetInteger(0, "semanal", OBJPROP_COLOR, clrRed);

     }

   else

      if(resultado_semana() > 0)

        {

         ObjectSetInteger(0, "semanal", OBJPROP_COLOR, clrLime);

        }

//resultado mês

   ObjectSetString(0, "mensal", OBJPROP_TEXT, DoubleToString(resultado_mes(), 2) + " " + AccountInfoString(ACCOUNT_CURRENCY));

   if(resultado_mes() < 0)

     {

      ObjectSetInteger(0, "mensal", OBJPROP_COLOR, clrRed);

     }

   else

      if(resultado_mes() > 0)

        {

         ObjectSetInteger(0, "mensal", OBJPROP_COLOR, clrLime);

        }

//resultado total

   ObjectSetString(0, "total", OBJPROP_TEXT, DoubleToString(resultado_total(), 2) + " " + AccountInfoString(ACCOUNT_CURRENCY));

   if(resultado_total() < 0)

     {

      ObjectSetInteger(0, "total", OBJPROP_COLOR, clrRed);

     }

   else

      if(resultado_total() > 0)

        {

         ObjectSetInteger(0, "total", OBJPROP_COLOR, clrLime);

        }

//Remover ordens pendentes

   if(total_posicoes_abertos_buy_e_Sell() == 0)

     {

      remover_ordens_pendentes("compra");

      remover_ordens_pendentes("venda");

     }

//Martingale  modo historico

   if(resultado_ultima_posicao_fechada() == "win")

     {

      var_lote = var_lote_inicial;

     }

   if(ativar_martingale == true && Modo_martingale == historico)

     {

      if(resultado_ultima_posicao_fechada() != "false" && resultado_ultima_posicao_fechada() != "win" && resultado_ultima_posicao_fechada() != var_controle)

        {

         var_controle = resultado_ultima_posicao_fechada();

         var_lote *= multiplicar_martingale;

        }

      if(var_lote > Volume_maximo_gale)

        {

         var_lote = Volume_maximo_gale;

        }

     }

//Fechamemto no preço medio

   if(var_ativar_fechamento_preco_médio == true)

     {

      if((filtro_volume == true && total_lotes_abertos_buy_e_Sell() >= volume_filtro)

         || filtro_volume == false)

        {

         ulong ticket_1 = 0;

         double preco_abertura = 0;

         for(int i = PositionsTotal(); i >= 0; i--)

           {

            ticket_1 = PositionGetTicket(i);

            if(ticket_1 > 0)

              {

               if(PositionGetInteger(POSITION_MAGIC) == var_numero_magico)

                 {

                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)

                    {

                     if(iClose(ativo_operar, PERIOD_CURRENT, 0) >= PositionGetDouble(POSITION_PRICE_OPEN) + distancia_preco_medio * _Point)

                       {

                        FecharTodasCompras();

                       }

                    }

                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)

                    {

                     if(iClose(ativo_operar, PERIOD_CURRENT, 0) <= PositionGetDouble(POSITION_PRICE_OPEN) - distancia_preco_medio * _Point)

                       {

                        FecharTodasVendas();

                       }

                    }

                 }

              }

           }

        }

     }

//__________________________________________________________________________________

//Fechar as posicoes quando chegar no controle financeiro

   if(ativar_meta == true && ((total_lucro_perca_abertos() + resultado_do_dia()) <= (perda_maxima - (perda_maxima * 2)) || (total_lucro_perca_abertos() + resultado_do_dia()) >= ganho_maximo))

     {

      FecharTodasCompras();

      FecharTodasVendas();

     }

//Hora de fechar as posições

   if(TimeToString(TimeCurrent(), TIME_MINUTES) >= HorarioFechamento && var_ativar_fechamento_no_horario == true)

     {

      FecharTodasCompras();

      FecharTodasVendas();

     }

//Usar breakeven

   if(var_ativar_breakeven == true)

     {

      Breakeven();

     }

//Usar traill stop

   if(ativar_trail_stop == true)

     {

      Tralling_stop();

     }

//__________________________________________________________________________________

//Contando a quantidade de velas apos o fechamento da posição

   if(var_ativar_espera_x_barras == true)

     {

      int var_contar_1 = 0;

      ulong ticket_1 = 0;

      for(int i = PositionsTotal(); i >= 0; i--)

        {

         ticket_1 = PositionGetTicket(i);

         if(ticket_1 > 0)

           {

            if(PositionGetInteger(POSITION_MAGIC) == var_numero_magico)

              {

               var_contar_1++;

              }

           }

        }

      if(

         var_precisa_esperar_x_barras == true

         &&  var_contar_1 == 0

         && var_limitar != iTime(ativo_renko, PERIOD_CURRENT, 0)

      )

        {

         var_limitar = iTime(ativo_renko, PERIOD_CURRENT, 0);

         var_contar_velas += 1;

         if(var_contar_velas > 1)

           {

            ObjectCreate(0, string(var_contar_velas), OBJ_TEXT, 0, TimeCurrent(), iOpen(ativo_renko, PERIOD_CURRENT, 0));

            ObjectSetString(0, string(var_contar_velas), OBJPROP_TEXT, string(var_contar_velas - 1));

            //--- definir cor

            ObjectSetInteger(0, string(var_contar_velas), OBJPROP_COLOR, clrRed);

           }

        }

      if(var_contar_velas - 1 > esperar_x_barras)

        {

         //Apagar objetos do contador

         for(int i = 0; i < var_contar_velas + 1; i++)

           {

            ObjectDelete(0, string(i));

           }

         var_contar_velas = 0;

         var_precisa_esperar_x_barras = false;

        }

     }

///  Comment(var_contar_velas);

//__________________________________________________________________________________

   if(

//resultado_ultima_posicao_aberta_no_dia() retorna false caso nao tenha aberto nenhuma posicao ainda !

      resultado_ultima_posicao_aberta_no_dia() == "false"

      ||

//resultado_ultima_posicao_aberta_no_dia() retorna win se a ultima posição saiu no lucro !

      (resultado_ultima_posicao_aberta_no_dia() == "win" && var_nao_entrar_apos_win == false)

      ||

//resultado_ultima_posicao_aberta_no_dia() retorna loss se a ultima posição saiu na perda !

      (resultado_ultima_posicao_aberta_no_dia() == "loss" && var_nao_entrar_apos_loss == false)

   )

     {

      //__________________________________________________________________________________

      //Adicionando valores aos buffers

      //banda superior

      int copy = CopyBuffer(var_handle_keltner, 2, 0, 3, var_linha_superior);

      ArraySetAsSeries(var_linha_superior, true);

      //banda inferior

      copy = CopyBuffer(var_handle_keltner, 3, 0, 3, var_linha_inferior);

      ArraySetAsSeries(var_linha_inferior, true);

      //banda central

      copy = CopyBuffer(var_handle_keltner, 0, 0, 3, var_linha_central);

      ArraySetAsSeries(var_linha_central, true);

      //__________________________________________________________________________________

      //+------------------------------------------------------------------+

      //|          ABRINDO POSIÇÕES DE COMPRAS OU VENDAS                   |

      //+------------------------------------------------------------------+

      // Usando os preços de fechamento diretamente do gráfico Renko

      if(

         // Estratégia 0 Fechou dentro fechou fora

         (var_estrategia == 0 && iClose(ativo_renko, PERIOD_CURRENT, 2) > var_linha_inferior[2] && iClose(ativo_renko, PERIOD_CURRENT, 1) < var_linha_inferior[1])

         ||

         // Estratégia 1 Fechou fora fechou dentro

         (var_estrategia == 1 && iClose(ativo_renko, PERIOD_CURRENT, 2) < var_linha_inferior[2] && iClose(ativo_renko, PERIOD_CURRENT, 1) > var_linha_inferior[1])

         ||

         // Estratégia 2 Tocou na banda

         (var_estrategia == 2 && iClose(ativo_renko, PERIOD_CURRENT, 1) > var_linha_inferior[1] && iClose(ativo_renko, PERIOD_CURRENT, 0) <= var_linha_inferior[0])

      )

        {

         //__________________________________________________________________________________

         //Verificar se já existe uma posição aberta

         int var_contar = 0;

         ulong ticket = 0;

         for(int i = PositionsTotal(); i >= 0; i--)

           {

            ticket = PositionGetTicket(i);

            if(ticket > 0)

              {

               if(PositionGetInteger(POSITION_MAGIC) == var_numero_magico)

                 {

                  var_contar++;

                 }

              }

           }

         //__________________________________________________________________________________

         if(var_contar == 0  && var_modo_de_trabalho == 0 && var_modo_entrada != var_modo_venda)// Comprar no fundo e vender no topo

           {

            //__________________________________________________________________________________

            //Definir se vai usar TakeProfit ou Stoploss para posicoes de compra

            if(var_usar_stops == var_usar_stop_e_take)

              {

               var_Takeprofit = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK)) + var_tp * _Point;

               var_StopLoss = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK)) - var_sl * _Point;

              }

            if(var_usar_stops == var_usar_stop)

              {

               var_Takeprofit = 0.0;

               var_StopLoss = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK)) - var_sl * _Point;

              }

            if(var_usar_stops == var_usar_tp)

              {

               var_Takeprofit = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK)) + var_tp * _Point;

               var_StopLoss = 0.0;

              }

            if(var_usar_stops == var_nao_usar_stop_e_take)

              {

               var_Takeprofit = 0.0;

               var_StopLoss = 0.0;

              }

            //__________________________________________________________________________________

            /////Comment("Compra");

            if(parar_agora == false &&

               //verificar se ja bateu o controle financeiro

               (ativar_meta == false || (total_lucro_perca_abertos() + resultado_do_dia() > (perda_maxima - (perda_maxima * 2))

                                         && total_lucro_perca_abertos() + resultado_do_dia() < ganho_maximo)

                || (total_lucro_perca_abertos() + resultado_do_dia() == 0))

               &&

               (ConferirHorario() == true || var_ativar_controle_horario == false) && (var_precisa_esperar_x_barras == false || var_ativar_espera_x_barras == false)  && var_tempo_vela_entrada !=  iTime(ativo_operar, PERIOD_CURRENT, 0)  && (filtro_rsi("compra") == true || ativar_filtro_rsi == false) &&  trade.Buy(var_lote, ativo_operar, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK)), var_StopLoss, var_Takeprofit, var_comentario_Ea))

              {

               // Atualiza as linhas no gráfico com os valores da ordem

              // UpdateLines(ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK)), var_Takeprofit, var_StopLoss);

               Print("########## " + ativo_operar + " Compra enviada com sucesso ", var_comentario_Ea);

               

              /* // Desenhar linhas na tela

               double price_open = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK));

               string order_line_name = "OrderLine_" + IntegerToString(ticket);

               string takeprofit_line_name = "TakeProfitLine_" + IntegerToString(ticket);

               string stoploss_line_name = "StopLossLine_" + IntegerToString(ticket);


               // Linha da ordem (branca)

               ObjectCreate(0, order_line_name, OBJ_TREND, 0, TimeCurrent(), price_open, TimeCurrent() + PeriodSeconds(), price_open);

               ObjectSetInteger(0, order_line_name, OBJPROP_COLOR, clrWhite);

               ObjectSetInteger(0, order_line_name, OBJPROP_STYLE, STYLE_DOT);


               // Linha do Take Profit (verde)

               if(var_Takeprofit > 0)

                 {

                  ObjectCreate(0, takeprofit_line_name, OBJ_TREND, 0, TimeCurrent(), var_Takeprofit, TimeCurrent() + PeriodSeconds(), var_Takeprofit);

                  ObjectSetInteger(0, takeprofit_line_name, OBJPROP_COLOR, clrGreen);

                  ObjectSetInteger(0, takeprofit_line_name, OBJPROP_STYLE, STYLE_DOT);

                 }


               // Linha do Stop Loss (vermelha)

               if(var_StopLoss > 0)

                 {

                  ObjectCreate(0, stoploss_line_name, OBJ_TREND, 0, TimeCurrent(), var_StopLoss, TimeCurrent() + PeriodSeconds(), var_StopLoss);

                  ObjectSetInteger(0, stoploss_line_name, OBJPROP_COLOR, clrRed);

                  ObjectSetInteger(0, stoploss_line_name, OBJPROP_STYLE, STYLE_DOT);

                 }*/


               //Martingale tempo real

               if(ativar_martingale == true && Modo_martingale == tempo_real)

                 {

                  //Realizando preços medios compra

                  trade.BuyLimit(lote_1, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_1 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_2, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_2 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_3, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_3 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_4, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_4 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_5, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_5 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_6, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_6 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_7, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_7 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_8, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_8 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_9, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_9 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_10, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_10 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_11, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_11 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_12, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_12 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_13, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_13 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_14, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_14 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_15, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_15 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_16, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_16 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_17, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_17 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_18, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_18 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_19, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_19 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_20, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_20 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  ulong ticket = 0;

                  double Preco_abertura = 0;

                  for(int i = OrdersTotal(); i >= 0; i--)

                    {

                     ticket = OrderGetTicket(i);

                     if(ticket > 0)

                       {

                        if(OrderGetInteger(ORDER_MAGIC) == var_numero_magico && OrderGetString(ORDER_SYMBOL) == ativo_operar)

                          {

                           Preco_abertura = OrderGetDouble(ORDER_PRICE_OPEN);

                           ///trade.OrderModify(ticket, ValorNormalizado(Preco_abertura), ValorNormalizado(Preco_abertura) - var_sl * _Point, ValorNormalizado(Preco_abertura) + var_tp * _Point, ORDER_TIME_GTC, 0, 0.0);

                          }

                       }

                    }

                 }

              }

            else

               if(

                  //verificar se ja bateu o controle financeiro

                  (ativar_meta == false || (total_lucro_perca_abertos() + resultado_do_dia() > (perda_maxima - (perda_maxima * 2))

                                            && total_lucro_perca_abertos() + resultado_do_dia() < ganho_maximo)

                   || (total_lucro_perca_abertos() + resultado_do_dia() == 0))

                  &&

                  (ConferirHorario() == true || var_ativar_controle_horario == false) && (var_precisa_esperar_x_barras == false || var_ativar_espera_x_barras == false) && var_tempo_vela_entrada !=  iTime(ativo_operar, PERIOD_CURRENT, 0))

                 {

                  GetLastError();

                  Print("########## " + ativo_operar + " Proteção financiera ativada Compra não enviada com sucesso ", var_comentario_Ea);

                 }

           }

         if(var_contar == 0  && var_modo_de_trabalho == 1 && var_modo_entrada != var_modo_compra)// Vender no fundo e comprar no topo

           {

            //__________________________________________________________________________________

            //Definir se vai usar TakeProfit ou Stoploss para posicoes de venda

            if(var_usar_stops == var_usar_stop_e_take)

              {

               var_Takeprofit = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID)) - var_tp * _Point;

               var_StopLoss = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID)) + var_sl * _Point;

              }

            if(var_usar_stops == var_usar_stop)

              {

               var_Takeprofit = 0.0;

               var_StopLoss = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID)) + var_sl * _Point;

              }

            if(var_usar_stops == var_usar_tp)

              {

               var_Takeprofit = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID)) - var_tp * _Point;

               var_StopLoss = 0.0;

              }

            if(var_usar_stops == var_nao_usar_stop_e_take)

              {

               var_Takeprofit = 0.0;

               var_StopLoss = 0.0;

              }

            //__________________________________________________________________________________

            /////Comment("Venda");

            if(

               parar_agora == false &&

               //verificar se ja bateu o controle financeiro

               (ativar_meta == false || (total_lucro_perca_abertos() + resultado_do_dia() > (perda_maxima - (perda_maxima * 2))

                                         && total_lucro_perca_abertos() + resultado_do_dia() < ganho_maximo)

                || (total_lucro_perca_abertos() + resultado_do_dia() == 0))

               &&

               (ConferirHorario() == true || var_ativar_controle_horario == false) && (var_precisa_esperar_x_barras == false || var_ativar_espera_x_barras == false) && var_tempo_vela_entrada !=  iTime(ativo_operar, PERIOD_CURRENT, 0) && (filtro_rsi("venda") == true  || ativar_filtro_rsi ==  false) && trade.Sell(var_lote, ativo_operar, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID)), var_StopLoss, var_Takeprofit, var_comentario_Ea))

              {

               var_tempo_vela_entrada = iTime(ativo_operar, PERIOD_CURRENT, 0);

                             // UpdateLines(ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK)), var_Takeprofit, var_StopLoss);


               Print("########## " + ativo_operar + " Venda enviada com sucesso ", var_comentario_Ea);

               var_precisa_esperar_x_barras = true;

               //Martingale tempo real

               if(ativar_martingale == true && Modo_martingale == tempo_real)

                 {

                  //Realizando preços medios venda

                  trade.SellLimit(lote_1, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_1 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_2, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_2 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_3, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_3 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_4, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_4 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_5, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_5 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_6, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_6 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_7, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_7 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_8, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_8 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_9, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_9 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_10, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_10 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_11, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_11 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_12, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_12 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_13, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_13 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_14, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_14 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_15, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_15 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_16, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_16 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_17, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_17 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_18, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_18 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_19, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_19 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_20, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_20 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  ulong ticket = 0;

                  double Preco_abertura = 0;

                  for(int i = OrdersTotal(); i >= 0; i--)

                    {

                     ticket = OrderGetTicket(i);

                     if(ticket > 0)

                       {

                        if(OrderGetInteger(ORDER_MAGIC) == var_numero_magico && OrderGetString(ORDER_SYMBOL) == ativo_operar)

                          {

                           Preco_abertura = OrderGetDouble(ORDER_PRICE_OPEN);

                           ////  trade.OrderModify(ticket, ValorNormalizado(Preco_abertura), ValorNormalizado(Preco_abertura) + var_sl * _Point, ValorNormalizado(Preco_abertura) - var_tp * _Point, ORDER_TIME_GTC, 0, 0.0);

                          }

                       }

                    }

                 }

              }

            else

               if(

                  //verificar se ja bateu o controle financeiro

                  (ativar_meta == false || (total_lucro_perca_abertos() + resultado_do_dia() > (perda_maxima - (perda_maxima * 2))

                                            && total_lucro_perca_abertos() + resultado_do_dia() < ganho_maximo)

                   || (total_lucro_perca_abertos() + resultado_do_dia() == 0))

                  &&

                  (ConferirHorario() == true || var_ativar_controle_horario == false) && (var_precisa_esperar_x_barras == false || var_ativar_espera_x_barras == false) && var_tempo_vela_entrada !=  iTime(ativo_operar, PERIOD_CURRENT, 0))

                 {

                  GetLastError();

                  Print("########## " + ativo_operar + " Proteção financiera ativada Venda não enviada com sucesso ", var_comentario_Ea);

                 }

           }

        }

      //Abrir posicão

      if(

         // Estrategia 0 Fechou dentro fechou fora

         (var_estrategia == 0 && iClose(ativo_renko, PERIOD_CURRENT, 2) < var_linha_superior[2] && iClose(ativo_renko, PERIOD_CURRENT, 1) > var_linha_superior[1])

         ||

         // Estrategia 1 Fechou fora fechou dentro

         (var_estrategia == 1 && iClose(ativo_renko, PERIOD_CURRENT, 2) > var_linha_superior[2] && iClose(ativo_renko, PERIOD_CURRENT, 1) < var_linha_superior[1])

         ||

         // Estrategia 2 Tocou na banda

         (var_estrategia == 2 && iClose(ativo_renko, PERIOD_CURRENT, 1) < var_linha_superior[1] && iClose(ativo_renko, PERIOD_CURRENT, 0) >= var_linha_superior[0])

      )

        {

         //__________________________________________________________________________________

         //Verificar se já existe uma posição aberta

         int var_contar = 0;

         ulong ticket = 0;

         for(int i = PositionsTotal(); i >= 0; i--)

           {

            ticket = PositionGetTicket(i);

            if(ticket > 0)

              {

               if(PositionGetInteger(POSITION_MAGIC) == var_numero_magico)

                 {

                  //Contando posicoes abertas

                  var_contar++;

                 }

              }

           }

         //__________________________________________________________________________________

         if(var_contar == 0  && var_modo_de_trabalho == 0 && var_modo_entrada != var_modo_compra)// Vender no topo e comprar no fundo

           {

            //__________________________________________________________________________________

            //Definir se vai usar TakeProfit ou Stoploss para posicoes de venda

            if(var_usar_stops == var_usar_stop_e_take)

              {

               var_Takeprofit = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID)) - var_tp * _Point;

               var_StopLoss = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID)) + var_sl * _Point;

              }

            if(var_usar_stops == var_usar_stop)

              {

               var_Takeprofit = 0.0;

               var_StopLoss = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID)) + var_sl * _Point;

              }

            if(var_usar_stops == var_usar_tp)

              {

               var_Takeprofit = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID)) - var_tp * _Point;

               var_StopLoss = 0.0;

              }

            if(var_usar_stops == var_nao_usar_stop_e_take)

              {

               var_Takeprofit = 0.0;

               var_StopLoss = 0.0;

              }

            //__________________________________________________________________________________

            /////Comment("Venda");

            if(

               ///

               parar_agora == false &&

               //verificar se ja bateu o controle financeiro

               (ativar_meta == false || (total_lucro_perca_abertos() + resultado_do_dia() > (perda_maxima - (perda_maxima * 2))

                                         && total_lucro_perca_abertos() + resultado_do_dia() < ganho_maximo)

                || (total_lucro_perca_abertos() + resultado_do_dia() == 0))

               &&

               (ConferirHorario() == true || var_ativar_controle_horario == false) && (var_precisa_esperar_x_barras == false || var_ativar_espera_x_barras == false) && var_tempo_vela_entrada !=  iTime(ativo_operar, PERIOD_CURRENT, 0) && (filtro_rsi("venda") == true || ativar_filtro_rsi == false) && trade.Sell(var_lote, ativo_operar, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID)), var_StopLoss, var_Takeprofit, var_comentario_Ea))

              {

               var_tempo_vela_entrada = iTime(ativo_operar, PERIOD_CURRENT, 0);

                              //UpdateLines(ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK)), var_Takeprofit, var_StopLoss);


               Print("########## " + ativo_operar + " Venda enviada com sucesso ", var_comentario_Ea);

               var_precisa_esperar_x_barras = true;

               //Martingale tempo real

               if(

                  ativar_martingale == true && Modo_martingale == tempo_real)

                 {

                  //Realizando preços medios venda

                  trade.SellLimit(lote_1, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_1 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_2, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_2 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_3, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_3 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_4, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_4 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_5, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_5 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_6, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_6 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_7, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_7 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_8, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_8 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_9, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_9 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_10, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_10 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_11, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_11 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_12, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_12 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_13, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_13 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_14, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_14 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_15, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_15 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_16, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_16 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_17, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_17 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_18, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_18 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_19, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_19 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.SellLimit(lote_20, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_BID) + orden_20 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  ulong ticket = 0;

                  double Preco_abertura = 0;

                  for(int i = OrdersTotal(); i >= 0; i--)

                    {

                     ticket = OrderGetTicket(i);

                     if(ticket > 0)

                       {

                        if(OrderGetInteger(ORDER_MAGIC) == var_numero_magico && OrderGetString(ORDER_SYMBOL) == ativo_operar)

                          {

                           Preco_abertura = OrderGetDouble(ORDER_PRICE_OPEN);

                           ////trade.OrderModify(ticket, ValorNormalizado(Preco_abertura), ValorNormalizado(Preco_abertura) + var_sl * _Point, ValorNormalizado(Preco_abertura) - var_tp * _Point, ORDER_TIME_GTC, 0, 0.0);

                          }

                       }

                    }

                 }

              }

            else

               if(

                  //verificar se ja bateu o controle financeiro

                  (ativar_meta == false || (total_lucro_perca_abertos() + resultado_do_dia() > (perda_maxima - (perda_maxima * 2))

                                            && total_lucro_perca_abertos() + resultado_do_dia() < ganho_maximo)

                   || (total_lucro_perca_abertos() + resultado_do_dia() == 0))

                  &&

                  (ConferirHorario() == true || var_ativar_controle_horario == false) && (var_precisa_esperar_x_barras == false || var_ativar_espera_x_barras == false) && var_tempo_vela_entrada !=  iTime(ativo_operar, PERIOD_CURRENT, 0))

                 {

                  GetLastError();

                  Print("########## " + ativo_operar + " Venda não enviada com sucesso ", var_comentario_Ea);

                 }

           }

         if(var_contar == 0  && var_modo_de_trabalho == 1 && var_modo_entrada != var_modo_venda)// Comprar no topo e vender no fundo

           {

            //__________________________________________________________________________________

            //Definir se vai usar TakeProfit ou Stoploss para posicoes de compra

            if(var_usar_stops == var_usar_stop_e_take)

              {

               var_Takeprofit = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK)) + var_tp * _Point;

               var_StopLoss = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK)) - var_sl * _Point;

              }

            if(var_usar_stops == var_usar_stop)

              {

               var_Takeprofit = 0.0;

               var_StopLoss = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK)) - var_sl * _Point;

              }

            if(var_usar_stops == var_usar_tp)

              {

               var_Takeprofit = ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK)) + var_tp * _Point;

               var_StopLoss = 0.0;

              }

            if(var_usar_stops == var_nao_usar_stop_e_take)

              {

               var_Takeprofit = 0.0;

               var_StopLoss = 0.0;

              }

            //__________________________________________________________________________________

            /////Comment("Comprar");

            if(

               parar_agora == false &&

               //verificar se ja bateu o controle financeiro

               (ativar_meta == false || (total_lucro_perca_abertos() + resultado_do_dia() > (perda_maxima - (perda_maxima * 2))

                                         && total_lucro_perca_abertos() + resultado_do_dia() < ganho_maximo)

                || (total_lucro_perca_abertos() + resultado_do_dia() == 0))

               &&

               (ConferirHorario() == true || var_ativar_controle_horario == false) && (var_precisa_esperar_x_barras == false || var_ativar_espera_x_barras == false) && var_tempo_vela_entrada !=  iTime(ativo_operar, PERIOD_CURRENT, 0) && (filtro_rsi("compra") == true || ativar_filtro_rsi ==  false) && trade.Buy(var_lote, ativo_operar, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK)), var_StopLoss, var_Takeprofit, var_comentario_Ea))

              {

               var_tempo_vela_entrada = iTime(ativo_operar, PERIOD_CURRENT, 0);

                              //UpdateLines(ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK)), var_Takeprofit, var_StopLoss);


               Print("########## " + ativo_operar + " Compra enviada com sucesso ", var_comentario_Ea);

               var_precisa_esperar_x_barras = true;

               //Martingale tempo real

               if(ativar_martingale == true && Modo_martingale == tempo_real)

                 {

                  //Realizando preços medios compra

                  trade.BuyLimit(lote_1, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_1 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_2, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_2 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_3, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_3 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_4, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_4 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_5, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_5 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_6, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_6 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_7, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_7 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_8, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_8 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_9, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_9 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_10, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_10 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_11, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_11 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_12, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_12 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_13, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_13 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_14, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_14 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_15, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_15 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_16, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_16 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_17, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_17 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_18, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_18 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_19, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_19 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  trade.BuyLimit(lote_20, ValorNormalizado(SymbolInfoDouble(ativo_operar, SYMBOL_ASK) - orden_20 * _Point), ativo_operar, 0.0, 0.0, ORDER_TIME_GTC, 0, var_comentario_Ea);

                  ulong ticket = 0;

                  double Preco_abertura = 0;

                  for(int i = OrdersTotal(); i >= 0; i--)

                    {

                     ticket = OrderGetTicket(i);

                     if(ticket > 0)

                       {

                        if(OrderGetInteger(ORDER_MAGIC) == var_numero_magico && OrderGetString(ORDER_SYMBOL) == ativo_operar)

                          {

                           Preco_abertura = OrderGetDouble(ORDER_PRICE_OPEN);

                           ////  trade.OrderModify(ticket, ValorNormalizado(Preco_abertura), ValorNormalizado(Preco_abertura) - var_sl * _Point, ValorNormalizado(Preco_abertura) + var_tp * _Point, ORDER_TIME_GTC, 0, 0.0);

                          }

                       }

                    }

                 }

              }

            else

               if(

                  //verificar se ja bateu o controle financeiro

                  (ativar_meta == false || (total_lucro_perca_abertos() + resultado_do_dia() > (perda_maxima - (perda_maxima * 2))

                                            && total_lucro_perca_abertos() + resultado_do_dia() < ganho_maximo)

                   || (total_lucro_perca_abertos() + resultado_do_dia() == 0))

                  &&

                  (ConferirHorario() == true || var_ativar_controle_horario == false) && (var_precisa_esperar_x_barras == false || var_ativar_espera_x_barras == false) && var_tempo_vela_entrada !=  iTime(ativo_renko, PERIOD_CURRENT, 0))

                 {

                  GetLastError();

                  Print("########## " + ativo_operar + " Compra não enviada com sucesso ", var_comentario_Ea);

                 }

           }

        }

     }

  }

  

//+------------------------------------------------------------------+

//|     Função para desenhar linhas no gráfico                       |

//+------------------------------------------------------------------+


/*void UpdateLines(double preco_entrada, double take_profit, double stop_loss)

  {

// Remover as linhas antigas, se existirem

   ObjectDelete(0, "Ordem");

   ObjectDelete(0, "TakeProfit");

   ObjectDelete(0, "StopLoss");

   ObjectDelete(0, "Breakeven");

   ObjectDelete(0, "Tralingstop");


// Adicionar a linha da ordem (preço de entrada)

   if(preco_entrada > 0)

     {

      ObjectCreate(0, "Ordem", OBJ_HLINE, 0, 0, preco_entrada);

      ObjectSetInteger(0, "Ordem", OBJPROP_COLOR, clrWhite);

      ObjectSetInteger(0, "Ordem", OBJPROP_STYLE, STYLE_DASH); // Linha pontilhada

      ObjectSetInteger(0, "Ordem", OBJPROP_WIDTH, 1);

     }


// Adicionar a linha do Take Profit

   if(take_profit > 0)

     {

      ObjectCreate(0, "TakeProfit", OBJ_HLINE, 0, 0, take_profit);

      ObjectSetInteger(0, "TakeProfit", OBJPROP_COLOR, clrGreen);

      ObjectSetInteger(0, "TakeProfit", OBJPROP_STYLE, STYLE_DASH); // Linha pontilhada

      ObjectSetInteger(0, "TakeProfit", OBJPROP_WIDTH, 1);

     }


// Adicionar a linha do Stop Loss

   if(stop_loss > 0)

     {

      ObjectCreate(0, "StopLoss", OBJ_HLINE, 0, 0, stop_loss);

      ObjectSetInteger(0, "StopLoss", OBJPROP_COLOR, clrRed);

      ObjectSetInteger(0, "StopLoss", OBJPROP_STYLE, STYLE_DASH); // Linha pontilhada

      ObjectSetInteger(0, "StopLoss", OBJPROP_WIDTH, 1);

     }

  }*/



//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

double ValorNormalizado(double useValor)

  {

   double tickSize = SymbolInfoDouble(ativo_operar, SYMBOL_TRADE_TICK_SIZE);

   double resto = MathMod(useValor, tickSize);

   double ret = resto >= tickSize / 2.0 ? useValor + (tickSize - resto) : useValor - resto;

   return (NormalizeDouble(ret, _Digits));

  }

//+------------------------------------------------------------------+

string resultado_ultima_posicao_aberta_no_dia()

  {

   ulong var_deal_ticket = 0;

   double deal_profit = 0;

   datetime inicio = iTime(ativo_operar, PERIOD_D1, 0);

   datetime fim = TimeCurrent();

   HistorySelect(inicio, fim);

   for(int i = HistoryDealsTotal(); i >= 0; i--)

     {

      var_deal_ticket = HistoryDealGetTicket(i);

      if(var_deal_ticket > 0)

        {

         if(HistoryDealGetInteger(var_deal_ticket, DEAL_MAGIC) == var_numero_magico && HistoryDealGetString(var_deal_ticket, DEAL_SYMBOL) == ativo_operar)

           {

            deal_profit = HistoryDealGetDouble(var_deal_ticket, DEAL_PROFIT);

            if(deal_profit > 0)

              {

               return ("win");

              }

            if(deal_profit < 0)

              {

               return ("loss");

              }

           }

        }

     }

   return "false";

  }

//__________________________________________________________________________________

bool Breakeven()

  {

   ulong ticket_1 = 0;

   for(int i = PositionsTotal(); i >= 0; i--)

     {

      ticket_1 = PositionGetTicket(i);

      if(ticket_1 > 0)

        {

         PositionSelectByTicket(ticket_1);

         if(PositionGetInteger(POSITION_MAGIC) == var_numero_magico

            && PositionGetString(POSITION_SYMBOL) == ativo_operar

           )

           {

            if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)

              {

               if(ValorNormalizado(PositionGetDouble(POSITION_SL)) < ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) && ValorNormalizado(PositionGetDouble(POSITION_SL)) != ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) + proteger * _Point)

                 {

                  if(iClose(ativo_operar, PERIOD_CURRENT, 0) > ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) + gatilhoBE * _Point)

                    {

                     if(trade.PositionModify(PositionGetInteger(POSITION_TICKET), ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) + proteger * _Point, ValorNormalizado(PositionGetDouble(POSITION_TP))))

                       {

                        Print("Trade Protegido - BreakEven movido sem falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                       }

                     else

                       {

                        Print("Erro no BreakEven - com falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                       }

                    }

                 }

              }

            if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)

              {

               if(ValorNormalizado(PositionGetDouble(POSITION_SL)) > ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) && ValorNormalizado(PositionGetDouble(POSITION_SL)) != ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) - proteger * _Point)

                 {

                  if(iClose(ativo_operar, PERIOD_CURRENT, 0) < ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) - gatilhoBE * _Point)

                    {

                     if(trade.PositionModify(PositionGetInteger(POSITION_TICKET), ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) - proteger * _Point, ValorNormalizado(PositionGetDouble(POSITION_TP))))

                       {

                        Print("Trade Protegido - BreakEven movido sem falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                       }

                     else

                       {

                        Print("Erro no BreakEven - com falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                       }

                    }

                 }

              }

           }

        }

     }

   return false;

  }





//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void Tralling_stop()

  {

   double preco = iClose(ativo_operar, PERIOD_CURRENT, 0);

   for(int i = PositionsTotal() - 1; i >= 0; i--)

     {

      string symbol = PositionGetSymbol(i);

      ulong magic = PositionGetInteger(POSITION_MAGIC);

      if(symbol == ativo_operar && magic == var_numero_magico)

        {

         ulong PositionTicket = PositionGetInteger(POSITION_TICKET);

         double StopLossCorrente = PositionGetDouble(POSITION_SL);

         double TakeProfitCorrente = PositionGetDouble(POSITION_TP);

         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)

           {

            if(preco >= (StopLossCorrente + gatilhoTS) && preco >= (ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) + gatilhoTS))

              {

               double novoSL = NormalizeDouble(StopLossCorrente + stepTS, _Digits);

               if(trade.PositionModify(PositionTicket, novoSL, TakeProfitCorrente))

                 {

                  Print("Lucro no bolso TrailingStop movido com sucesso. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                 }

               else

                 {

                  Print("ERRO TrailingStop - com falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                 }

              }

           }

         else

            if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)

              {

               if(preco <= (StopLossCorrente - gatilhoTS))

                 {

                  double novoSL = NormalizeDouble(StopLossCorrente - stepTS, _Digits);

                  if(trade.PositionModify(PositionTicket, novoSL, TakeProfitCorrente))

                    {

                     Print("Lucro no bolso TrailingStop movido com sucesso. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                    }

                  else

                    {

                     Print("ERRO TrailingStop - com falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                    }

                 }

              }

        }

     }

  }










//+------------------------------------------------------------------+



//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

/*bool ConferirHorario()

{

    // Obtém a hora atual

    datetime agora = TimeCurrent();

    MqlDateTime dt;

    TimeToStruct(agora, dt); // Converte para a estrutura MqlDateTime


    int minutos_atual = dt.min; // Obtém os minutos atuais

    int hora_atual = dt.hour; // Obtém a hora atual


    // Função para converter "HH:MM" em minutos

    auto ConvertTimeStringToMinutes = [](string time_str) {

        int hour = StringToInteger(StringSubstr(time_str, 0, 2));

        int minute = StringToInteger(StringSubstr(time_str, 3, 2));

        return hour * 60 + minute;

    };


    // Converte os horários de string para minutos

    int hora_inicio_minutos = ConvertTimeStringToMinutes(hora_inicio);

    int hora_final_minutos = ConvertTimeStringToMinutes(hora_final);

    int hora_atual_minutos = hora_atual * 60 + minutos_atual; // Hora atual em minutos


    // Lógica de verificação

    if ((hora_atual_minutos >= hora_inicio_minutos && hora_atual_minutos <= hora_final_minutos && hora_final_minutos > hora_inicio_minutos)

        || ((hora_atual_minutos >= hora_inicio_minutos || hora_atual_minutos <= hora_final_minutos) && hora_final_minutos < hora_inicio_minutos))

    {

        return true; // Dentro do intervalo

    }


    return false; // Fora do intervalo

}


*/


//__________________________________________________________________________________

//

//__________________________________FECHAR TOTAS COMPRAS____________________________

//

//__________________________________________________________________________________

void FecharTodasCompras()

  {

   for(int i = PositionsTotal(); i >= 0; i--)

     {

      ulong ticket = PositionGetTicket(i);

      if(ticket > 0)

        {

         if(PositionGetString(POSITION_SYMBOL) == ativo_operar && PositionGetInteger(POSITION_MAGIC) == var_numero_magico

            && PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)

            if(trade.PositionClose(ticket, SlippageMaximo))

               Print("###### " + ativo_operar + " POSIÇÃO " + IntegerToString(ticket) + " FECHADA COM SUCESSO");

            else

               Print("###### " + ativo_operar + " ERRO AO FECHAR POSIÇÃO " + IntegerToString(ticket));

        }

     }

  }

//__________________________________________________________________________________

//

//__________________________________FECHAR TOTAS VENDAS_____________________________

//

//__________________________________________________________________________________

void FecharTodasVendas()

  {

   for(int i = PositionsTotal() ; i >= 0; i--)

     {

      ulong ticket = PositionGetTicket(i);

      if(ticket > 0)

        {

         if(PositionGetString(POSITION_SYMBOL) == ativo_operar && PositionGetInteger(POSITION_MAGIC) == var_numero_magico

            && PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)

            if(trade.PositionClose(ticket, SlippageMaximo))

               Print("###### " + ativo_operar + " POSIÇÃO " + IntegerToString(ticket) + " FECHADA COM SUCESSO");

            else

               Print("###### " + ativo_operar + " ERRO AO FECHAR POSIÇÃO " + IntegerToString(ticket));

        }

     }

  }

//+------------------------------------------------------------------+



//+------------------------------------------------------------------+

double resultado_do_dia()

  {

   ulong var_deal_ticket = 0;

   double deal_profit = 0;

   datetime inicio = iTime(ativo_operar, PERIOD_D1, 0);

   datetime fim = TimeCurrent();

   HistorySelect(inicio, fim);

   for(int i = HistoryDealsTotal(); i >= 0; i--)

     {

      var_deal_ticket = HistoryDealGetTicket(i);

      if(var_deal_ticket > 0)

        {

         if(HistoryDealGetInteger(var_deal_ticket, DEAL_MAGIC) == var_numero_magico && HistoryDealGetString(var_deal_ticket, DEAL_SYMBOL) == ativo_operar)

           {

            deal_profit += HistoryDealGetDouble(var_deal_ticket, DEAL_PROFIT);

           }

        }

     }

   return deal_profit;

  }



//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

double total_lucro_perca_abertos()

  {

   ulong ticket_1 = 0;

   int contar = 0;

   double resultado_em_andamento = 0;

   for(int i = PositionsTotal(); i >= 0; i--)

     {

      ticket_1 = PositionGetTicket(i);

      if(ticket_1 > 0)

        {

         PositionSelectByTicket(ticket_1);

         if(

            PositionGetInteger(POSITION_MAGIC) == var_numero_magico

            && PositionGetString(POSITION_SYMBOL) == ativo_operar

         )

           {

            resultado_em_andamento += PositionGetDouble(POSITION_PROFIT);

           }

        }

     }

   return resultado_em_andamento;

  }

//+------------------------------------------------------------------+


//+------------------------------------------------------------------+

double total_lotes_abertos_buy_e_Sell()

  {

   ulong ticket_1 = 0;

   int contar = 0;

   double total_lotes_buy = 0;

   for(int i = PositionsTotal(); i >= 0; i--)

     {

      ticket_1 = PositionGetTicket(i);

      if(ticket_1 > 0)

        {

         PositionSelectByTicket(ticket_1);

         if(

            PositionGetInteger(POSITION_MAGIC) == var_numero_magico

            && PositionGetString(POSITION_SYMBOL) == ativo_operar

         )

           {

            total_lotes_buy += PositionGetDouble(POSITION_VOLUME);

           }

        }

     }

   return total_lotes_buy;

  }


//+------------------------------------------------------------------+




//+------------------------------------------------------------------+

string resultado_ultima_posicao_fechada()

  {

   ulong var_deal_ticket = 0;

   double deal_profit = 0;

   datetime inicio = 0;

   datetime fim = TimeCurrent();

   HistorySelect(inicio, fim);

   for(int i = HistoryDealsTotal(); i >= 0; i--)

     {

      var_deal_ticket = HistoryDealGetTicket(i);

      if(var_deal_ticket > 0)

        {

         if(HistoryDealGetInteger(var_deal_ticket, DEAL_MAGIC) == var_numero_magico && HistoryDealGetString(var_deal_ticket, DEAL_SYMBOL) == ativo_operar)

           {

            deal_profit = HistoryDealGetDouble(var_deal_ticket, DEAL_PROFIT);

            if(deal_profit > 0)

              {

               return ("win");

              }

            if(deal_profit < 0)

              {

               return ("loss" + string(var_deal_ticket));

              }

           }

        }

     }

   return "false";

  }

//__________________________________________________________________________________

//+------------------------------------------------------------------+




//+------------------------------------------------------------------+

int total_posicoes_abertos_buy_e_Sell()

  {

   ulong ticket_1 = 0;

   int total = 0;


// Corrigindo a condição do loop para percorrer todas as posições

   for(int i = PositionsTotal() - 1; i >= 0; i--)

     {

      ticket_1 = PositionGetTicket(i);

      if(ticket_1 > 0)

        {

         PositionSelectByTicket(ticket_1);

         // Verifica número mágico e símbolo

         if(PositionGetInteger(POSITION_MAGIC) == var_numero_magico &&

            PositionGetString(POSITION_SYMBOL) == ativo_operar)

           {

            total++; // Contando posições

           }

        }

     }

   return total; // Retorna o total de posições abertas

  }

//__________________________________________________________________________________

//

//_______________________________remover_ordens_pendentes___________________________

//

//__________________________________________________________________________________

bool remover_ordens_pendentes(string tipo_de_ordem)

  {

   ulong ticket = 0;

   bool ordem_removida = false; // Variável para rastrear se alguma ordem foi removida


   for(int i = OrdersTotal() - 1; i >= 0; i--) // Percorrendo ordens do último para o primeiro

     {

      ticket = OrderGetTicket(i);

      if(ticket > 0)

        {

         // Verifica ordens de compra

         if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT &&

            OrderGetInteger(ORDER_MAGIC) == var_numero_magico &&

            OrderGetString(ORDER_SYMBOL) == Symbol())

           {

            if(tipo_de_ordem == "compra")

              {

               trade.OrderDelete(ticket);

               ordem_removida = true; // Marca que uma ordem foi removida

              }

           }

         // Verifica ordens de venda

         else

            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT &&

               OrderGetInteger(ORDER_MAGIC) == var_numero_magico &&

               OrderGetString(ORDER_SYMBOL) == Symbol())

              {

               if(tipo_de_ordem == "venda")

                 {

                  trade.OrderDelete(ticket);

                  ordem_removida = true; // Marca que uma ordem foi removida

                 }

              }

        }

     }


   return ordem_removida; // Retorna true se alguma ordem foi removida, false caso contrário

  }

//+------------------------------------------------------------------+





//+------------------------------------------------------------------+




//+------------------------------------------------------------------+

double resultado_semana()

  {

   ulong var_deal_ticket = 0;

   double deal_profit = 0;

   datetime inicio = iTime(ativo_operar, PERIOD_W1, 0);

   datetime fim = TimeCurrent();

   HistorySelect(inicio, fim);

   for(int i = HistoryDealsTotal(); i >= 0; i--)

     {

      var_deal_ticket = HistoryDealGetTicket(i);

      if(var_deal_ticket > 0)

        {

         if(HistoryDealGetInteger(var_deal_ticket, DEAL_MAGIC) == var_numero_magico && HistoryDealGetString(var_deal_ticket, DEAL_SYMBOL) == ativo_operar)

           {

            deal_profit += HistoryDealGetDouble(var_deal_ticket, DEAL_PROFIT);

           }

        }

     }

   return deal_profit;

  }

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

double resultado_mes()

  {

   ulong var_deal_ticket = 0;

   double deal_profit = 0;

   datetime inicio = iTime(ativo_operar, PERIOD_MN1, 0);

   datetime fim = TimeCurrent();

   HistorySelect(inicio, fim);

   for(int i = HistoryDealsTotal(); i >= 0; i--)

     {

      var_deal_ticket = HistoryDealGetTicket(i);

      if(var_deal_ticket > 0)

        {

         if(HistoryDealGetInteger(var_deal_ticket, DEAL_MAGIC) == var_numero_magico && HistoryDealGetString(var_deal_ticket, DEAL_SYMBOL) == ativo_operar)

           {

            deal_profit += HistoryDealGetDouble(var_deal_ticket, DEAL_PROFIT);

           }

        }

     }

   return deal_profit;

  }

//+------------------------------------------------------------------+

double resultado_total()

  {

   ulong var_deal_ticket = 0;

   double deal_profit = 0;

   datetime inicio = 0;

   datetime fim = TimeCurrent();

   HistorySelect(inicio, fim);

   for(int i = HistoryDealsTotal(); i >= 0; i--)

     {

      var_deal_ticket = HistoryDealGetTicket(i);

      if(var_deal_ticket > 0)

        {

         if(HistoryDealGetInteger(var_deal_ticket, DEAL_MAGIC) == var_numero_magico && HistoryDealGetString(var_deal_ticket, DEAL_SYMBOL) == ativo_operar)

           {

            deal_profit += HistoryDealGetDouble(var_deal_ticket, DEAL_PROFIT);

           }

        }

     }

   return deal_profit;

  }

//+------------------------------------------------------------------+


//+------------------------------------------------------------------+

//| Timer function                                                   |

//+------------------------------------------------------------------+


int contar_segundos = 0;

bool sem_conexao = false;

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void OnTimer()

  {

   if(contar_segundos > 4)

     {

      contar_segundos = 0;

     }

   contar_segundos += 1;

   /*string cookie = NULL, headers;

   char   post[], result[];

   string url = "https://idealbot.com.br/keltner/conectar.php?conta_usuario=" + string(numero_da_conta_atual);

   //--- download da página html do Yahoo Finance

   int res = WebRequest("GET", url, cookie, NULL, 5000, post, 0, result, headers);

   if(MQLInfoInteger(MQL_TESTER))

     {

     }

   else

      if(TerminalInfoInteger(TERMINAL_CONNECTED) && res != 1001)

        {

         if(sem_conexao == true)

           {

            PlaySound("::reconectado.wav");

           }

         sem_conexao = false;

         ChartNavigate(0, CHART_CURRENT_POS, 0);

         ObjectSetString(0, "hora_local", OBJPROP_TEXT, string(TimeLocal()));

         /////////////////////////Apartir daqui e controle de licença //////////

         //---

         if(res == -1)

           {

            ExpertRemove();

            Alert("Entre em contato com o suporte!");

           }

         //printf("RESULT=%s", CharArrayToString(result));

         int size = ArraySize(result);

         string texto_retornado = NULL;

         for(int i = 0; i < size; i++)

           {

            texto_retornado += CharToString(result[i]);

           }

         // Print(texto_retornado);

         string to_split = texto_retornado; // Um string para dividir em substrings

         string sep = ",";              // Um separador como um caractere

         ushort u_sep;                  // O código do caractere separador

         //--- Obtém o código do separador

         u_sep = StringGetCharacter(sep, 0);

         //--- Divide a string em substrings

         int k = StringSplit(to_split, u_sep, resultado);

         //--- Agora imprime todos os resultados obtidos

         if(k > 0)

           {

            if(resultado[1] == string(numero_da_conta_atual))

              {

               //   Print("Liberado!!");

              }

            else

              {

               ExpertRemove();

               Alert("Usuário não permitido !");

              }

           }

         string var_tipo_conta = "";

         ENUM_ACCOUNT_TRADE_MODE tradeMode = (ENUM_ACCOUNT_TRADE_MODE)AccountInfoInteger(ACCOUNT_TRADE_MODE);

         //--- Descobre o tipo de conta

         switch(tradeMode)

           {

            case(ACCOUNT_TRADE_MODE_DEMO):

               //   Print("Esta é uma conta demonstração");

               var_tipo_conta = "demo";

               break;

            case(ACCOUNT_TRADE_MODE_CONTEST):

               //  Print("Esta é uma conta de competição");

               break;

            default:

               //  Print("Esta é uma conta real!");

               var_tipo_conta = "real";

           }

         if(ArraySize(resultado) > 0)

           {

            if(resultado[3] != var_tipo_conta)

              {

               ExpertRemove();

              }

            // =========================================================================

            if(TimeCurrent() > datetime(resultado[2]))

              {

               Alert("============ EXPIRADO ================");

               ExpertRemove();

              }

           }

         //Expira em

         //ObjectSetString(0, "expira", OBJPROP_TEXT, string(resultado[2]));

        }

      else

        {

         if(contar_segundos < 4)

           {

            sem_conexao = true;

            PlaySound("::sem_conexao.wav");

           }

        };*/

//---

  }




//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

bool IsHedgingAllowed()

  {

   ENUM_ACCOUNT_MARGIN_MODE res = (ENUM_ACCOUNT_MARGIN_MODE)AccountInfoInteger(ACCOUNT_MARGIN_MODE);

   return(res == ACCOUNT_MARGIN_MODE_RETAIL_HEDGING);

  }

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void linhas_painel()

  {

//+------------------------------------------------------------------+

//| Criar logo                                                       |

//+------------------------------------------------------------------+

   logo.Create(0, "logo_keltner", 0, 3, 2, 0, 0);

   logo.BmpName("::_painel.bmp");

   m_panel.Add(logo);

//+------------------------------------------------------------------+

//|    Criar 1ª Linha                            |

//+------------------------------------------------------------------+

   if(MQLInfoInteger(MQL_TESTER))

     {

      m_Linha1label.Create(0, "usuario", 0, 75, 58, 0, 0);

      m_Linha1label.Text("Backtest");

      m_Linha1label.Color(clrLightSkyBlue);

      m_Linha1label.FontSize(fonte_texto);

      m_panel.Add(m_Linha1label);

     }

   else

     {

      m_Linha1label.Create(0, "usuario", 0, 77, 58, 0, 0);

      if(ArraySize(resultado) > 0)

        {

         m_Linha1label.Text(resultado[0]);

        }

      m_Linha1label.Color(clrLightSkyBlue);

      m_Linha1label.FontSize(fonte_texto);

      m_panel.Add(m_Linha1label);

     }

//+------------------------------------------------------------------+

//|    Criar 2ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha2label.Create(0, "conta", 0, 170, 103, 0, 0);

   m_Linha2label.Text(string(AccountInfoInteger(ACCOUNT_LOGIN)));

   m_Linha2label.Color(clrLightSkyBlue);

   m_Linha2label.FontSize(fonte_texto);

   m_panel.Add(m_Linha2label);

//+------------------------------------------------------------------+

//|    Criar 3ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha3label.Create(0, "lote_compra", 0, 180, 210, 0, 0);

   m_Linha3label.Text("---");

   m_Linha3label.Color(clrLightSkyBlue);

   m_Linha3label.FontSize(fonte_texto);

   m_panel.Add(m_Linha3label);

//+------------------------------------------------------------------+

//|    Criar 4ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha4label.Create(0, "lote_venda", 0, 45, 90, 0, 0);

   m_Linha4label.Text("---");

   m_Linha4label.Color(clrLightSkyBlue);

   m_Linha4label.FontSize(fonte_texto);

   m_panel.Add(m_Linha4label);

//+------------------------------------------------------------------+

//|    Criar 5ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha5label.Create(0, "notificação_1", 0, 29, 460, 0, 0);

   m_Linha5label.Text("");

   m_Linha5label.Color(clrLightSkyBlue);

   m_Linha5label.FontSize(fonte_texto);

   m_panel.Add(m_Linha5label);

//+------------------------------------------------------------------+

//|    Criar 6ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha6label.Create(0, "notificação_2", 0, 29, 470, 0, 0);

   m_Linha6label.Text("");

   m_Linha6label.Color(clrLightSkyBlue);

   m_Linha6label.FontSize(fonte_texto);

   m_panel.Add(m_Linha6label);

//+------------------------------------------------------------------+

//|    Criar 7ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha7label.Create(0, "hora_local", 0, 122, 427, 0, 0);

   m_Linha7label.Text(string(TimeLocal()));

   m_Linha7label.Color(clrLightSkyBlue);

   m_Linha7label.FontSize(fonte_texto);

   m_panel.Add(m_Linha7label);

//+------------------------------------------------------------------+

//|    Criar 8ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha8label.Create(0, "symbolo", 0, 170, 86, 0, 0);

   m_Linha8label.Text(ativo_operar);

   m_Linha8label.Color(clrLightSkyBlue);

   m_Linha8label.FontSize(fonte_texto);

   m_panel.Add(m_Linha8label);

//+------------------------------------------------------------------+

//|    Criar 9ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha9label.Create(0, "saldo", 0, 185, 60, 0, 0);

   m_Linha9label.Text(string(AccountInfoDouble(ACCOUNT_BALANCE)));

   m_Linha9label.Color(clrLightSkyBlue);

   m_Linha9label.FontSize(fonte_texto);

   m_panel.Add(m_Linha9label);

//+------------------------------------------------------------------+

//|    Criar 10ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha10label.Create(0, "preco_medio_1", 0, 0, 0, 0, 0);

   m_Linha10label.Text("---");

   m_Linha10label.Color(clrLightSkyBlue);

   m_Linha10label.FontSize(fonte_texto);

   m_panel.Add(m_Linha10label);

//+------------------------------------------------------------------+

//|    Criar 11ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha11label.Create(0, "preco_medio_2", 0, 0, 0, 0, 0);

   m_Linha11label.Text("-----");

   m_Linha11label.Color(clrLightSkyBlue);

   m_Linha11label.FontSize(fonte_texto);

   m_panel.Add(m_Linha11label);

//+------------------------------------------------------------------+

//|    Criar 12ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha12label.Create(0, "dia", 0, 170, 348, 0, 0);

   m_Linha12label.Text("---");

   m_Linha12label.Color(clrLightSkyBlue);

   m_Linha12label.FontSize(fonte_texto);

   m_panel.Add(m_Linha12label);

//+------------------------------------------------------------------+

//|    Criar 13ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha13label.Create(0, "semanal", 0, 163, 364, 0, 0);

   m_Linha13label.Text("---");

   m_Linha13label.Color(clrLightSkyBlue);

   m_Linha13label.FontSize(fonte_texto);

   m_panel.Add(m_Linha13label);

//+------------------------------------------------------------------+

//|    Criar 14ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha14label.Create(0, "vencimento", 0, 150, 155, 0, 0);

   m_Linha14label.Text("---");

   m_Linha14label.Color(clrLightSkyBlue);

   m_Linha14label.FontSize(fonte_texto);

   m_panel.Add(m_Linha14label);

//+------------------------------------------------------------------+

//|    Criar 15ª Linha                            |

//+------------------------------------------------------------------+

   if(MQLInfoInteger(MQL_TESTER))

     {

      m_Linha15label.Create(0, "expira", 0, 383, 22, 0, 0);

      m_Linha15label.Text("---");

      m_Linha15label.Color(clrLightSkyBlue);

      m_Linha15label.FontSize(fonte_texto);

      m_panel.Add(m_Linha15label);

     }

   else

     {

      m_Linha15label.Create(0, "expira", 0, 383, 22, 0, 0);

      if(ArraySize(resultado) > 0)

        {

         m_Linha15label.Text(resultado[2]);

        }

      m_Linha15label.Color(clrLightSkyBlue);

      m_Linha15label.FontSize(fonte_texto);

      m_panel.Add(m_Linha15label);

     }

//+------------------------------------------------------------------+

//|    Criar 16ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha16label.Create(0, "andamento_1", 0, 115, 237, 0, 0);

   m_Linha16label.Text("---");

   m_Linha16label.Color(clrLightSkyBlue);

   m_Linha16label.FontSize(fonte_texto);

   m_panel.Add(m_Linha16label);

//+------------------------------------------------------------------+

//|    Criar 17ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha17label.Create(0, "andamento_2", 0, 150, 395, 0, 0);

   m_Linha17label.Text("---");

   m_Linha17label.Color(clrLightSkyBlue);

   m_Linha17label.FontSize(fonte_texto);

   m_panel.Add(m_Linha17label);

//+------------------------------------------------------------------+

//|    Criar 18ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha18label.Create(0, "mensal", 0, 163, 380, 0, 0);

   m_Linha18label.Text("---");

   m_Linha18label.Color(clrLightSkyBlue);

   m_Linha18label.FontSize(fonte_texto);

   m_panel.Add(m_Linha18label);

//+------------------------------------------------------------------+

//|    Criar 19ª Linha                            |

//+------------------------------------------------------------------+

   m_Linha19label.Create(0, "total", 0, 163, 398, 0, 0);

   m_Linha19label.Text("---");

   m_Linha19label.Color(clrLightSkyBlue);

   m_Linha19label.FontSize(fonte_texto);

   m_panel.Add(m_Linha19label);

//+------------------------------------------------------------------+

//|    Criar 1 ª Botao                            |

//+------------------------------------------------------------------+

   m_Botao_1.Create(0, "Botao_1", 0, 550, 400, 245, 250);

   m_Botao_1.Text("Fechar todas as posiçôes!");

   m_Botao_1.Color(clrBlack);

   m_Botao_1.ColorBackground(clrDarkGray);

   m_panel.Add(m_Botao_1);

  }


//+------------------------------------------------------------------+

//|    Criar painel                                 |

//+------------------------------------------------------------------+

void Criar_painel()

  {

   m_panel = new CAppDialog();

   m_panel.Create(0, "Keltner Scalper Pro V1", 0, painelXX, painelYY, LarguraPainel, AlturaPainel);

//Comment(GlobalVariableGet("LarguraPainel"), "       ", GlobalVariableGet("AlturaPainel")/1.5);

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void OnChartEvent(const int id,

                  const long &lparam,

                  const double &dparam,

                  const string &sparam)

  {

//Move Painel com Mouse

   m_panel.ChartEvent(id, lparam, dparam, sparam);

//Move Painel com Mouse

   if(id == CHARTEVENT_OBJECT_CLICK && sparam == "Botao_1")

     {

      FecharTodasCompras();

      FecharTodasVendas();

     }

  }





bool ativou_Tralling_stop_finaceiro = false;


double proteger_valor =  proteger_financeiro;

double gatilho_valor =  gatilho_finaceiro;

datetime var_controle_dia;

bool parar_agora = false;



//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void Tralling_stop_finaceiro()

  {

   double lucro_atual = resultado_do_dia() + total_lucro_perca_abertos();

   if(lucro_atual >= gatilho_valor)

     {

      var_controle_dia = iTime(ativo_operar, PERIOD_D1, 0);

      ativou_Tralling_stop_finaceiro = true;

      proteger_valor += passos_financeiro;

      gatilho_valor += passos_financeiro;

     }

   if(parar_agora == false && ativou_Tralling_stop_finaceiro == true && lucro_atual <= proteger_valor)

     {

      FecharTodasCompras();

      FecharTodasVendas();

      parar_agora = true;

     }

   if(ativou_Tralling_stop_finaceiro == true &&  var_controle_dia != iTime(ativo_operar, PERIOD_D1, 0))

     {

      ativou_Tralling_stop_finaceiro = false;

      proteger_valor = proteger_financeiro;

      gatilho_valor = gatilho_finaceiro;

      parar_agora = false;

     }

  }


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

double preco_anterior = 0.0; // Inicialização correta


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void adicionar_take()

  {

   ulong ticket_1 = 0;

   for(int i = PositionsTotal() - 1; i >= 0; i--) // Corrigido o loop

     {

      ticket_1 = PositionGetTicket(i);

      if(ticket_1 > 0)

        {

         PositionSelectByTicket(ticket_1);

         if(PositionGetInteger(POSITION_MAGIC) == var_numero_magico &&

            PositionGetString(POSITION_SYMBOL) == ativo_operar)

           {

            if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && PositionGetDouble(POSITION_PRICE_OPEN) != preco_anterior)

              {

               preco_anterior = PositionGetDouble(POSITION_PRICE_OPEN);

               if(var_usar_stops == var_usar_stop_e_take)

                 {

                  trade.PositionModify(PositionGetInteger(POSITION_TICKET),

                                       ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) - var_sl * _Point,

                                       ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) + var_tp * _Point);

                 }

               else

                  if(var_usar_stops == var_usar_stop)

                    {

                     trade.PositionModify(PositionGetInteger(POSITION_TICKET),

                                          ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) - var_sl * _Point, 0.0);

                    }

                  else

                     if(var_usar_stops == var_usar_tp)

                       {

                        trade.PositionModify(PositionGetInteger(POSITION_TICKET),

                                             0.0, ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) + var_tp * _Point);

                       }

              }


            if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && PositionGetDouble(POSITION_PRICE_OPEN) != preco_anterior)

              {

               preco_anterior = PositionGetDouble(POSITION_PRICE_OPEN);

               if(var_usar_stops == var_usar_stop_e_take)

                 {

                  trade.PositionModify(PositionGetInteger(POSITION_TICKET),

                                       ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) + var_sl * _Point,

                                       ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) - var_tp * _Point);

                 }

               else

                  if(var_usar_stops == var_usar_stop)

                    {

                     trade.PositionModify(PositionGetInteger(POSITION_TICKET),

                                          ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) + var_sl * _Point, 0.0);

                    }

                  else

                     if(var_usar_stops == var_usar_tp)

                       {

                        trade.PositionModify(PositionGetInteger(POSITION_TICKET),

                                             0.0, ValorNormalizado(PositionGetDouble(POSITION_PRICE_OPEN)) - var_tp * _Point);

                       }

              }

           }

        }

     }

  }

//+------------------------------------------------------------------+




//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

bool filtro_rsi(string dir)

  {

   if(dir == "compra")

     {

      // Os três

      if(var_modo_filtro == nivel_1 && rsiArray[0] < nivel_inferior_rsi && rsiArray[1] < nivel_inferior_rsi && rsiArray[2] < nivel_inferior_rsi)

        {

         return true;

        }

      // Os dois

      if(var_modo_filtro == nivel_2 && rsiArray[0] < nivel_inferior_rsi && rsiArray[1] < nivel_inferior_rsi)

        {

         return true;

        }

      // Um

      if(var_modo_filtro == nivel_3 && rsiArray[0] < nivel_inferior_rsi && iClose(ativo_renko, PERIOD_CURRENT, 0) == iOpen(ativo_renko, PERIOD_CURRENT, 0))

        {

         return true;

        }

     }

   if(dir == "venda")

     {

      // Os três

      if(var_modo_filtro == nivel_1 && rsiArray[0] > nivel_superior_rsi && rsiArray[1] > nivel_superior_rsi && rsiArray[2] > nivel_superior_rsi)

        {

         return true;

        }

      // Os dois

      if(var_modo_filtro == nivel_2 && rsiArray[0] > nivel_superior_rsi && rsiArray[1] > nivel_superior_rsi)

        {

         return true;

        }

      // Um

      if(var_modo_filtro == nivel_3 && rsiArray[0] > nivel_superior_rsi && iClose(ativo_renko, PERIOD_CURRENT, 0) == iOpen(ativo_renko, PERIOD_CURRENT, 0))

        {

         return true;

        }

     }

   return false;

  }

//+------------------------------------------------------------------+



//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void saida_na_media_central()

  {

// Obter o preço do ativo Renko

   double preco = iClose(ativo_renko, PERIOD_CURRENT, 0);

   for(int i = PositionsTotal() - 1; i >= 0; i--)

     {

      string symbol = PositionGetSymbol(i);

      ulong magic = PositionGetInteger(POSITION_MAGIC);

      if(symbol == ativo_operar && magic == var_numero_magico)

        {

         ulong PositionTicket = PositionGetInteger(POSITION_TICKET);

         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)

           {

            if(preco > var_linha_central[0])

              {

               FecharTodasCompras();

              }

           }

         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)

           {

            if(preco < var_linha_central[0])

              {

               FecharTodasVendas();

              }

           }

        }

     }

  }

//+------------------------------------------------------------------+


Comentários