187 lines
No EOL
17 KiB
MQL5
187 lines
No EOL
17 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| S4_Cambio_v4_4.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 "DESENV_v4_4"
|
|
#property description "HFT MARKET MAKING BASED ON OXFORD'S STUDIES. MINI INDICE."
|
|
|
|
//+===================================================================================================================================================================================+
|
|
//| 0 - SESSAO DE CABECALHO / ADMISSAO
|
|
//+===================================================================================================================================================================================+
|
|
//+------------------------------------------------------------------+
|
|
//| 0.1 - IMPORTACOES |
|
|
//+------------------------------------------------------------------+
|
|
#include "S0_Admissao_v4_4.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
|
|
//+===================================================================================================================================================================================+ |