Paulo Cesar Soares Filho
Paulo Cesar Soares Filho
  • Informações
2 anos
experiência
0
produtos
0
versão demo
0
trabalhos
0
sinais
0
assinantes
Paulo Cesar Soares Filho
Paulo Cesar Soares Filho
MEUS amigos, 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

//--- available signals

#include

//--- available trailing

#include

//--- available money management

#include

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

//| 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
{

//--- 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.
Paulo Cesar Soares Filho
Paulo Cesar Soares Filho
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

//--- available signals

#include

//--- available trailing

#include

//--- available money management

#include

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

//| 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
{

//--- 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.
Paulo Cesar Soares Filho
Registrado no site MQL5.community