feat: Implementa Fase 5 - DOM, VWAP, Audio Alerts e Historical Browser
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
//+------------------------------------------------------------------+
|
||||
//| YuCluster_Order_Router.mq5 |
|
||||
//| Integração Python <-> CTrade |
|
||||
//+------------------------------------------------------------------+
|
||||
#property description "Roteador de Execução Institucional OCO"
|
||||
#property version "1.00"
|
||||
|
||||
// 1. Incluindo a Biblioteca CTrade para facilitar o envio de ordens
|
||||
#include <Trade\Trade.mqh>
|
||||
|
||||
// Instanciando o objeto de trade
|
||||
CTrade trade;
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| VARIÁVEIS DE ENTRADA (ISOLANDO O FATOR PSICOLÓGICO) |
|
||||
//+------------------------------------------------------------------+
|
||||
input group "=== Gestão de Risco OCO ==="
|
||||
input double InpLote = 1.0; // Lote (Tamanho da Posição)
|
||||
input int InpStopLoss = 150; // Stop Loss (em pontos)
|
||||
input int InpTakeProfit = 300; // Take Profit (em pontos)
|
||||
|
||||
input group "=== Configurações do Robô ==="
|
||||
input ulong InpMagicNumber = 123456; // Número Mágico (CPF do Robô)
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| FUNÇÃO DE INICIALIZAÇÃO |
|
||||
//+------------------------------------------------------------------+
|
||||
int OnInit()
|
||||
{
|
||||
// Configura o Número Mágico para que o EA gerencie apenas as próprias ordens
|
||||
trade.SetExpertMagicNumber(InpMagicNumber);
|
||||
|
||||
// Define o desvio máximo aceitável (Slippage)
|
||||
trade.SetDeviationInPoints(5);
|
||||
|
||||
Print("Roteador Institucional Iniciado. Fator emocional desativado.");
|
||||
return(INIT_SUCCEEDED);
|
||||
}
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| FUNÇÃO DE EXECUÇÃO DE COMPRA A MERCADO |
|
||||
//+------------------------------------------------------------------+
|
||||
void ExecutarCompra()
|
||||
{
|
||||
// Atualiza os dados de preço de mercado (Tick)
|
||||
MqlTick tick;
|
||||
SymbolInfoTick(_Symbol, tick);
|
||||
|
||||
// Calcula os níveis de Stop Loss e Take Profit engessados
|
||||
double sl = tick.ask - (InpStopLoss * _Point);
|
||||
double tp = tick.ask + (InpTakeProfit * _Point);
|
||||
|
||||
// Normaliza as casas decimais de acordo com o ativo (Tick Size)
|
||||
sl = NormalizeDouble(sl, _Digits);
|
||||
tp = NormalizeDouble(tp, _Digits);
|
||||
|
||||
// Envia a ordem a mercado instantaneamente
|
||||
if(trade.Buy(InpLote, _Symbol, tick.ask, sl, tp, "YuCluster: Compra na POC"))
|
||||
{
|
||||
Print("Compra executada com sucesso! SL e TP na pedra.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Print("Erro ao executar compra. Código: ", trade.ResultRetcode());
|
||||
}
|
||||
}
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| FUNÇÃO DE EXECUÇÃO DE VENDA A MERCADO |
|
||||
//+------------------------------------------------------------------+
|
||||
void ExecutarVenda()
|
||||
{
|
||||
// Atualiza os dados de preço de mercado (Tick)
|
||||
MqlTick tick;
|
||||
SymbolInfoTick(_Symbol, tick);
|
||||
|
||||
// Calcula os níveis de Stop Loss e Take Profit engessados (invertido para venda)
|
||||
double sl = tick.bid + (InpStopLoss * _Point);
|
||||
double tp = tick.bid - (InpTakeProfit * _Point);
|
||||
|
||||
// Normaliza os cálculos
|
||||
sl = NormalizeDouble(sl, _Digits);
|
||||
tp = NormalizeDouble(tp, _Digits);
|
||||
|
||||
// Envia a ordem a mercado instantaneamente
|
||||
if(trade.Sell(InpLote, _Symbol, tick.bid, sl, tp, "YuCluster: Venda no Imbalance"))
|
||||
{
|
||||
Print("Venda executada com sucesso! SL e TP na pedra.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Print("Erro ao executar venda. Código: ", trade.ResultRetcode());
|
||||
}
|
||||
}
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| LAÇO PRINCIPAL (Aguardando o gatilho do Python) |
|
||||
//+------------------------------------------------------------------+
|
||||
void OnTick()
|
||||
{
|
||||
// Aqui o EA fica "escutando" variáveis globais do terminal ou requisições
|
||||
// que o nosso backend em Python enviará ao detectar o botão clicado no Painel Web.
|
||||
|
||||
if(GlobalVariableGet("SINAL_PYTHON_COMPRA") == 1)
|
||||
{
|
||||
ExecutarCompra();
|
||||
GlobalVariableSet("SINAL_PYTHON_COMPRA", 0); // Reseta o sinal
|
||||
}
|
||||
|
||||
if(GlobalVariableGet("SINAL_PYTHON_VENDA") == 1)
|
||||
{
|
||||
ExecutarVenda();
|
||||
GlobalVariableSet("SINAL_PYTHON_VENDA", 0); // Reseta o sinal
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user