Discussão do artigo "Guia passo a passo para iniciantes para escrever um Expert Advisor no MQL5" - página 30

 
timmytrade #:

Testador - "Modo de preenchimento não suportado"

Tentei em 3 corretoras diferentes. Qual é o problema?

Tente substituir SYMBOL_FILLING_FOK por SYMBOL_FILLING_IOC.

Atenciosamente, Vladimir.

 
Olá, Samual, seu artigo é excelente. E a técnica de usar a média móvel do indicador e o ADX é ótima, porque eu a testei com o par de moedas EUR/US H2 em 2010/01/01 - 2010/07/01 e 2017/01/01 - 2017/07/01. É ótimo. É melhor do que usar o indicador Hummer Hanging Man + Stochastics. E é melhor do que o indicador ThreeEMA. Obrigado. Agora estou trabalhando em seu código.
 
mirac baver ozturk #:

Olá a todos (especialmente ao querido autor)

Eu codifiquei junto com este artigo. Gostei muito e aprendi muito com ele.

Obrigado por escrever um artigo tão informativo.

No entanto, estou com um problema. Meu EA não fez nenhuma ordem. Baixei o código do autor, mas ele também não fez nenhuma ordem.

Como o artigo tem 13 anos, presumo que o código esteja desatualizado. Alguém pode me ajudar?

Meu código está no arquivo abaixo. Desde já, agradeço a todos.

Esse código já funciona.
 

Visite a página em inglês sem tradução, que é o download correto.

Faça o download a partir desta página: Guia passo a passo para escrever um Expert Advisor em MQL5 para iniciantes - MQL5 Articles

https://www.mql5.com/en/articles/100

 

Prezados colegas;

Neste artigo, na parte inferior, ele tem o código completo mlq5 para download.

Fiz o download para verificar a função e descobri que o programa tem um algoritmo incorreto.

A configuração é EURUSD, M1, 100USD, com início em 2025/01/01 a 2025/01/31

A primeira ordem é de venda e, depois, há várias ordens de compra.

O conceito é que deve haver apenas uma ordem, mas isso ocorre a partir da linha 165

O sinalizador para verificar se já existe ou não uma ordem está separado em duas variáveis de sinalizador (Buy_opned, Sell_opened).

Se agora já houver uma ordem de venda, então, na linha 216 (Ordersend), será criada uma nova ordem de compra, mesmo que agora haja uma ordem de venda.

Aguardar a próxima vela O sinalizador Buy_open na instrução da linha 172 não pode ser definido como on novamente. Porque a primeira ordem é de venda, a segunda ordem é de compra.

E sim, a próxima vela novamente, a ordem de compra na linha 216 (Ordersend) ocorrerá e continuará, muitas ordens de compra ocorrerão até que não haja dinheiro.

Veja o gráfico aqui.



Veja a lista de ordens.


Obrigado.

Niwath Jeamphue.

 
Niwath Jeamphue #:

Prezados colegas;

Neste artigo, na parte inferior, ele tem o código completo mlq5 para download.

Fiz o download para verificar a função e descobri que o programa tem um algoritmo incorreto.

A configuração é EURUSD, M1, 100USD, com início em 2025/01/01 a 2025/01/31

A primeira ordem é de venda e, posteriormente, há muitas ordens de compra.

O conceito é que deve haver apenas uma ordem, mas isso está ocorrendo a partir da linha 165

O sinalizador para verificar se há ordem ou não está separado em duas variáveis de sinalizador (Buy_opned, Sell_opened).

Se agora já houver uma ordem de venda, a linha 216 (Ordersend) criará uma nova ordem de compra, mesmo que agora haja uma ordem de venda.

Aguardar a próxima vela O sinalizador Buy_open na instrução da linha 172 não pode ser definido como on novamente. Porque a primeira ordem é de venda, a segunda é de compra.

E sim, na próxima vela, a ordem de compra na linha 216 (Ordersend) ocorrerá e continuará, muitas ordens de compra ocorrerão até que não haja dinheiro.

Veja o gráfico aqui.



Veja a lista de pedidos.


Obrigado.

Niwath Jeamphue.

Você não deve usar PositionSelect(_Symbol) a menos que esteja usando uma conta de compensação.

Em uma conta de hedge, você precisa selecionar sua posição corretamente, com PositionGetTicket() ou PositionSelectByTicket(). Consulte a documentação.

 
Alain Verleyen #:

Não se deve usar PositionSelect(_Symbol) a menos que se esteja usando uma conta de compensação.

Em uma conta de hedge, você precisa selecionar sua posição corretamente, com PositionGetTicket() ou PositionSelectByTicket(). Consulte a documentação.

Obrigado por seu comentário. Mas gostaria de informar a todos que o código-fonte é a versão final completa deste artigo.

https://www.mql5.com/pt/articles/download/100/my_first_ea.mq5

Tente você mesmo, pois entenderá meu ponto principal.

Obrigado.

 
Niwath Jeamphue #:

Obrigado por seu comentário. Mas gostaria de informar a todos que o código-fonte é o código final completo deste artigo.

https://www.mql5.com/pt/articles/download/100/my_first_ea.mq5

Tente você mesmo, pois entenderá meu ponto principal.

Obrigado.

Este artigo é de 2010. Naquela época, TODAS as contas eram contas de compensação no MT5, inclusive para Forex.

As contas de cobertura foram introduzidas em 2016: https: //www.mql5.com/en/articles/2299

MetaTrader 5 features hedging position accounting system
MetaTrader 5 features hedging position accounting system
  • 2016.03.21
  • www.mql5.com
In order to expand possibilities of retail Forex traders, we have added the second accounting system — hedging. Now, it is possible to have multiple positions per symbol, including oppositely directed ones. This paves the way to implementing trading strategies based on the so-called "locking" — if the price moves against a trader, they can open a position in the opposite direction.
 

Niwath Jeamphue #:

Experimente você mesmo e entenderá meu ponto de vista.

Obrigado.

Olá. Entendo seu ponto de vista. No arquivo anexo, alterei o código-fonte do Expert Advisor para que apenas uma posição seja aberta, independentemente da conta usada - compensação ou hedge.

Atenciosamente, Vladimir.

Arquivos anexados:
 
MrBrooklin #:

Olá. Entendo seu ponto de vista. No arquivo anexo, alterei o código-fonte do Expert Advisor para que apenas uma posição seja aberta, independentemente da conta que você usar - compensação ou hedge.

Atenciosamente, Vladimir.

Conta de hedge, MrBrooklin. Obrigado. Mas eu prefiro receber apenas uma ordem, não tantas ordens.

Mudei o algo. do original

Limpar a bandeira aberta de compra e venda

Se (PositionSelect(_Symbol)==true)

Se for constatado que se trata de uma posição de compra, definir o sinalizador Buy_opened

Else If found that is sell position then set Sell_opened flag

Zona1 : Tenta abrir a ordem de compra na condição e no sinalizador Buy_opened

Zona2 : Tenta abrir a ordem de venda na condição e o sinalizador Sell_opened

Para o novo algoritmo e ele funciona bem agora.

If (PositionsTotal() > 0) return

Limpar o sinalizador de abertura de compra e venda

Se for encontrada uma posição de compra, defina o sinalizador Buy_opened

Else If found that is sell position then set Sell_opened

Zona1 : Tenta abrir a ordem de compra na condição e !sinaliza Buy_opened

Zona2 : Tenta abrir uma ordem de venda na condição e !flag Sell_opened