//+------------------------------------------------------------------+ //| S2_Motor_v1_0.mqh | //| DELTA | //| HEDGING HORN CAPITAL | //| https://www.hhcapital.com.br | //+------------------------------------------------------------------+ #property copyright "Copyright 2023, HEDGING HORN CAPITAL" #property link "https://www.hhcapítal.com.br" #property version "DELTA HOMOLOGACAO v1_0" #property description "HFT MARKET MAKING. MINI INDICE." //+===================================================================================================================================================================================+ //| 0 - SESSAO DE CABECALHO / ADMISSAO //+===================================================================================================================================================================================+ //+------------------------------------------------------------------+ //| 0.1 - IMPORTACOES | //+------------------------------------------------------------------+ #include #include #include #include "MarketBook.mqh" #include "S0_Admissao_v1_0.mqh" #include "S3_Freios_v1_0.mqh" #include "S4_Cambio_v1_0.mqh" #include "S5_Direcao_v1_0.mqh" #include "S6_Transmissao_v1_0.mqh" //+===================================================================================================================================================================================+ //| 2 - SESSAO DE FAZER NEGOCIACOES / MOTOR //+===================================================================================================================================================================================+ //+------------------------------------------------------------------+ //| 2.1 - FUNCAO QUE FAZ NEGOCIACOES | //+------------------------------------------------------------------+ void FazTrades(gerenciador &Gerenciador, operacao &Operacao, fluido &Fluidos, slot &SlotsC[], slot &SlotsV[]) { AtualizaOrdens(Operacao, Fluidos); ExecutaSlotsDisponiveis(); AtualizaTelemetria(Gerenciador, Operacao, Fluidos, SlotsC, SlotsV); Operacao.countFechaDia == 0; return; } //+------------------------------------------------------------------+ //| 2.2 - FUNCAO QUE ATUALIZA ORDENS | //+------------------------------------------------------------------+ void AtualizaOrdens(operacao &Operacao, fluido &Fluidos) { ulong ticket = 0; MqlDateTime horarioMQL_ordem; for(int i=OrdersTotal()-1;i>=0;i--) { ticket = OrderGetTicket(i); ushort horarioOrdem = 0; ushort horarioShortAtual = 0; OrderSelect(ticket); double tamanho = OrderGetDouble(ORDER_VOLUME_INITIAL); TimeToStruct(TimeCurrent(), Operacao.horarioMQL_atual); TimeToStruct(OrderGetInteger(ORDER_TIME_SETUP), horarioMQL_ordem); horarioOrdem = horarioMQL_ordem.hour*60*60 + horarioMQL_ordem.min*60 + horarioMQL_ordem.sec; horarioShortAtual = Operacao.horarioMQL_atual.hour*60*60 + Operacao.horarioMQL_atual.min*60 + Operacao.horarioMQL_atual.sec; // Print("horarioAtual: ", horarioShortAtual, " horarioOrdem: ", horarioOrdem, " Fluidos.lifetime: ", Fluidos.lifetimeOrdem); if((horarioShortAtual - horarioOrdem) > Fluidos.TOr) { bool retCancelou = Operacao.negocio.OrderDelete(ticket); if(retCancelou == true) Operacao.numeroContratos = Operacao.numeroContratos - tamanho; // Print("Cancelou ordem aberta por expiração."); } } } //+------------------------------------------------------------------+ //| 2.3 - FUNCAO QUE ATUALIZA E EXECUTA OS SLOTS DISPONVEIS DE ORDENS| //+------------------------------------------------------------------+ void ExecutaSlotsDisponiveis() { //Avanca os status dos slots for(int i=0; i last) { VendaLimite(Operacao, SlotsV, i); // Print("Mandou ordem de venda limite."); if(Operacao.result.retcode == 10009) { //Avanca o status do slot para enviado //SlotsV[i].idOrdem = Operacao.result.order; OrderSelect(SlotsV[i].idOrdem); TimeToStruct(TimeCurrent(), SlotsV[i].cronometro); } else { SlotsV[i].statusCambio = 0; SlotsV[i].statusMotor = 0; } } break; case 3 : CancelaOrdemAberta(Operacao, SlotsV[i].idOrdem); // Print("Cancelou ordem de compra limite."); break; default : break; } } //+------------------------------------------------------------------+ //| 2.6 - FUNCAO QUE CALCULA O TEMPO LIMITE DE EXPIRACAO DE ORDEM C | //+------------------------------------------------------------------+ int CalculaTempoExpiraOrdemCompra(operacao &Operacao, fluido &Fluidos, int depth) { int tempo = 0; tempo = 60; return tempo; } //+------------------------------------------------------------------+ //| 2.7 - FUNCAO QUE CALCULA O TEMPO LIMITE DE EXPIRACAO DE ORDEM V | //+------------------------------------------------------------------+ int CalculaTempoExpiraOrdemVenda(operacao &Operacao, fluido &Fluidos, int depth) { int tempo = 0; tempo = 60; return tempo; } //+------------------------------------------------------------------+ //| 2.8 - FUNCAO QUE ATUALIZA TELEMETRIA | //+------------------------------------------------------------------+ void AtualizaTelemetria(gerenciador &Gerenciador, operacao &Operacao, fluido &Fluidos, slot &SlotsC[], slot &SlotsV[]) { //ATUALIZA TELEMETRIA Comment( "===GERENCIAMENTO P&L===", "\n" + "CAPITAL BRUTO FECHADO: ", Gerenciador.capitalFechado, "\n" + "CAPITAL BRUTO ABERTO: ", Gerenciador.capitalAberto, "\n" + "LUCRO BRUTO FECHADO: ", Gerenciador.lucroBrutoFechado, "\n" + "LUCRO BRUTO ABERTO: ", Gerenciador.lucroBrutoAberto, "\n" + "LUCRO BRUTO COMPOSTO: ", Gerenciador.lucroBrutoComposto, "\n" + "LUCRO LIQUIDO: ", Gerenciador.lucroLiquido, "\n" + "NUMERO DE CONTRATOS (compra+venda): ", Operacao.numeroContratos - (2*(Fluidos.rajada*Fluidos.niveis)), "\n" + "CUSTO: ", (Operacao.numeroContratos - (2*Fluidos.rajada*Fluidos.niveis)) * (Fluidos.c * 2), "\n" + "INVENTARIO: ", Fluidos.q); // Print(NormalizeDouble(Fluidos.media,0),"/",SlotsC[0].spreadEnvio,"/",SlotsC[0].spreadAlvo,"/",SlotsV[0].spreadEnvio,"/",SlotsV[0].spreadAlvo,"/",Gerenciador.lucroBrutoComposto); return; } //+===================================================================================================================================================================================+ //| FIM DO PROGRAMA //+===================================================================================================================================================================================+