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
Olá,
Tenho algumas breves perguntas de codificação, meu MT4 parece ter migrado para a MQL5.
Alguns blocos de código de exclusão não estão mais funcionando:
Abaixo eu recebo a mensagem de erro:
"(' Object Pointer esperado.
//+----------------------------------------------------------------------------+
if(sell)if(oppositeclose)close(OP_BUY);
if(comprar)if(opostoclose)close(OP_SELL);
if(hidetp || hidesl){hideclose(OP_BUY);hideclose(OP_SELL);}
if(usetimeout && onetime){closetime(OP_BUY);closetime(OP_SELL);}
if(onecancelother){if(totalsell>0){delete(OP_BUYSTOP);delete(OP_BUYLIMIT);}if(totalbuy>0){delete(OP_SELLSTOP);delete(OP_SELLLLIMIT);}}}
Abaixo recebo as mensagens de erro: 'delete' - nome esperado e
'}' - expressões não são permitidas em um escopo global
apagar (tipo int){
if(OrdersTotal()>0){
for(i=OrdensTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(type!=6){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==type){
OrderDelete(OrderTicket());
}
}
if(type===6){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP
|| OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLLIMIT){
OrderDelete(OrderTicket());
}
}
}
}
}
Alguém poderia, por favor, ajudar?
Agradecemos antecipadamente!
Olá colegas comerciantes/codificadores!
Espero que alguém possa me ajudar aqui.
Procurando e tentando os poucos EA's por perto, ainda não encontrei o que estou procurando.
Talvez eu esteja procurando algo que seja difícil de encontrar ou não estou tentando o máximo :-)
Eu também negocio um sistema SR traçando minhas linhas e criando canais temporários. Existe algo que possa executar posições quando o preço atinge as linhas? O problema é que ele precisa ser capaz de abrir posições cada vez que o preço atinge as linhas. Linhas vermelhas para vender, azuis para comprar, amarelas para SL e as verdes para TP. Por isso, ninguém só negocia ou OCO.
Obrigado de antemão!!
Olá colegas comerciantes/codificadores!
Espero que alguém possa me ajudar aqui.
Procurando e tentando os poucos EA's por perto, ainda não encontrei o que estou procurando.
Talvez eu esteja procurando algo que seja difícil de encontrar ou não estou tentando o máximo :-)
Eu também negocio um sistema SR traçando minhas linhas e criando canais temporários. Existe algo que possa executar posições quando o preço atinge as linhas? O problema é que ele precisa ser capaz de abrir posições cada vez que o preço atinge as linhas. Linhas vermelhas para vender, azuis para comprar, amarelas para SL e as verdes para TP. Por isso, ninguém só negocia ou OCO.
Obrigado de antemão!!Você verificou a EA a partir desta linha: https: //www.mql5.com/en/forum/176382?
Modificar o Stop Loss
Olá a todos,
Alguém sabe por que minha ordem de parada de perda modificada não está funcionando corretamente?
A ordem de parada de perda se move muito rapidamente entre o DonchianLowM5 e o OrderOpenPrice quando o DonchianLowM5 se move acima do OrderOpenPrice.
Este é o código (desculpe-me, não sei como colá-lo corretamente).
//--- Movimento de stop loss
se (OrdensTotal() > 0)
{
para (int i = 0; i < OrderTotal(); i++)
{
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
se (OrderType() == OP_BUY)
{
se (OrderStopLoss() < OrderOpenPrice())
{
se (DonchianLowM5 > OrderStopLoss())
{
OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowM5, OrderTakeProfit(), OrderExpiration(), Green);
}
}
se (OrderStopLoss() > OrderOpenPrice())
{
se (DonchianLowH4 <= OrderOpenPrice())
{
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);
}
}
se (OrderStopLoss() >= OrderOpenPrice())
{
se (DonchianLowH4 > OrderStopLoss())
{
OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowH4, OrderTakeProfit(), OrderExpiration(), Green);
}
}
}
Alguns o que intrigou.
O objetivo do código é o seguinte:
1. Modificar o stop loss para rastrear o Canal Donchian mais baixo no gráfico M5 até OrderOpenPrice. O stop loss não é seguir o Canal Donchian no gráfico M5 além do OrderOpenPrice. Ele se movimenta para quebrar a parada.
2. Algumas vezes uma vela grande se fecha além do OrderOpenPrice e, portanto, a segunda seção do código é para trazê-la de volta para o break even apenas.
3. Parar a perda é rastrear o Donchian Low no gráfico H4 quando o Canal Donchian no gráfico H4 exceder o OrderOpenPrice.
Os Canais Donchianos são codificados da seguinte forma:
DonchianLowM5 = iLow(NULL, TimingChart, iLowest(NULL, TimingChart, MODE_LOW, TimingDNCPeriod, TimingChartShift + 1));
DonchianHighM5 = iHigh(NULL, TimingChart, iHighest(NULL, TimingChart, MODE_HIGH, TimingDNCPeriod, TimingChartShift + 1)));
Verifiquei o diário e o stop loss modifica EXATAMENTE o OrderOpenPrice (não está abaixo, mesmo por uma fração de pip que o faria rastrear o Donchian Low na tabela M5.
Alguém sabe o que ele está fazendo?
Olá a todos,
Alguém sabe por que minha ordem de parada de perda modificada não está funcionando corretamente?
A ordem de parada de perda se move muito rapidamente entre o DonchianLowM5 e o OrderOpenPrice quando o DonchianLowM5 se move acima do OrderOpenPrice.
Este é o código (desculpe-me, não sei como colá-lo corretamente).
//--- Movimento de stop loss
se (OrdensTotal() > 0)
{
para (int i = 0; i < OrderTotal(); i++)
{
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
se (OrderType() == OP_BUY)
{
se (OrderStopLoss() < OrderOpenPrice())
{
se (DonchianLowM5 > OrderStopLoss())
{
OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowM5, OrderTakeProfit(), OrderExpiration(), Green);
}
}
se (OrderStopLoss() > OrderOpenPrice())
{
se (DonchianLowH4 <= OrderOpenPrice())
{
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);
}
}
se (OrderStopLoss() >= OrderOpenPrice())
{
se (DonchianLowH4 > OrderStopLoss())
{
OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowH4, OrderTakeProfit(), OrderExpiration(), Green);
}
}
}
Alguns o que intrigou.
O objetivo do código é o seguinte:
1. Modificar o stop loss para rastrear o Canal Donchian mais baixo no gráfico M5 até OrderOpenPrice. O stop loss não é seguir o Canal Donchian no gráfico M5 para além do OrderOpenPrice. Ele se movimenta para quebrar a parada.
2. Algumas vezes uma vela grande se fecha além do OrderOpenPrice e, portanto, a segunda seção do código é para trazê-la de volta para o break even apenas.
3. Parar a perda é rastrear o Donchian Low no gráfico H4 quando o Canal Donchian no gráfico H4 exceder o OrderOpenPrice.
Os Canais Donchianos são codificados da seguinte forma:
DonchianLowM5 = iLow(NULL, TimingChart, iLowest(NULL, TimingChart, MODE_LOW, TimingDNCPeriod, TimingChartShift + 1));
DonchianHighM5 = iHigh(NULL, TimingChart, iHighest(NULL, TimingChart, MODE_HIGH, TimingDNCPeriod, TimingChartShift + 1)));
Verifiquei o diário e o stop loss modifica EXATAMENTE o OrderOpenPrice (não está abaixo, mesmo por uma fração de pip que o faria rastrear o Donchian Low na tabela M5.
Alguém sabe o que está fazendo isso?Você está usando DonchianLowM5 e DonchianLowH4 (estou assumindo que estes são valores diferentes). Isso poderia lhe causar um problema
Olá Mladen,
Obrigado por sua resposta.
DonchianLowM5 e DonchianLowH4 são valores diferentes, mas cada um deles tem seu próprio propósito. O DonchianLowM5 é usado para ajustar o SL para quebrar mesmo nos estágios iniciais de uma negociação. O DonchianLowH4 ajusta o SL como um mecanismo de parada de trilha. Isto só deve entrar em vigor quando o DonchianLowH4 superar o OrderOpenPrice.
Eu investiguei um pouco mais sobre este assunto e talvez tenha encontrado o problema. Eu queria determinar se a função OrderModify estava reposicionando o SL exatamente como OrderOpenPrice. Mas não está. O OrderOpenPrice em meu diário é declarado como sendo 1.12224, 5 dígitos de precisão, e ainda assim a função Print abaixo declara OrderOpenPrice é de apenas 4 dígitos. Portanto, o SL estará usando este dígito de 4 dígitos, e não os 5. Eu preciso dele para usar os 5 dígitos.
Como posso fazer para que o SL seja ajustado EXATAMENTE para o preço de pedido aberto com 5 dígitos?
Este é o meu código:
{
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);
Print("SL modificado para Order Open Price", OrderOpenPrice());
}
Eu tentei isto, mas não funciona:
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice(), 5), OrderTakeProfit(), OrderExpiration(), Green);
Print("SL modificado para Preço Aberto do Pedido", OrderOpenPrice());
Meu corretor tem 5 dígitos porque o diário confirma o preço de abertura do pedido em 1.12224.
Espero que minha explicação faça sentido. Alguma idéia?
Olá Mladen,
Obrigado por sua resposta.
DonchianLowM5 e DonchianLowH4 são valores diferentes, mas cada um deles tem seu próprio propósito. O DonchianLowM5 é usado para ajustar o SL para quebrar mesmo nos estágios iniciais de uma negociação. O DonchianLowH4 ajusta o SL como um mecanismo de parada de trilha. Isto só deve entrar em vigor quando o DonchianLowH4 superar o OrderOpenPrice.
Eu investiguei um pouco mais sobre este assunto e talvez tenha encontrado o problema. Eu queria determinar se a função OrderModify estava reposicionando o SL exatamente como OrderOpenPrice. Mas não está. O OrderOpenPrice em meu diário é declarado como sendo 1.12224, 5 dígitos de precisão, e ainda assim a função Print abaixo declara OrderOpenPrice é de apenas 4 dígitos. Portanto, o SL estará usando este dígito de 4 dígitos, e não os 5. Eu preciso dele para usar os 5 dígitos.
Como posso fazer para que o SL seja ajustado EXATAMENTE para o preço de pedido aberto com 5 dígitos?
Este é o meu código:
{
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);
Print("SL modificado para Order Open Price", OrderOpenPrice());
}
Eu tentei isto, mas não funciona:
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice(), 5), OrderTakeProfit(), OrderExpiration(), Green);
Print("SL modificado para Preço Aberto do Pedido", OrderOpenPrice());
Meu corretor tem 5 dígitos porque o diário confirma o preço de abertura do pedido em 1.12224.
Espero que minha explicação faça sentido. Alguma idéia?O fato de você obter o preço impresso com precisão de 4 dígitos não é o problema: simplesmente use esta impressão (DoubleToStr(OrderOpenPrice(),Digits)); e você obterá uma impressão correta. Algo mais é o problema e eu pensei que se você estiver se comparando a dois preços completamente diferentes poderia lhe causar esses problemas
Oh, certo.
O que você quer dizer com isso? Será que eu me enganei na estrutura dos meus parênteses?
O código deve escolher ou o DonchianLowM5 ou DonchianLowH4, dependendo da situação.
Pode ser que a construção do meu parêntese esteja errada para cada elemento do código.
Tente simplificar o código. Algo parecido com o anexo
PS: verifique se essa é a lógica que você tinha em mente
olá, aqui estou eu dois indicadores, um baseado no RSI e outro no índice de força, mas o problema me pede curvas de aparência rsi, indica que não quero, se você tem a solução, obviamente posso lhe enviar o arquivo se necessário obrigado por sua ajuda ... desculpe pelo "google traductor" inglês