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
Postar um comentário