This repository has been archived on 2026-01-19. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
Fiat147Oggi-WINQ24/Fiat147Oggi-WINQ24.mq5
2026-01-19 20:24:08 -03:00

289 lines
22 KiB
MQL5

//+------------------------------------------------------------------+
//| 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 <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <FiatHeaderLibs\FiatLibs.mqh>
#include <FiatHeaderLibs\HorarioBovespaLibs.mqh>
#include <FiatHeaderLibs\DarkCloudPiercingLineRSI.mqh>
#include <FiatHeaderLibs\DarkCloudPiercingLineCCI.mqh>
#include <FiatHeaderLibs\BullishBearishEngulfingStoch.mqh>
#include <FiatHeaderLibs\BullishBearishEngulfingRSI.mqh>
#include <FiatHeaderLibs\BullishBearishEngulfingMFI.mqh>
#include <FiatHeaderLibs\BullishBearishEngulfingCCI.mqh>
//+------------------------------------------------------------------+
//| 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) {}
//+------------------------------------------------------------------+