287 lines
22 KiB
MQL5
287 lines
22 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| Fiat147Oggi-WINFUT.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 WINV24
|
|
* 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
|
|
* WINJ24 => J Abril
|
|
* WINM24 => M Junho
|
|
* WINQ24 => Q Agosto
|
|
* WINV24 => V Outubro
|
|
* WINZ24 => 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) {}
|
|
//+------------------------------------------------------------------+
|