Gama_v1/Desenvolvimento_v1_0/S5_Direcao_v1_0.mqh
super.admin 5c3def2ca0 convert
2025-05-30 14:56:57 +02:00

144 lines
15 KiB
MQL5

//+------------------------------------------------------------------+
//| S5_Direcao_v1_0.mqh |
//| GAMA |
//| HEDGING HORN CAPITAL |
//| https://www.hhcapital.com.br |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, HEDGING HORN CAPITAL"
#property link "https://www.hhcapital.com.br"
#property version "GAMA DESENVOLVIMENTO v1_0"
#property description "LFT MEAN REVERSION. 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 = 0.0;
if(Fluidos.Q > 0) desvio = (1 / Fluidos.Q)/100;
else desvio = 0.01;
SlotsC[Fluidos.iSlot].spreadEnvio = MathRound( Fluidos.media * desvio * nivel / Fluidos.tickMin) * Fluidos.tickMin;
SlotsC[Fluidos.iSlot].spreadAlvo = Fluidos.pontosAlvo;
SlotsC[Fluidos.iSlot].spreadStop = Fluidos.pontosStop;
// Print("SpreadEnvioC: ", SlotsC[Fluidos.iSlot].spreadEnvio, " / ", "NivelC: ", nivel, " / ", "DesvioC: ", desvio);
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 = 0.0;
if(Fluidos.Q > 0) desvio = (1 / Fluidos.Q)/100;
else desvio = 0.01;
SlotsV[Fluidos.iSlot].spreadEnvio = MathRound( Fluidos.media * desvio * nivel / Fluidos.tickMin) * Fluidos.tickMin;
SlotsV[Fluidos.iSlot].spreadAlvo = Fluidos.pontosAlvo;
SlotsV[Fluidos.iSlot].spreadStop = Fluidos.pontosStop;
// Print("SpreadEnvioV: ", SlotsV[Fluidos.iSlot].spreadEnvio, " / ", "NivelV: ", nivel, " / ", "DesvioV: ", desvio);
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 = SlotsC[Fluidos.iSlot].precoEnvio - 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 = SlotsV[Fluidos.iSlot].precoEnvio + 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
//+===================================================================================================================================================================================+