Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Meus prezados boa tarde!
Penso que esse codigo e o que eu estou precisando para me auxiliar no controle de perdas do meu EA. Porem sou novo nesse mundo da programacao. Sera que alguem pode me auxiliar me ajudando a colar o codigo de forma correta no codigo que eu ja tenho
Boa noite achei muito interessante essa função mas eu não estou conseguindo implantar no meu EA
vc colocou toda a função no escopo global ou no ontick mesmo
me desculpe é que sou iniciante e gostaria muito de colocar um limite de ganho e perca no meu EA
Deu certo amigo, muito bom.
Ainda não verifiquei todos os detalhes de funcionamento, mas funciona legal.
Tornou o robô mais lento na otimização, depois vou tentar simplificar.
Para corrigir tive que acrescentar alguns iguais antes do true e false e tirar as variáveis dos parenteses da função.
Aí só acrescentei a função no ontick para zerar uma variável que autorizava a operação e funcionou bem.Ola a
Ola amigo,
Tentei utilizar seu modelo para criar um Stop Financeiro, mas não está funcionando.
Sou bem leigo de programação e estou tentando fazer meu primeiro robô.
Poderia me passar algumas dicas?
Deu certo amigo, muito bom.
Ainda não verifiquei todos os detalhes de funcionamento, mas funciona legal.
Tornou o robô mais lento na otimização, depois vou tentar simplificar.
Para corrigir tive que acrescentar alguns iguais antes do true e false e tirar as variáveis dos parenteses da função.
Aí só acrescentei a função no ontick para zerar uma variável que autorizava a operação e funcionou bem.
Muito bom o código, estava com o mesmo problema e me ajudou muito este código. parabéns e obrigado.
Deu certo amigo, muito bom.
Ainda não verifiquei todos os detalhes de funcionamento, mas funciona legal.
Tornou o robô mais lento na otimização, depois vou tentar simplificar.
Para corrigir tive que acrescentar alguns iguais antes do true e false e tirar as variáveis dos parenteses da função.
Aí só acrescentei a função no ontick para zerar uma variável que autorizava a operação e funcionou bem.
Muito bom o código, única alteração que fiz para otimizar o funcionamento do robô é verificar a função a cada barra, e coloquei uma chave liga/desliga via enum pra poder escolher se quer usar ou não.
Bom dia!
Criei uma função que retorna se a meta/perda foi alcançada no dia, veja se pode utilizar, faça testes dela! Depois por gentileza de seu feedback principalmente se houver algum erro nela!
Atenciosamente,
DAniel
tmpValorMaximoPerda
Teria que ter um valor negativo no input?
Teria que ter um valor negativo no input?
Bom dia!
Criei uma função que retorna se a meta/perda foi alcançada no dia, veja se pode utilizar, faça testes dela! Depois por gentileza de seu feedback principalmente se houver algum erro nela!
Atenciosamente,
DAniel
Daniel meu amigo, quando compilo a função, aparece a seguinte mensagem "event handling function not found", apenas 1 erros. Como Consigo resolver isso? Outra questão, vi que vc tem bastante sabedoria em mql, esse código abaixo que vou postar, da entradas com alguns parametros, queria saber como adicionar o código acima de atingimento de ganho e perca diaria no que vou postar abaixo: Segue o primeiro código
//+------------------------------------------------------------------+
//| ForexMiniindice.mq5 |
//| Copyright 2022, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Include |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalAC.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Inputs |
//+------------------------------------------------------------------+
//--- inputs for expert
input string Expert_Title ="MINIINDICEEXPERTSROBO"; // Document name
ulong Expert_MagicNumber =6841; //
bool Expert_EveryTick =false; //
//--- inputs for main signal
input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100]
input int Signal_ThresholdClose=10; // Signal threshold value to close [0...100]
input double Signal_PriceLevel =0.0; // Price level to execute a deal
input double Signal_StopLevel =50.0; // Stop Loss level (in points)
input double Signal_TakeLevel =50.0; // Take Profit level (in points)
input int Signal_Expiration =4; // Expiration of pending orders (inq aí bars)
input double Signal_AC_Weight =1.0; // Accelerator Oscillator Weight [0...1.0]
//--- inputs for money
input double Money_FixLot_Percent =10.0; // Percent
input double Money_FixLot_Lots =0.1; // Fixed volume
//+------------------------------------------------------------------+
//| Global expert object |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Initializing expert
if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
{
//--- failed
printf(__FUNCTION__+": error initializing expert");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Creating signal
CExpertSignal *signal=new CExpertSignal;
if(signal==NULL)
{
//--- failed
printf(__FUNCTION__+": error creating signal");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//---
ExtExpert.InitSignal(signal);
signal.ThresholdOpen(Signal_ThresholdOpen);
signal.ThresholdClose(Signal_ThresholdClose);
signal.PriceLevel(Signal_PriceLevel);
signal.StopLevel(Signal_StopLevel);
signal.TakeLevel(Signal_TakeLevel);
signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalAC
CSignalAC *filter0=new CSignalAC;
if(filter0==NULL)
{
//--- failed
printf(__FUNCTION__+": error creating filter0");
ExtExpert.Deinit();
return(INIT_FAILED);
}
signal.AddFilter(filter0);
//--- Set filter parameters
filter0.Weight(Signal_AC_Weight);
//--- Creation of trailing object
CTrailingNone *trailing=new CTrailingNone;
if(trailing==NULL)
{
//--- failed
printf(__FUNCTION__+": error creating trailing");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Add trailing to expert (will be deleted automatically))
if(!ExtExpert.InitTrailing(trailing))
{
//--- failed
printf(__FUNCTION__+": error initializing trailing");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Set trailing parameters
//--- Creation of money object
CMoneyFixedLot *money=new CMoneyFixedLot;
if(money==NULL)
{
//--- failed
printf(__FUNCTION__+": error creating money");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Add money to expert (will be deleted automatically))
if(!ExtExpert.InitMoney(money))
{
//--- failed
printf(__FUNCTION__+": error initializing money");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Set money parameters
money.Percent(Money_FixLot_Percent);
money.Lots(Money_FixLot_Lots);
//--- Check all trading objects parameters
if(!ExtExpert.ValidationSettings())
{
//--- failed
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Tuning of all necessary indicators
if(!ExtExpert.InitIndicators())
{
//--- failed
printf(__FUNCTION__+": error initializing indicators");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- ok
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Deinitialization function of the expert |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ExtExpert.Deinit();
}
//+------------------------------------------------------------------+
//| "Tick" event handler function |
//+------------------------------------------------------------------+
void OnTick()
{
ExtExpert.OnTick();
}
//+------------------------------------------------------------------+
//| "Trade" event handler function |
//+------------------------------------------------------------------+
void OnTrade()
{
ExtExpert.OnTrade();
}
//+------------------------------------------------------------------+
//| "Timer" event handler function |
//+------------------------------------------------------------------+
void OnTimer()
{
ExtExpert.OnTimer();
}
//+------------------------------------------------------------------+
--- SEGUNDO CÓDIGO DESCRITO ACIMA AQUI NO FÓRUM
bool funcao_verifica_meta_ou_perda_atingida(string tmpOrigem, double tmpValorMaximoPerda, double tmpValor_Maximo_Ganho, bool tmp_placar)
{
//tmpOrigem = comentario de qual local EA foi chamado a função
//tmpValorMaximoPerda = valor máximo desejado como perda máxima
//tmpValor_Maximo_Ganho = valor estipulado de meta do dia
//tmp_placar = true exibe no comment o resultado das negociações do dia
Print("Pesquisa funcao_verifica_meta_ou_perda_atingida (" + tmpOrigem + ")");
string tmp_x;
double tmp_resultado_financeiro_dia;
int tmp_contador;
MqlDateTime tmp_data_b;
TimeCurrent(tmp_data_b);
tmp_resultado_financeiro_dia = 0;
tmp_x = string(tmp_data_b.year) + "." + string(tmp_data_b.mon) + "." + string(tmp_data_b.day) + " 00:00:01";
HistorySelect(StringToTime(tmp_x),TimeCurrent());
int tmp_total=HistoryDealsTotal();
ulong tmp_ticket=0;
double tmp_price;
double tmp_profit;
datetime tmp_time;
string tmp_symboll;
long tmp_typee;
long tmp_entry;
//--- para todos os negócios
for(tmp_contador=0;tmp_contador<tmp_total;tmp_contador++)
{
//--- tentar obter ticket negócios
if((tmp_ticket=HistoryDealGetTicket(tmp_contador))>0)
{
//--- obter as propriedades negócios
tmp_price =HistoryDealGetDouble(tmp_ticket,DEAL_PRICE);
tmp_time =(datetime)HistoryDealGetInteger(tmp_ticket,DEAL_TIME);
tmp_symboll=HistoryDealGetString(tmp_ticket,DEAL_SYMBOL);
tmp_typee =HistoryDealGetInteger(tmp_ticket,DEAL_TYPE);
tmp_entry =HistoryDealGetInteger(tmp_ticket,DEAL_ENTRY);
tmp_profit=HistoryDealGetDouble(tmp_ticket,DEAL_PROFIT);
//--- apenas para o símbolo atual
if(tmp_symboll==Symbol()) tmp_resultado_financeiro_dia = tmp_resultado_financeiro_dia + tmp_profit;
}
}
if (tmp_resultado_financeiro_dia == 0)
{
if (tmp_placar = true) Comment("Placar 0x0");
return(false); //sem ordens no dia
}
else
{
if ((tmp_resultado_financeiro_dia > 0) && (tmp_resultado_financeiro_dia != 0))
{
if (tmp_placar = true) Comment("Lucro R$" + DoubleToString(NormalizeDouble(tmp_resultado_financeiro_dia, 2),2) );
}
else
{
if (tmp_placar = true) Comment("Prejuizo R$" + DoubleToString(NormalizeDouble(tmp_resultado_financeiro_dia, 2),2));
}
if (tmp_resultado_financeiro_dia < tmpValorMaximoPerda)
{
Print("Perda máxima alcançada.");
return(true);
}
else
{
if (tmp_resultado_financeiro_dia > tmpValor_Maximo_Ganho)
{
Print("Meta Batida.");
return(true);
}
}
}
return(false);
}
;
---------TEM ESSE SEGUNDO CÓDIGO TAMBEM CASO SEJA MAIS FACIL:
bool atingiuGanhoMax(double lucro, double ganho)
{
bool resp = false;
if(lucro >= ganho)
{
resp = true;
}
return resp;
}
void OnStart()
{
//---
double ganhoMax = 2000; // Diario
double perdaMax = 1500; // Diario
double lucro = -3800; /// PositionGetDouble(POSITION_PROFIT)
if(atingiuGanhoMax(lucro,ganhoMax))
{
Print(":: Atingimos a meta do dia!");
}
}
//++------------------------------+
PUDEREM ME AJUDAR, FAZEMOS ESSA TROCA.