144 lines
15 KiB
MQL5
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
|
|
//+===================================================================================================================================================================================+
|