Provavelmente você está usando um robô para netting em uma conta hedge.
Tente mudar sua conta de hedge para netting em sua corretora se for possível.
Se não for, você precisa usar no seu código a função de fechar posição e não fechar ordem, não consigo te ajudar 100% pq só uso mql5.
Cara, olhei seu código e ele não tem a função com a clausula de fechamento. Só foi inserido a variável MMfechar, não existe uma função especificando que é para fechar a ordem ou não.
Carlos Alexandre #:
Cara, olhei seu código e ele não tem a função com a clausula de fechamento. Só foi inserido a variável MMfechar, não existe uma função especificando que é para fechar a ordem ou não.
Tambem estou com o mesmo problema, alguem tem uma solução para fechar as ordens no cruzamento de media em mql4??
Cara, olhei seu código e ele não tem a função com a clausula de fechamento. Só foi inserido a variável MMfechar, não existe uma função especificando que é para fechar a ordem ou não.
Contrate um programador custa USD 30,00 o preço de um lanche!
Todas as encomendas - novos no serviço Freelance do MetaTrader (mql5.com)
![Aplicativos de negociação para o MetaTrader 5 por encomenda Aplicativos de negociação para o MetaTrader 5 por encomenda](https://c.mql5.com/36/59/aplicativos-de-negocia-o-para-o.png)
Aplicativos de negociação para o MetaTrader 5 por encomenda
- 2022.10.22
- www.mql5.com
O maior serviço freelance com desenvolvedores de aplicativos MQL5
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Salve salve!
Estou usando esse robô para realizar alguns testes pra confirmar algumas estratégias a partir do cruzamento das MM.
Ele possui uma função que deveria fechar as ordens abertas quando a Média rápida cruzasse a Média Lenta e nesse mesmo ponto abrir outra ordem. Entretanto, ao copiar e compilar esse robô, as posições abertas não estão sendo fechadas com o novo cruzamento e assim acabo ficando com duas posições abertas, pois quando há cruzamento da média rápida uma nova ordem é aberta, mas a antiga só sai no StopLoss. Podem me ajudar a corrigir isso?Também gostaria de colocar uma função que me permita escolher os horarios para operar, para aproveitar os periodos de maior volatilidade.
//+------------------------------------------------------------------+
//| MM EA.mq4 |
//| Copyright 2019, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#define IdentificadorEA 101
//--- Input parameters - parâmetros do Expert Advisor que podem ser alterados quando se executa o dito.
extern double Lotes = 0.01;
extern int MMlenta = 50;
extern int MMrapida = 5;
extern int StopLoss = 100;
extern int TakeProfit = 100;
extern bool MMfechar = false; // Fechar no cruzamento das MMs (true / false)
//---
datetime LastTradeBarTime;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Necessário para controlar se estamos numa nova barra
LastTradeBarTime = Time[1];
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- Se existem trades abertos, tem de os fechar
if(OrdersTotal() > 0) {FecharTodosTrades();}
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- Variáveis temporárias, renovadas a cada chamada do EA
double vMMrapida0; // MM rápida da última barra
double vMMrapida1; // MM rápida da penúltima barra
double vMMlenta0; // MM lenta da última barra
double vMMlenta1; // MM lenta da penúltima barra
int resposta; // Variável que obterá a resposta do terminal quando envia uma ordem
//--- Verifica se estamos no início de uma barra e apenas processa as instruções se isso for verdade
if(LastTradeBarTime == Time[0])
{return;} // Não é o primeiro tick de uma nova barra, por isso sai
else
{
LastTradeBarTime = Time[0]; // continua
//--- Valores das médias móveis na barra que acabou de terminar, e na imediatamente anterior
vMMrapida0 = iMA(Symbol(),0,MMrapida,0,MODE_SMA,PRICE_CLOSE,1); // Obtém o valor da MM rápida da barra que terminou
vMMrapida1 = iMA(Symbol(),0,MMrapida,0,MODE_SMA,PRICE_CLOSE,2); // Obtém o valor para a MM rápida da barra anterior
vMMlenta0 = iMA(Symbol(),0,MMlenta, 0,MODE_SMA,PRICE_CLOSE,1); // Obtém o valor da MM lenta da barra que terminou
vMMlenta1 = iMA(Symbol(),0,MMlenta, 0,MODE_SMA,PRICE_CLOSE,2); // Obtém o valor para a MM lenta da barra anterior
//--- Verifica se existiu um cruzamento da MM rápida acima da MM lenta
if(vMMrapida1 < vMMlenta1 && vMMrapida0 > vMMlenta0)
{
//--- Verifica se existem posições abertas e se devem ser fechadas
if(OrdersTotal() > 0 && MMfechar) {FecharTodosTrades();}
//--- Abre um trade longo
resposta = OrderSend(Symbol(), OP_BUY, Lotes, Ask, 1, Ask - StopLoss * Point, Ask + TakeProfit * Point, "mm exemplo buy", IdentificadorEA, 0, clrBlue);
}
//--- Verifica se existiu um cruzamento da MM rápida abaixo da MM lenta
if(vMMrapida1 > vMMlenta1 && vMMrapida0 < vMMlenta0)
{
//--- Verifica se existem posições abertas e se devem ser fechadas
if(OrdersTotal() > 0 && MMfechar) {FecharTodosTrades();}
//--- Abre um trade curto
resposta = OrderSend(Symbol(), OP_SELL, Lotes, Bid, 1, Bid + StopLoss * Point, Bid - TakeProfit * Point, "mm exemplo sell", IdentificadorEA, 0, clrRed);
}
}
}
//+------------------------------------------------------------------+
//| Função que fecha todos os trades existentes |
//+------------------------------------------------------------------+
void FecharTodosTrades()
{
bool rec;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) {break;}
//--- A função vai fechar todas as ordens que sejam deste EA e sobre o símbolo corrente
if(OrderMagicNumber() == IdentificadorEA && OrderSymbol() == Symbol())
{
if(OrderType() == OP_BUY)
{rec = OrderClose(OrderTicket(), OrderLots(), Bid, 3, clrWhite);}
else if(OrderType() == OP_SELL)
{rec = OrderClose(OrderTicket(), OrderLots(), Ask, 3, clrWhite);}
}
}
}
//+------------------------------------------------------------------+
//| Expert End |
//+------------------------------------------------------------------+