Ajuda na codificação - página 237

 

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.

//+----------------------------------------------------------------------------+//| Fechar e excluir |

//+----------------------------------------------------------------------------+

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!!

Arquivos anexados:
sr.png  34 kb
 
daytrade:
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?

 
crsnape@btinternet.com:
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?

 
crsnape@btinternet.com:
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

Arquivos anexados:
 

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