//+------------------------------------------------------------------+ //| Fiat147Oggi-WINQ24.mq5 | //| Copyright 2024, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ /***************************************** * robo Fiat147Oggi para Clear Bovespa WINFUT * * este eh o primeiro robo nosso criado para ser executado em conta demo da clear * que possue 6 estrategias prontas do codigo de exemplo do MT5 que testamos * e teve um resultado razoavel no backtest e estao parametrizados na planilha; * entao com base nos testes realizados estamos agora criando este robo Fiat147 * justamente com este nome por ser o primeiro, o piloto, para que possamos * codar/executar/testar/observar/melhorar * * * * * ############################ * #lista de debitos tecnicos # * ############################ * #okey * 1)precisa criar funcao para centralizar as mensagens durante a * operacao do robo tais como: * Print(""); * Message(""); * Alert(""); * * * #okey * 2)precisa criar uma function para gerenciamento dos horarios do intraday * HorarioBovespaLibs.mqh * * * #okey * 3)aplicar estrategias nas FiatHeaderLibs * DarkCloudPiercingLineRSI => done * DarkCloudPiercingLineCCI => done * BullishBearishEngulfingStoch => done * BullishBearishEngulfingRSI => done * BullishBearishEngulfingMFI => done * BullishBearishEngulfingCCI => done * * * #okey * 4)* #colocar nos comentarios nas boletagens .buy && .sell * , "DarkCloudPiercingLine-RSI" * * * 5)classe de gerenciamento de conta * precisamos de uma classe para gerenciamento da conta no intraday * ela sera responsavel em gerenciar as perdas, caso passe de um valor x * esta classe nao deixa mais operar naquela dia, simples assim; * * * 6)classe de gerenciamento de lotes * este eh um tipo de gerenciamento mais complexo que agente viu num robo fantastico: * #Alien Titan * https://www.mql5.com/pt/market/product/118462?source=Site+Market+MT5+Expert+Paid+Search+Rating006%3aalien#description * * eh um robo sensacional, ja testei algumas vezes, ele parece que nunca perde, impressionante * tem um gerenciamento fudido de lotes que vai aumentando conforme o valor da conta * tambem vai aumentando ele calcula qual o tamanho de lote seria proporcional ao valor da * conta naquele momento da abertura da boletagem; * quero criar uma classe que tenha comportamento semelhante, que se caso tb o inversamente * proporcional acontecer ele possa tb reduzir o tamanho do lote nas proximas boletadas; * * * 7)cenario de testes com TP/SL * precisamos fazer alguns cenarios de testes para verificar se temos * alguns cenarios nao que sejam mais lucrativos, mas que nos faça perder menos * que seja conservador; * depois que este robo estiver pronto precisamos fazer estes seguintes cenarios * de teste: * 7.1)rodar este robo ultilizando o TP para: * tp=250 * tp=300 * tp=350 * tp=400 * depois mudando o sl: * sl=100 * sl=150 * sl=200 * sl=250 * sl=300 * * * 8)segregar cada estrategia independente * temos um outro debito tecnico q eh o seguinte, neste robo temos executando * ao mesmo tempo 6 estategias distintas, porem cada uma dela tem o seu proprio * ExpertID, a duvida eh, atualmente todos estao com um ExpertID unico, vamos * realizar uma refatoraca opara deixar cada um com o seu? * a importancia d cada um ter o seu proprio ExpertID eh pq existe um mecanismo de * fechar boleta, pode acontecer de um "if" de uma estrategia fechar a boletagem * de outra estategia q ja esta em andamento; * //--- Expert ID * input long InpMagicNumber=120500; // Magic Number * *obs: * se agente for seguir com esta ideia, melhor criar uma versao nova deste robo * pq esta ideia ja ia mudar muito na estrutura que esta ja esta pronta; * * * 9)display no chart * precisamos pesquisar como colocar um display no chart com as informacoes * do andamento do robo o que esta acontecendo no momento, podemos fazer * na mao um basico e depois ir melhorando ou pegar um exemplo de um jah pronto * e refatorar para ir ultilizando; * * * 10)debugger * estamos ah uma semana executando este robozinho e ja tivemos que realizar * mudanças em pleno voo porque tivemos grandes perdas por conta do * nossa conta ser pequena o robo teve um drawdown mt grande, entao mudamos * a alavancagem de 2 contratos para 1 contato; * * 10.1)problema de encerrar trade: * ate ai td bem porem eu estou percebendo que em algum momento ele esta encerrando * as operacoes no meio da execucao, precisamos procurar no codigo onde ele faz * isto e tentar entender o motivo pelo qual ele faz isto; * * 10.2)as variaveis: * eu tenho uma certa desconfiança que pelo fato de ele estar ultilizando as mesmas * variaveis para as 6 estrategias ao mesmo tempo pode ser q em algum momento * ele esteja tendo uma leitura errada, agente precisa reler o codigo para * ver de isto mesmo pode estar ocorrendo ou ateh mesmo realizar uma depuração * linha ~ linha para ver se em algum momento ele esta se atrapalhando; * * * 11)vencimento e rolagem do contrato mini-indice * giro de contrato bimensal este contrato eh referente ao WINQ24 * precisamos criar um mecanismo automatizado onde ele ja calcula * e faz o giro para trabalhar no novo contrato vigente, ou ele ja * manda uma mensagem lah no chart para avisar q este contrato esta * proximo a data de vencimento e tb um mecanismo onde ele nao deixa * abrir ordens quando a data esta proxima demais do fechamento; * Cada contrato tem sua data de vencimento específica e um código * condicionado a esse fator. * O vencimento do mini-índice acontece na quarta-feira mais * próxima do dia 15 do mês de vencimento, no qual os meses são * necessariamente pares. * Quanto ao código de negociação, o mini-índice opera pelo código WIN, * enquanto o contrato cheio opera pelo código IND. * * WING24 => G Fevereiro * WING24 => J Abril * WING24 => M Junho * WING24 => Q Agosto * WING24 => V Outubro * WING24 => Z Dezembro * * */ #include #include #include #include #include #include #include #include #include #include //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- create timer EventSetTimer(60); initMsgChart(); return( OnInitDarkCloudPiercingLineRSI() || OnInitDarkCloudPiercingLineCCI() || OnInitBullishBearishEngulfingRSI() || OnInitBullishBearishEngulfingMFI() || OnInitBullishBearishEngulfingCCI() || OnInitBullishBearishEngulfingStoch() ); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer //EventKillTimer(); IndicatorRelease(ExtIndicatorHandle); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(validaBoletasIntraday()) { OnTickDarkCloudPiercingLineRSI(); OnTickDarkCloudPiercingLineCCI(); OnTickBullishBearishEngulfingRSI(); OnTickBullishBearishEngulfingMFI(); OnTickBullishBearishEngulfingCCI(); OnTickBullishBearishEngulfingStoch(); } } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() {} //+------------------------------------------------------------------+ //| Trade function | //+------------------------------------------------------------------+ void OnTrade() {} //+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) {} //+------------------------------------------------------------------+ //| Tester function | //+------------------------------------------------------------------+ double OnTester() { double ret=0.0; return(ret); } //+------------------------------------------------------------------+ //| TesterInit function | //+------------------------------------------------------------------+ void OnTesterInit() {} //+------------------------------------------------------------------+ //| TesterPass function | //+------------------------------------------------------------------+ void OnTesterPass() {} //+------------------------------------------------------------------+ //| TesterDeinit function | //+------------------------------------------------------------------+ void OnTesterDeinit() {} //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) {} //+------------------------------------------------------------------+ //| BookEvent function | //+------------------------------------------------------------------+ void OnBookEvent(const string &symbol) {} //+------------------------------------------------------------------+