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