hedgeDelta/Producao_v1/S5_Direcao_v1_0.mqh

135 lines
15 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 14:58:48 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| S5_Direcao_v1_0.mqh |
//| DELTA |
//| HEDGING HORN CAPITAL |
//| https://www.hhcapital.com.br |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, HEDGING HORN CAPITAL"
#property link "https://www.hhcapital.com.br"
#property version "DELTA PRODUCAO v1_0"
#property description "HFT MARKET MAKING. MINI INDICE."
//+===================================================================================================================================================================================+
//| 0 - SESSAO DE CABECALHO / ADMISSAO
//+===================================================================================================================================================================================+
//+------------------------------------------------------------------+
//| 0.1 - IMPORTACOES |
//+------------------------------------------------------------------+
#include "MarketBook.mqh"
#include "S0_Admissao_v1_0.mqh"
//+===================================================================================================================================================================================+
//| 5 - SESSAO DE PRECOS / DIRECAO
//+===================================================================================================================================================================================+
//+------------------------------------------------------------------+
//| 5.1 - FUNCAO QUE DA GET NOS SPREADS E SET NOS PRECOS DA ORDEM |
//+------------------------------------------------------------------+
void CalculaPrecoOrdem(operacao &Operacao, fluido &Fluidos, slot &Slots[])
{
//Calcula os spreads
if(Slots[0].ponta == 0)
{
CalculaSpreadOrdemC(Operacao, Fluidos, Slots);
SetPrecosOrdemCompra(Operacao, Fluidos, Slots);
}
else
{
CalculaSpreadOrdemV(Operacao, Fluidos, Slots);
SetPrecosOrdemVenda(Operacao, Fluidos, Slots);
}
return;
}
//+------------------------------------------------------------------+
//| 5.2 - FUNCAO QUE CALCULA OS SPREADS DA ORDEM DE COMPRA |
//+------------------------------------------------------------------+
void CalculaSpreadOrdemC(operacao &Operacao, fluido &Fluidos, slot &SlotsC[])
{
double nivel = Fluidos.iSlot + 1;
double desvio = Fluidos.desvioPercent;
SlotsC[Fluidos.iSlot].spreadEnvio = MathRound( ((Fluidos.media * Fluidos.spreadOffsetPercent) + (Fluidos.media * Fluidos.desvioPercent * nivel)) / Fluidos.tickMin) * Fluidos.tickMin;
SlotsC[Fluidos.iSlot].spreadAlvo = Fluidos.pontosAlvo;
SlotsC[Fluidos.iSlot].spreadStop = MathRound( (Fluidos.media * Fluidos.stopPercent) / Fluidos.tickMin) * Fluidos.tickMin;
return;
}
//+------------------------------------------------------------------+
//| 5.3 - FUNCAO QUE CALCULA OS SPREADS DA ORDEM DE VENDA |
//+------------------------------------------------------------------+
void CalculaSpreadOrdemV(operacao &Operacao, fluido &Fluidos, slot &SlotsV[])
{
double nivel = Fluidos.iSlot + 1;
double desvio = Fluidos.desvioPercent;
SlotsV[Fluidos.iSlot].spreadEnvio = MathRound( ((Fluidos.media * Fluidos.spreadOffsetPercent) + (Fluidos.media * Fluidos.desvioPercent * nivel)) / Fluidos.tickMin) * Fluidos.tickMin;
SlotsV[Fluidos.iSlot].spreadAlvo = Fluidos.pontosAlvo;
SlotsV[Fluidos.iSlot].spreadStop = MathRound( (Fluidos.media * Fluidos.stopPercent) / Fluidos.tickMin) * Fluidos.tickMin;
return;
}
//+------------------------------------------------------------------+
//| 5.4 - FUNCAO QUE DA SET NOS PRECOS DA ORDEM DE COMPRA |
//+------------------------------------------------------------------+
void SetPrecosOrdemCompra(operacao &Operacao, fluido &Fluidos, slot &SlotsC[])
{
//SET PRECO ENVIO
SlotsC[Fluidos.iSlot].precoEnvio = Fluidos.media - SlotsC[Fluidos.iSlot].spreadEnvio;
if(MathMod(SlotsC[Fluidos.iSlot].precoEnvio, Fluidos.tickMin) != 0)
{
SlotsC[Fluidos.iSlot].precoEnvio = SlotsC[Fluidos.iSlot].precoEnvio - MathMod(SlotsC[Fluidos.iSlot].precoEnvio, Fluidos.tickMin);
}
//SET PRECO ALVO
SlotsC[Fluidos.iSlot].precoAlvo = SlotsC[Fluidos.iSlot].precoEnvio + SlotsC[Fluidos.iSlot].spreadAlvo;
if(MathMod(SlotsC[Fluidos.iSlot].precoAlvo, Fluidos.tickMin) != 0)
{
SlotsC[Fluidos.iSlot].precoAlvo = SlotsC[Fluidos.iSlot].precoAlvo - MathMod(SlotsC[Fluidos.iSlot].precoAlvo, Fluidos.tickMin);
}
//SET PRECO STOP
SlotsC[Fluidos.iSlot].precoStop = (MathRound(Fluidos.media/Fluidos.tickMin) * Fluidos.tickMin) - SlotsC[Fluidos.iSlot].spreadStop;
if(MathMod(SlotsC[Fluidos.iSlot].precoStop, Fluidos.tickMin) != 0)
{
SlotsC[Fluidos.iSlot].precoStop = SlotsC[Fluidos.iSlot].precoStop - MathMod(SlotsC[Fluidos.iSlot].precoStop, Fluidos.tickMin);
}
}
//+------------------------------------------------------------------+
//| 5.5 - FUNCAO QUE DA SET NOS PRECOS DA ORDEM DE VENDA |
//+------------------------------------------------------------------+
void SetPrecosOrdemVenda(operacao &Operacao, fluido &Fluidos, slot &SlotsV[])
{
//SET PRECO ENVIO
SlotsV[Fluidos.iSlot].precoEnvio = Fluidos.media + SlotsV[Fluidos.iSlot].spreadEnvio;
if(MathMod(SlotsV[Fluidos.iSlot].precoEnvio, Fluidos.tickMin) != 0)
{
SlotsV[Fluidos.iSlot].precoEnvio = SlotsV[Fluidos.iSlot].precoEnvio + (Fluidos.tickMin - MathMod(SlotsV[Fluidos.iSlot].precoEnvio, Fluidos.tickMin));
}
//SET PRECO ALVO
SlotsV[Fluidos.iSlot].precoAlvo = SlotsV[Fluidos.iSlot].precoEnvio - SlotsV[Fluidos.iSlot].spreadAlvo;
if(MathMod(SlotsV[Fluidos.iSlot].precoAlvo, Fluidos.tickMin) != 0)
{
SlotsV[Fluidos.iSlot].precoAlvo = SlotsV[Fluidos.iSlot].precoAlvo + (Fluidos.tickMin - MathMod(SlotsV[Fluidos.iSlot].precoAlvo, Fluidos.tickMin));
}
//SET PRECO STOP
SlotsV[Fluidos.iSlot].precoStop = (MathRound(Fluidos.media/Fluidos.tickMin) * Fluidos.tickMin) + SlotsV[Fluidos.iSlot].spreadStop;
if(MathMod(SlotsV[Fluidos.iSlot].precoStop, Fluidos.tickMin) != 0)
{
SlotsV[Fluidos.iSlot].precoStop = SlotsV[Fluidos.iSlot].precoStop + (Fluidos.tickMin - MathMod(SlotsV[Fluidos.iSlot].precoStop, Fluidos.tickMin));
}
}
//+===================================================================================================================================================================================+
//| FIM DO PROGRAMA
//+===================================================================================================================================================================================+