Chassis/S6_Transmissao1_v0.mqh

381 lines
29 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 14:46:03 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| SuperCharlie_Aldridge_Dev_v0.mq5|
//| HEDGING HORN CAPITAL |
//| https://www.hhcapital.com.br |
//+------------------------------------------------------------------+
#property copyright "HEDGING HORN CAPITAL"
#property link "https://www.hhcap<00>tal.com.br"
#property version "DEV_v0"
#property description "INDICE"
//INDICE
//+===================================================================================================================================================================================+
//| 1 - SESSAO DE CABECALHO / ADMISSAO
//+===================================================================================================================================================================================+
//+------------------------------------------------------------------+
//| 1.1 - IMPORTACOES |
//+------------------------------------------------------------------+
#include <Trade/Trade.mqh>
#include <Trade/SymbolInfo.mqh>
//+===================================================================================================================================================================================+
//| 6 - SESSAO DE OPERACOES E EXECUCOES / ESCAPAMENTO
//+===================================================================================================================================================================================+
//+------------------------------------------------------------------+
//| 6.1 - FUNCAO DE COMPRA LIMITADA |
//+------------------------------------------------------------------+
void CompraLimite(double precoEnvio, double precoStop, double qtd, int magic, CSymbolInfo &simbolo, MqlTradeRequest &request, MqlTradeResult &result, MqlTradeCheckResult &check_result)
{
//Limpar informacoes das estruturas
ZeroMemory(request);
ZeroMemory(result);
ZeroMemory(check_result);
request.magic = magic;
request.symbol = _Symbol;
request.action = TRADE_ACTION_PENDING;
request.type = ORDER_TYPE_BUY_LIMIT;
request.type_filling = ORDER_FILLING_RETURN;
request.type_time = ORDER_TIME_DAY;
request.volume = qtd;
request.price = NormalizaPreco(precoEnvio);
// request.price = NormalizeDouble(precoEnvio,normalizeDoubleSize);
request.deviation = 0;
// request.sl = NormalizeDouble(precoStop,normalizeDoubleSize);
request.sl = NormalizaPreco(precoStop);
// request.stoplimit = tickMin;
// request.tp = NormalizaPreco(precoAlvo);
request.comment = "Compra Limitada";
// Print(request.price, " ",request.tp, " ",request.sl);
// Print("Tipo: Compra Limitada", "/ Preco: ", NormalizeDouble(precoEnvio,normalizeDoubleSize),"/ Preco Stop: ", NormalizeDouble(precoStop,normalizeDoubleSize), "/ QTD: ", qtd);
ResetLastError();
if(!OrderCheck(request, check_result))
{
PrintFormat("Erro em OrderCheck: %d", GetLastError());
PrintFormat("Codigo de retorno: %d", check_result.retcode);
return;
}
else
{
if(!OrderSend(request, result))
{
PrintFormat("Erro em OrderSend: %d", GetLastError());
PrintFormat("Codigo de retorno: %d", result.retcode);
return;
}
else
{
// Print("Ordem enviada com sucesso");
}
}
}
//+------------------------------------------------------------------+
//| 6.2 - FUNCAO DE VENDA LIMITADA |
//+------------------------------------------------------------------+
void VendaLimite(double precoEnvio, double precoStop, double qtd, int magic, CSymbolInfo &simbolo, MqlTradeRequest &request, MqlTradeResult &result, MqlTradeCheckResult &check_result)
{
//Limpar informacoes das estruturas
ZeroMemory(request);
ZeroMemory(result);
ZeroMemory(check_result);
request.magic = magic;
request.symbol = _Symbol;
request.action = TRADE_ACTION_PENDING;
request.type = ORDER_TYPE_SELL_LIMIT;
request.type_filling = ORDER_FILLING_RETURN;
request.type_time = ORDER_TIME_DAY;
request.volume = qtd;
request.price = NormalizaPreco(precoEnvio);
// request.price = NormalizeDouble(precoEnvio,normalizeDoubleSize);
request.deviation = 0;
// request.sl = NormalizeDouble(precoStop,normalizeDoubleSize);
request.sl = NormalizaPreco(precoStop);
// request.stoplimit = tickMin;
// request.tp = NormalizaPreco(precoAlvo);
request.comment = "Venda Limitada";
// Print("Tipo: Venda Limitada", "/ Preco: ", NormalizeDouble(precoEnvio,normalizeDoubleSize),"/ Preco Stop: ", NormalizeDouble(precoStop,normalizeDoubleSize), "/ QTD: ", qtd);
ResetLastError();
if(!OrderCheck(request, check_result))
{
PrintFormat("Erro em OrderCheck: %d", GetLastError());
PrintFormat("Codigo de retorno: %d", check_result.retcode);
return;
}
else
{
if(!OrderSend(request, result))
{
PrintFormat("Erro em OrderSend: %d", GetLastError());
PrintFormat("Codigo de retorno: %d", result.retcode);
return;
}
else
{
// Print("Ordem enviada com sucesso");
}
}
}
//+------------------------------------------------------------------+
//| 6.3 - FUNCAO DE COMPRA A MERCADO |
//+------------------------------------------------------------------+
void CompraMercado(double precoStop, double qtd, int magic, CSymbolInfo &simbolo, MqlTradeRequest &request, MqlTradeResult &result, MqlTradeCheckResult &check_result)
{
//Limpar informacoes das estruturas
ZeroMemory(request);
ZeroMemory(result);
ZeroMemory(check_result);
request.magic = magic;
request.symbol = _Symbol;
request.action = TRADE_ACTION_DEAL;
request.type = ORDER_TYPE_BUY;
request.type_filling = ORDER_FILLING_RETURN;
request.type_time = ORDER_TIME_DAY;
request.volume = qtd;
request.sl = NormalizaPreco(precoStop);
// request.stoplimit = tickMin;
// request.tp = NormalizeDouble(precoAlvo,2);
request.comment = "Compra Mercado";
// Print("Tipo: Compra Mercado", "/ Preco Stop: ", NormalizeDouble(precoStop,normalizeDoubleSize), "/ QTD: ", qtd);
ResetLastError();
if(!OrderCheck(request, check_result))
{
PrintFormat("Erro em OrderCheck: %d", GetLastError());
PrintFormat("Codigo de retorno: %d", check_result.retcode);
return;
}
else
{
if(!OrderSend(request, result))
{
PrintFormat("Erro em OrderSend: %d", GetLastError());
PrintFormat("Codigo de retorno: %d", result.retcode);
return;
}
else
{
// Print("Ordem enviada com sucesso");
}
}
}
//+------------------------------------------------------------------+
//| 6.4 - FUNCAO DE VENDA A MERCADO |
//+------------------------------------------------------------------+
void VendaMercado(double precoStop, double qtd, int magic, CSymbolInfo &simbolo, MqlTradeRequest &request, MqlTradeResult &result, MqlTradeCheckResult &check_result)
{
//Limpar informacoes das estruturas
ZeroMemory(request);
ZeroMemory(result);
ZeroMemory(check_result);
request.magic = magic;
request.symbol = _Symbol;
request.action = TRADE_ACTION_DEAL;
request.type = ORDER_TYPE_SELL;
request.type_filling = ORDER_FILLING_RETURN;
request.type_time = ORDER_TIME_DAY;
request.volume = qtd;
request.sl = NormalizaPreco(precoStop);
// request.stoplimit = tickMin;
// request.tp = NormalizeDouble(precoAlvo,2);
request.comment = "Venda Mercado";
// Print("Tipo: Venda Mercado", "/ Preco Stop: ",NormalizeDouble(precoStop,normalizeDoubleSize), "/ QTD: ", qtd);
ResetLastError();
if(!OrderCheck(request, check_result))
{
PrintFormat("Erro em OrderCheck: %d", GetLastError());
PrintFormat("Codigo de retorno: %d", check_result.retcode);
return;
}
else
{
if(!OrderSend(request, result))
{
PrintFormat("Erro em OrderSend: %d", GetLastError());
PrintFormat("Codigo de retorno: %d", result.retcode);
return;
}
else
{
// Print("Ordem enviada com sucesso");
}
}
}
//+------------------------------------------------------------------+
//| 6.5 - FUNCAO QUE MODIFICA ORDEM ENVIADA |
//+------------------------------------------------------------------+
int ModificaOrdemEnviada(int idOrdem, double precoEnvio, double precoAlvo, double precoStop, int magic, CTrade &negocio, CSymbolInfo &simbolo, MqlTradeRequest &request, MqlTradeResult &result, MqlTradeCheckResult &check_result)
{
//Percorre todas as ordens
for(int i=OrdersTotal()-1; i>=0; i--)
{
ulong ticket = OrderGetTicket(i);
string symbol = OrderGetString(ORDER_SYMBOL);
ulong magicEA = OrderGetInteger(ORDER_MAGIC);
//Verifica para cada ordem, se eh do simbolo corrente e do mesmo robo
if((symbol == _Symbol) && (magicEA == magic) && (ticket == idOrdem))
{
negocio.OrderModify(ticket, NormalizaPreco(precoEnvio), NormalizaPreco(precoStop), NormalizaPreco(precoAlvo), ORDER_TIME_DAY, OrderGetInteger(ORDER_TIME_EXPIRATION));
}
}
return 0;
}
//+------------------------------------------------------------------+
//| 6.6 - FUNCAO QUE MODIFICA ORDEM EXECUTADA |
//+------------------------------------------------------------------+
int ModificaOrdemExecutada(double precoAlvo, double precoStop, CTrade &negocio)
{
if(negocio.PositionModify(_Symbol, precoStop, precoAlvo) == false) Print("Erro em position modify.");
return 0;
}
//+------------------------------------------------------------------+
//| 6.7 - FUNCAO DE CANCELAMENTO DE ORDENS PENDENTES |
//+------------------------------------------------------------------+
void CancelaOrdensAbertas(CTrade &negocio)
{
ulong ticket = 0;
for(int i=OrdersTotal()-1;i>=0;i--){
ticket = OrderGetTicket(i);
negocio.OrderDelete(ticket);
Print("Cancelou ordem aberta");
}
return;
}
//+------------------------------------------------------------------+
//| 6.8 - FUNCAO DE FECHAMENTO DE ORDENS EXECUTADAS |
//+------------------------------------------------------------------+
void FechaTrade(double loteEnvio, CTrade &negocio)
{
double qtd = loteEnvio;
if(!PositionSelect(_Symbol))
return;
long tipoPosicao = PositionGetInteger(POSITION_TYPE);
if(tipoPosicao == POSITION_TYPE_BUY)
{
negocio.Sell(qtd, NULL, 0, 0, 0, "Saida por fechamento Trade");
}
else if(tipoPosicao==POSITION_TYPE_SELL)
{
negocio.Buy(qtd, NULL, 0, 0, 0, "Saida por fechamento Trade");
}
return;
}
//+------------------------------------------------------------------+
//| 6.9 - FUNCAO DE FECHAMENTO DE TODAS AS POSICOES |
//+------------------------------------------------------------------+
void FechaPosicao(CTrade &negocio)
{
double qtd = PositionGetDouble(POSITION_VOLUME);
if(!PositionSelect(_Symbol))
return;
long tipoPosicao = PositionGetInteger(POSITION_TYPE);
if(tipoPosicao == POSITION_TYPE_BUY)
{
negocio.Sell(qtd, NULL, 0, 0, 0, "Saida por fechamento do dia");
}
else if(tipoPosicao==POSITION_TYPE_SELL)
{
negocio.Buy(qtd, NULL, 0, 0, 0, "Saida por fechamento do dia");
}
return;
}
//+------------------------------------------------------------------+
//| 6.10 - FUNCAO DE CANCELAMENTO DE ORDEM PENDENTE DE COMPRA |
//+------------------------------------------------------------------+
void CancelaOrdemAbertaCompra(int magic, CTrade &negocio)
{
//Percorre todas as ordens
for(int i=OrdersTotal()-1; i>=0; i--)
{
ulong ticket = OrderGetTicket(i);
string symbol = OrderGetString(ORDER_SYMBOL);
ulong magicEA = OrderGetInteger(ORDER_MAGIC);
//Verifica para cada ordem, se eh do simbolo corrente e do mesmo robo
if((symbol == _Symbol) && (magicEA == magic))
{
//Verifica se a ordem eh do tipo buy limit
if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT)
{
negocio.OrderDelete(ticket);
Print("Cancelou ordem aberta de compra");
break;
}
}
}
return;
}
//+------------------------------------------------------------------+
//| 6.11 - FUNCAO DE CANCELAMENTO DE ORDEM PENDENTE DE VENDA |
//+------------------------------------------------------------------+
void CancelaOrdemAbertaVenda(double magic, CTrade &negocio)
{
//Percorre todas as ordens
for(int i=OrdersTotal()-1; i>=0; i--)
{
ulong ticket = OrderGetTicket(i);
string symbol = OrderGetString(ORDER_SYMBOL);
ulong magicEA = OrderGetInteger(ORDER_MAGIC);
//Verifica para cada ordem, se eh do simbolo corrente e do mesmo robo
if((symbol == _Symbol) && (magicEA == magic))
{
//Verifica se a ordem eh do tipo sell limit
if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT)
{
negocio.OrderDelete(ticket);
Print("Cancelou ordem aberta de venda");
break;
}
}
}
return;
}
//+------------------------------------------------------------------+
//| 6.12 - FUNCAO QUE NORMALIZA O PRECO PARA O TICK DO ATIVO |
//+------------------------------------------------------------------+
double NormalizaPreco(double price)
{
double precoNormalizado;
precoNormalizado = price - MathMod(price,5*_Point);
return precoNormalizado;
}
//+===================================================================================================================================================================================+
//| FIM DO PROGRAMA
//+===================================================================================================================================================================================+