SuperCharlie_Oxford/Producao_v4_3/S4_Cambio_v4_3.mqh
super.admin 513958a1f2 convert
2025-05-30 16:27:23 +02:00

187 lines
No EOL
17 KiB
MQL5

//+------------------------------------------------------------------+
//| S4_Cambio_v4_3.mq5 |
//| OXFORD |
//| HEDGING HORN CAPITAL |
//| https://www.hhcapital.com.br |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, HEDGING HORN CAPITAL"
#property link "https://www.hhcapital.com.br"
#property version "PROD_v4_3"
#property description "HFT MARKET MAKING BASED ON OXFORD'S STUDIES. MINI INDICE."
//+===================================================================================================================================================================================+
//| 0 - SESSAO DE CABECALHO / ADMISSAO
//+===================================================================================================================================================================================+
//+------------------------------------------------------------------+
//| 0.1 - IMPORTACOES |
//+------------------------------------------------------------------+
#include "S0_Admissao_v4_3.mqh"
//0 == Nada
//1 == Ordens
//1.1 == Enviar
//1.2 == Modificar
//1.3 == Cancelar -> 0 == Nada
//2 == Posicoes
//2.1 == Modificar
//2.2 == Cancelar -> 0 == Nada
//2.3 == Encerrada -> 0 == Nada
//3 == Reset
//3.1 == Cancelar Ordens -> 0 == Nada
//3.2 == Cancelar Posicoes -> 0 == Nada
//3.3 == Posicoes Encerradas -> 0 == Nada
//+===================================================================================================================================================================================+
//| 4 - SESSAO DE QUANTIDADES / CAMBIO
//+===================================================================================================================================================================================+
//+------------------------------------------------------------------+
//| 4.1 - FUNCAO QUE TROCA STATUS DOS SLOTS |
//+------------------------------------------------------------------+
void TrocaMarcha(operacao &Operacao, fluido &Fluidos, slot &Slots[])
{
OrderSelect(Slots[Fluidos.iSlot].idOrdem);
// if(OrderGetInteger(ORDER_POSITION_ID) != 0)
// {
// //isso eh uma posicao
// PositionSelect(OrderGetInteger(ORDER_POSITION_ID));
// Print("Isso é uma posicao");
// //inicializa o cronometro de uma posicao
// TimeToStruct(PositionGetInteger(POSITION_TIME), Slots[Fluidos.iSlot].cronometro);
//
// Slots[Fluidos.iSlot].idPosicao = PositionGetInteger(POSITION_TICKET);
// if(Slots[Fluidos.iSlot].idPosicao != 0)
// {
// if(Fluidos.q > 2*Fluidos.rajada || Fluidos.q < (-2 * Fluidos.rajada)) //|| Lambda > 20
// {
// Slots[Fluidos.iSlot].statusCambio = 2;
// Slots[Fluidos.iSlot].statusMotor = 4;
// }
// else if(CalculaExpiraPosicao(Operacao, Fluidos, Slots) == true)
// {
// Slots[Fluidos.iSlot].statusCambio = 2;
// Slots[Fluidos.iSlot].statusMotor = 5;
// }
// }
// else
// {
// Slots[Fluidos.iSlot].statusCambio = 0;
// Slots[Fluidos.iSlot].statusMotor = 0;
// }
// }
// else
// {
//isso eh uma ordem
if(OrderGetInteger(ORDER_STATE) == ORDER_STATE_PLACED)
{
////ja enviou
//if(Fluidos.q > 3*Fluidos.rajada || Fluidos.q < (-3 * Fluidos.rajada)) //|| Lambda > 20
//{
// if(CalculaOffsetModificaOrdem(Operacao, Fluidos, Slots) == true)
// {
// Slots[Fluidos.iSlot].statusCambio = 1;
// Slots[Fluidos.iSlot].statusMotor = 2;
// }
// else
// {
// Slots[Fluidos.iSlot].statusCambio = 1;
// Slots[Fluidos.iSlot].statusMotor = 0;
// }
//}
//else
if(CalculaExpiraOrdem(Operacao, Fluidos, Slots) == true)
{
Slots[Fluidos.iSlot].statusCambio = 1;
Slots[Fluidos.iSlot].statusMotor = 3;
}
}
else
{
//nao enviou
Slots[Fluidos.iSlot].statusCambio = 1;
Slots[Fluidos.iSlot].statusMotor = 1;
}
// }
return;
}
//+------------------------------------------------------------------+
//| 4.2 - FUNCAO QUE CALCULA A QUANTIDADE A SER ENVIADA |
//+------------------------------------------------------------------+
int CalculaQuantidade(fluido &Fluidos, slot &Slots[])
{
int retorno = 0;
Slots[Fluidos.iSlot].qtd = Fluidos.rajada;
return retorno;
}
//+------------------------------------------------------------------+
//| 4.5 - FUNCAO QUE CALCULA TEMPO DE EXPIRACAO DE SLOTS |
//+------------------------------------------------------------------+
bool CalculaExpiraOrdem(operacao &Operacao, fluido &Fluidos, slot &Slots[])
{
ushort horarioOrdem = 0;
ushort horarioShortAtual = 0;
//Captura o horario atual e coloca em Struct MqlDateTime
TimeToStruct(TimeCurrent(), Operacao.horarioMQL_atual);
horarioOrdem = Slots[Fluidos.iSlot].cronometro.hour*60*60 + Slots[Fluidos.iSlot].cronometro.min*60 + Slots[Fluidos.iSlot].cronometro.sec;
horarioShortAtual = Operacao.horarioMQL_atual.hour*60*60 + Operacao.horarioMQL_atual.min*60 + Operacao.horarioMQL_atual.sec;
//Verifica se esta dentro da sessao de trade do dia
if((horarioShortAtual - horarioOrdem) > Fluidos.TOe)
{
return true;
}
else return false;
}
//+------------------------------------------------------------------+
//| 4.5 - FUNCAO QUE CALCULA TEMPO DE EXPIRACAO DE SLOTS |
//+------------------------------------------------------------------+
bool CalculaOffsetModificaOrdem(operacao &Operacao, fluido &Fluidos, slot &Slots[])
{
int horarioOrdem = 0;
int horarioShortAtual = 0;
//Captura o horario atual e coloca em Struct MqlDateTime
TimeToStruct(TimeCurrent(), Operacao.horarioMQL_atual);
horarioOrdem = Slots[Fluidos.iSlot].cronometro.hour*60*60 + Slots[Fluidos.iSlot].cronometro.min*60 + Slots[Fluidos.iSlot].cronometro.sec;
horarioShortAtual = Operacao.horarioMQL_atual.hour*60*60 + Operacao.horarioMQL_atual.min*60 + Operacao.horarioMQL_atual.sec;
//Verifica se esta dentro da sessao de trade do dia
if((horarioShortAtual - horarioOrdem) > Fluidos.TOe)
{
return true;
}
else return false;
}
//+------------------------------------------------------------------+
//| 4.5 - FUNCAO QUE CALCULA TEMPO DE EXPIRACAO DE SLOTS |
//+------------------------------------------------------------------+
bool CalculaExpiraPosicao(operacao &Operacao, fluido &Fluidos, slot &Slots[])
{
ushort horarioOrdem = 0;
ushort horarioShortAtual = 0;
//Captura o horario atual e coloca em Struct MqlDateTime
TimeToStruct(TimeCurrent(), Operacao.horarioMQL_atual);
horarioOrdem = Slots[Fluidos.iSlot].cronometro.hour *60*60 + Slots[Fluidos.iSlot].cronometro.min*60 + Slots[Fluidos.iSlot].cronometro.sec;
horarioShortAtual = Operacao.horarioMQL_atual.hour *60*60 + Operacao.horarioMQL_atual.min*60 + Operacao.horarioMQL_atual.sec;
//Verifica se esta dentro da sessao de trade do dia
if((horarioShortAtual - horarioOrdem) > Fluidos.TPe)
{
return true;
}
else return false;
}
//+===================================================================================================================================================================================+
//| FIM DO PROGRAMA
//+===================================================================================================================================================================================+