[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 1121
![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
Bom dia/noite
Estou tentando reverter um comércio usando este método primitivo que não funciona (o cálculo no Expert Advisor é baseado em carrapatos):
if(CalculateCurrentOrders(Symbol())>0 && Close[1]<LowLevel) // determina se houve pedidos de compra && se uma vela fechou abaixo do nível inferior
{
CheckForClose(); // fechar o pedido
OpenSell(); // abrir uma ordem de venda
retornar;
}
Por favor, me informe onde estou indo errado... Eu também ficaria grato pelos vínculos que me permitiriam preencher esta lacuna.
dzhini:
Estou tentando reverter o comércio desta forma primitiva, que não funciona (o Conselheiro Especialista calcula por carrapatos):
if(CalculateCurrentOrders(Symbol())> 0 && Close[1]<LowLevel) // verifica se houve pedidos de compra && se uma vela fechou abaixo do nível inferior
Como posso determinar quantos minutos há entre o Time1 e o Time2?
esta é provavelmente a função onde você conta todos os pedidos. esta deve ser a Buy
Esta é uma função padrão:
int CalculateCurrentOrders(símbolo de corda)}
se >0 então é uma ordem de compra, se <0 então é uma ordem de venda ))))
Como posso determinar quantos minutos há entre o Time1 e o Time2?
a diferença retorna o número de segundos.
dividir por 60. você recebe o número de minutos.
duplo TP externo = 70; //takeprofit
duplo SL externo = 0; //stoploss
duplo Lote externo = 0,1;
duplo AltoLivre;
duplo BaixoLivre;
int resBuy=0;
int resSell=0;
//+ +
//| função de iniciação de peritos |
//+
+
int init() {
AltoLivre=Alto[1];
BaixoLivre=Baixo[1];
retorno;
}
//+
+ //| função especialista |
//+------------------------------------------------------------------+
void start()
{
if(Bars<100 && IsTradeAllowed()==false) return;
if(resBuy==0 && resSell==0 && CheckBreak()==-1)
{
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}
if(resBuy==0 && resSell==0 && CheckBreak()==-1& CheckBreak()==1)
{
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}
if(resBuy!=0 && resSell==0 && Close[1]<LowLevel) //
interessado nesta parte: fechamento e abertura em um bar {
bool closeBuy=OrderClose(resBuy, Lot, Bid, 2, Blue);
// while(!IsTradeAllowed()) Sleep(100);
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}
if(resSell!=0 && resBuy==0 && Close[1]>HighLevel) //------------------------------------- interessado nesta parte: fechamento e abertura em um bar
{
bool closeSell=OrderClose(resSell, Lot, Ask, 0.0002, Red);
// while(!IsTradeAllowed()) Sleep(100);
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}
}
// Check Low&Alto intervalo (Func)
double CheckBreak()
{
double candle=Open[1]-Close[1];
if(candle>0 && Low[1]<LowLevel) return(-1);
if(candle<0 && High[1]>HighLevel) return(1);
}
A diferença retorna o número de segundos.
divide por 60. dá o número de minutos.
Acabo de receber a data 1971.03.04 12:00, talvez isto precise ser convertido?
Eu só tenho a data, talvez precise ser convertida?
Primeiro de tudo, por que você está multiplicando por 60?
Segundo - se você quiser exibir o número de minutos como uma hora como 00:15,
você não precisa dividir ou multiplicar por 60.
Primeiro de tudo, por que você está multiplicando por 60?
Segundo - se você quiser apresentar o número de minutos na tela como uma hora como 00:15,
você não precisa dividir ou multiplicar por 60.
Sim, eu corrigi a divisão, mas o ano sai em 1970.01.01.02:51
Não preciso dele para a tela, só queria encontrar o número de minutos sem datas, para aquele intervalo de tempo....
mesmo sem dividir, ela ainda produz a data, ou devo subtrair a data na qual a função é baseada?
Se você quiser apenas alguns minutos, você não tem absolutamente nenhum motivo para usar o TimeToStr
O tempo é um número int normal.
Ou alternativamente, use o TimeToStr apenas com a bandeira TIME_MINUTE