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
tkuan77
Você tem que encontrar o último bar fechado e ver se o dia do último bar fechado é o mesmo que o dia atual.
Você pode usar algo como esta função para obter o último horário de fechamento do pedido:
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
return(CloseTime);
}
Oi mladen,
Mas onde inserir esta parte do código? Desculpe por perguntar isto, pois ainda sou bastante novo em codificar a mim mesmo e ainda não consigo entender como funciona o For loop.
Cumprimentos
Ryan
Oi mladen,
Mas onde inserir esta parte do código? Desculpe por perguntar isto, pois ainda sou bastante novo em codificar a mim mesmo e ainda não consigo entender como funciona o For loop.
Cumprimentos
RyanRyan
Algo parecido com isto :
if (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime())) // sem negociação
Ryan
Algo parecido com isto :
if (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime())) // sem negociação
Oi mladen, acrescentei o código, mas parece estar dando alguma forma de erro variável global. Além disso, notei que você tem uma variável MagicNumber que não é definida, posso perguntar para que serve isso? Adicionei-a sob int, mas não tenho certeza qual é o uso para essa variável.
Aconselhe. Obrigado novamente por sua paciência.
//---- parâmetros de entrada
TakeProfit duplo externo = 1000,0;
double Lots externos = 0,1;
StopLoss duplo externo = 980,0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
//+------------------------------------------------------------------+
//... Troca de gatilhos
//+------------------------------------------------------------------+
int ticket, total, MagicNumber;
duplo TP_Value, SL_Value;
data/hora GetLastClosedOrderTime()
{
data/hora FecharTempo = 0;
for(int i=OrdensHistóriaTotal()-1;i>=0;i--)
{
se (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
retorno(CloseTime);
}
total = OrdensTotal(); // verificar o número total de negócios atualmente abertos
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0,00100) && ((High[1] - Low[1]) > 0,00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
se ((Fechar[1] - Abrir[1]) > 0,00100)
{
TP_Value = (Fechar[1] - Abrir[1]);
SL_Valor = (Baixo[1] - 0,0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Abrir[1] - Fechar[1]) > 0,00100)
{
TP_Value = (Abrir[1] - Fechar[1]);
SL_Valor = (Baixo[1] - 0,0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Abrir[1] - Fechar[1]) <= 0,00100)
{
TP_Valor = (Alto[1] - Baixo[1]);
SL_Valor = (Baixo[1] - 0,0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0,00100) && ((High[1] - Low[1]) > 0,00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
se ((Fechar[1] - Abrir[1]) > 0,00100)
{
TP_Value = (Fechar[1] - Abrir[1]);
SL_Valor = (Alto[1] + 0,0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Abrir[1] - Fechar[1]) > 0,00100)
{
TP_Value = (Abrir[1] - Fechar[1]);
SL_Valor = (Alto[1] + 0,0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Abrir[1] - Fechar[1]) <= 0,00100)
{
TP_Valor = (Alto[1] - Baixo[1]);
SL_Valor = (Alto[1] + 0,0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
}
}
retorno(0);
}
//+------------------------------------------------------------------+
Oi mladen, acrescentei o código, mas parece estar dando alguma forma de erro variável global. Além disso, notei que você tem uma variável MagicNumber que não é definida, posso perguntar para que serve isso? Adicionei-a sob int, mas não tenho certeza qual é o uso para essa variável.
Aconselhe. Obrigado novamente por sua paciência.
//---- parâmetros de entrada
TakeProfit duplo externo = 1000,0;
double Lots externos = 0,1;
StopLoss duplo externo = 980,0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
//+------------------------------------------------------------------+
//... Troca de gatilhos
//+------------------------------------------------------------------+
int ticket, total, MagicNumber;
duplo TP_Value, SL_Value;
data/hora GetLastClosedOrderTime()
{
data/hora FecharTempo = 0;
for(int i=OrdensHistóriaTotal()-1;i>=0;i--)
{
se (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
retorno(CloseTime);
}
total = OrdensTotal(); // verificar o número total de negócios atualmente abertos
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0,00100) && ((High[1] - Low[1]) > 0,00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
se ((Fechar[1] - Abrir[1]) > 0,00100)
{
TP_Value = (Fechar[1] - Abrir[1]);
SL_Valor = (Baixo[1] - 0,0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Abrir[1] - Fechar[1]) > 0,00100)
{
TP_Value = (Abrir[1] - Fechar[1]);
SL_Valor = (Baixo[1] - 0,0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Abrir[1] - Fechar[1]) <= 0,00100)
{
TP_Valor = (Alto[1] - Baixo[1]);
SL_Valor = (Baixo[1] - 0,0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0,00100) && ((High[1] - Low[1]) > 0,00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
se ((Fechar[1] - Abrir[1]) > 0,00100)
{
TP_Value = (Fechar[1] - Abrir[1]);
SL_Valor = (Alto[1] + 0,0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Abrir[1] - Fechar[1]) > 0,00100)
{
TP_Value = (Abrir[1] - Fechar[1]);
SL_Valor = (Alto[1] + 0,0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Abrir[1] - Fechar[1]) <= 0,00100)
{
TP_Valor = (Alto[1] - Baixo[1]);
SL_Valor = (Alto[1] + 0,0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
}
}
retorno(0);
}
//+------------------------------------------------------------------+
Essa é uma função
Movê-lo para fora do corpo da função start()
↵
Essa é uma função
Movê-lo para fora do corpo da função start()Oi mladen, eu tentei tirar a função Start, no entanto, minha EA ainda está desencadeando mais de 1 comércio por dia em vez de limitar a desencadear apenas 1 comércio por dia.
Apreciar o esclarecimento.
Cumprimentos
//---- parâmetros de entrada
TakeProfit duplo externo = 1000,0;
double Lots externos = 0,1;
StopLoss duplo externo = 980,0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int MagicNumber;
data/hora GetLastClosedOrderTime()
{
data/hora FecharTempo = 0;
for(int i=OrdensHistóriaTotal()-1;i>=0;i--)
{
se (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
retorno(CloseTime);
}
int start()
{
//+------------------------------------------------------------------+
//... Troca de gatilhos
//+------------------------------------------------------------------+
int ticket, total;
duplo TP_Value, SL_Value;
total = OrdensTotal(); // verificar o número total de negócios atualmente abertos
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0,00100) && ((High[1] - Low[1]) > 0,00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
se ((Fechar[1] - Abrir[1]) > 0,00100)
{
TP_Value = (Fechar[1] - Abrir[1]); // valor do corpo longo
SL_Valor = (Baixo[1] - 0,0010); // sempre o mesmo por muito tempo
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Abrir[1] - Fechar[1]) > 0,00100)
{
TP_Value = (Aberto[1] - Fechado[1]); // valor do corpo curto
SL_Valor = (Baixo[1] - 0,0010); // sempre o mesmo por muito tempo
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Abrir[1] - Fechar[1]) <= 0,00100)
{
TP_Valor = (Alto[1] - Baixo[1]); // valor da vela inteira incluindo cabeça e cauda
SL_Valor = (Baixo[1] - 0,0010); // sempre o mesmo por muito tempo
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0,00100) && ((High[1] - Low[1]) > 0,00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
se ((Fechar[1] - Abrir[1]) > 0,00100)
{
TP_Value = (Fechar[1] - Abrir[1]); // valor do corpo longo
SL_Valor = (Alto[1] + 0,0010); // sempre o mesmo para curto
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Abrir[1] - Fechar[1]) > 0,00100)
{
TP_Value = (Aberto[1] - Fechado[1]); // valor do corpo curto
SL_Valor = (Alto[1] + 0,0010); // sempre o mesmo para curto
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Abrir[1] - Fechar[1]) <= 0,00100)
{
TP_Valor = (Alto[1] - Baixo[1]); // valor da vela inteira incluindo cabeça e cauda
SL_Valor = (Alto[1] + 0,0010); // sempre o mesmo para curto
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
}
}
retorno(0);
}
//+------------------------------------------------------------------+
↵
Oi mladen, eu tentei tirar a função Start, no entanto, minha EA ainda está desencadeando mais de 1 comércio por dia em vez de limitar a desencadear apenas 1 comércio por dia.
Apreciar o esclarecimento.
Cumprimentos
//---- parâmetros de entrada
TakeProfit duplo externo = 1000,0;
double Lots externos = 0,1;
StopLoss duplo externo = 980,0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int MagicNumber;
data/hora GetLastClosedOrderTime()
{
data/hora FecharTempo = 0;
for(int i=OrdensHistóriaTotal()-1;i>=0;i--)
{
se (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
retorno(CloseTime);
}
int start()
{
//+------------------------------------------------------------------+
//... Troca de gatilhos
//+------------------------------------------------------------------+
int ticket, total;
duplo TP_Value, SL_Value;
total = OrdensTotal(); // verificar o número total de negócios atualmente abertos
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0,00100) && ((High[1] - Low[1]) > 0,00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
se ((Fechar[1] - Abrir[1]) > 0,00100)
{
TP_Value = (Fechar[1] - Abrir[1]); // valor do corpo longo
SL_Valor = (Baixo[1] - 0,0010); // sempre o mesmo por muito tempo
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Abrir[1] - Fechar[1]) > 0,00100)
{
TP_Value = (Aberto[1] - Fechado[1]); // valor do corpo curto
SL_Valor = (Baixo[1] - 0,0010); // sempre o mesmo por muito tempo
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Abrir[1] - Fechar[1]) <= 0,00100)
{
TP_Valor = (Alto[1] - Baixo[1]); // valor da vela inteira incluindo cabeça e cauda
SL_Valor = (Baixo[1] - 0,0010); // sempre o mesmo por muito tempo
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0,00100) && ((High[1] - Low[1]) > 0,00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
se ((Fechar[1] - Abrir[1]) > 0,00100)
{
TP_Value = (Fechar[1] - Abrir[1]); // valor do corpo longo
SL_Valor = (Alto[1] + 0,0010); // sempre o mesmo para curto
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Abrir[1] - Fechar[1]) > 0,00100)
{
TP_Value = (Aberto[1] - Fechado[1]); // valor do corpo curto
SL_Valor = (Alto[1] + 0,0010); // sempre o mesmo para curto
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Abrir[1] - Fechar[1]) <= 0,00100)
{
TP_Valor = (Alto[1] - Baixo[1]); // valor da vela inteira incluindo cabeça e cauda
SL_Valor = (Alto[1] + 0,0010); // sempre o mesmo para curto
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
}
}
retorno(0);
}
//+------------------------------------------------------------------+
tkuan77
Substitua este :
if(total < 1)
com este :
if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ;
E não deve mais fazer isso
tkuan77
Substitua este :
if(total < 1)
com este :
if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ;
E não deve mais fazer issoOi mladen, depois de ter inserido o código, em vez de acionar 1 operação por dia, acionou várias operações ao mesmo tempo até o estouro da conta. Poderia ser devido a algum mecanismo de acionamento que causa isto?
Atenciosamente
Oi mladen, tenho este código particular que fechará todas as negociações pendentes que tenho depois de ter uma negociação em andamento. como faço para só cancelar minha negociação pendente atual depois de ter acionado uma negociação em vez de todas as futuras negociações pendentes?
obrigado.....
int new_del()
{
int i,a;
int total = OrdensTotal();
string comentario,par;
para (i=total-1; i >=0; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
se (OrderType()==OP_BUY || OrderType()==OP_SELLL)
{
para (a=total-1; a >=0; a--)
{
OrderSelect(a,SELECT_BY_POS,MODE_TRADES);
comentario=OrderComment();
par=StringSubstr(comentario,0,6);
if(OrderType()==OP_SELLSTOP)// && comentario===Symbol())
{
OrderDelete(OrderTicket());
Print("Deleting SELL_STOP"," Ordertype:",OrderType());
return(1);
}
if(OrderType()==OP_BUYSTOP)// && par===Símbolo())
{
OrderDelete(OrderTicket());
Print("Deleting BUY_STOP"," Ordertype:",OrderType());
return(1);
}
}
}
}
}
Oi mladen, tenho este código particular que fechará todas as negociações pendentes que tenho depois de ter uma negociação em andamento. como faço para só cancelar minha negociação pendente atual depois de ter acionado uma negociação em vez de todas as futuras negociações pendentes?
obrigado.....
int new_del()
{
int i,a;
int total = OrdensTotal();
string comentario,par;
para (i=total-1; i >=0; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
se (OrderType()==OP_BUY || OrderType()==OP_SELLL)
{
para (a=total-1; a >=0; a--)
{
OrderSelect(a,SELECT_BY_POS,MODE_TRADES);
comentario=OrderComment();
par=StringSubstr(comentario,0,6);
if(OrderType()==OP_SELLSTOP)// && comentario===Symbol())
{
OrderDelete(OrderTicket());
Print("Deleting SELL_STOP"," Ordertype:",OrderType());
return(1);
}
if(OrderType()==OP_BUYSTOP)// && par===Símbolo())
{
OrderDelete(OrderTicket());
Print("Deleting BUY_STOP"," Ordertype:",OrderType());
return(1);
}
}
}
}
}tkuan77
O que significa "comércio atual pendente" e o que significa "comércio futuro pendente"?
tkuan77
O que significa "comércio atual pendente" e o que significa "comércio futuro pendente"?
Oi mladen,
O comércio pendente atual significa: uma vez satisfeita uma condição, a ea estabelecerá 2 negócios pendentes (1 longo e 1 curto). Portanto, se a negociação longa for acionada, a ea cancelará automaticamente as negociações pendentes curtas.
O comércio pendente futuro significa: após a ea ter cancelado as negociações pendentes anteriores e dizer que a condição foi cumprida novamente, a ea por direito deve definir outras 2 negociações pendentes (1 longa e 1 curta). no entanto, se a ea atualmente tem uma negociação em andamento, a ea cancelará automaticamente quaisquer ordens pendentes que a ea está tentando definir.
o que estou tentando fazer é simplesmente deixar o sistema cancelar somente a negociação pendente atual após uma negociação ter sido acionada. apreciar a ajuda
cumprimentos