Estou completamente perdido

 

Eu quero criar uma "EA" como você a chama. Embora seja engraçado que você continue usando isso como um acrônimo, no que me diz respeito, significa "algoritmo evolutivo", que é exatamente o que meu método realmente é. Se ele funcionar. Que funciona, se o spread for suficientemente baixo. Está na cerca.

De qualquer forma, tenho experiência em programação. E pelo que vi dela, a MQL4 parece praticamente a mesma coisa que a C++. Mas me faltam alguns detalhes cruciais. Sei sobre variáveis e constantes e muitas coisas diferentes já, mas preciso de algum tipo de modelo básico para trabalhar, e estou um pouco carente de algumas coisas conceituais. Alguém pode postar uma espécie de péssimo exemplo de programa de robô comercial que é simples mas tem todos os elementos que preciso e explicar o que cada parte dele faz e então posso dizer "aha, é assim que eu faço o que preciso fazer".

Basicamente, eu gostaria que meu programa pudesse baixar na RAM do meu computador o seguinte (baixando dados para o meu computador através da plataforma de negociação de moedas):

dados altos, baixos, abertos, fechados para preços de compra E venda (já que o valor do spread pode variar) por algum incremento de tempo que eu especifique dentro do programa (se isso puder ser feito), incluindo o mais recente, ou assim que for concluído (assim a cada minuto, ou a cada 5 minutos, ou a cada 10 minutos, etc.), qualquer que seja o intervalo de tempo) ou possivelmente a cada tick - cada vez que o preço mudar - o que quer que possa ser feito, eu também gostaria de poder ter uma variável que represente a quantidade de tempo desde a última completada (assim, se for a cada 10 minutos, haveria uma variável que é atualizada com cada tick que conta até 10 minutos de 0, e quando chegar a 10 minutos, há outra atualização dos dados), Gostaria também de baixar o valor total da conta em liquidação, para baixar o número total de posições e o tamanho das posições e o tipo das posições (por exemplo, USD/JPY é 10000 ou 100000 DOLLARS no valor de ienes, mas EUR/USD é 10000 ou 100000 EUROS no valor de dólares, mas o valor da minha conta será em dólares, portanto, é preciso ser capaz de determinar o tamanho variável do lote de uma posição). Dos preços atuais de compra e venda o programa poderia, naturalmente, simplesmente subtrair um do outro para obter o valor atual do spread.

ENTÃO eu gostaria que o programa fosse capaz de realizar as seguintes ações (carregar dados do meu computador através da plataforma de negociação de moedas)

comprar ou vender através de ordens de mercado ou ordens de limite. Além disso, por favor, me diga se eu coloco uma ordem de limite, mas o preço quando ela passa, se eu posso esperar que ela me dê o preço limite que eu coloquei, ou pode ser melhor? Por exemplo, suponha que o preço de compra EUR/USD seja 1,3500 e eu tenha uma ordem de limite para comprar a 1,3501, pagarei 1,3501 ou 1,3500? Devo esperar que o corretor me engane lá? Ou é funcionalmente idêntico a colocar uma ordem de mercado com a exceção de que se o preço for 1.3502 ou mais no momento em que a ordem entrar no sistema, isso não vai acontecer?

FINALMENTE, eu gostaria que o programa de exemplo envolvesse uma chamada de função para outra função. Apenas uma coisa simples, que faça um cálculo simples de algum tipo com dados que são passados para ele e devolva algum valor - se ambos passam por valor e passam por referência são possíveis como na MQL4, então por favor inclua um exemplo de cada um (comentado para mostrar o que você está fazendo) no programa de exemplo.

Também, por favor me diga, se geralmente envolve mais de um arquivo real (com a extensão mql4?) como pode ser em C++ ou se geralmente é apenas um único arquivo mql4, e é compilado pela plataforma de negociação, ou eu preciso de algum compilador para isso e então a plataforma de negociação usa o código da máquina ou o que quer que seja gerado pelo compilador?

Se alguém fizesse isso, apenas para fazer um programa fictício que contivesse todos esses elementos, não só seria muito útil para mim, mas seria útil para outros, imagino. Agradecemos antecipadamente a todos que fizerem isto.

 
Oh oh, melhor ainda, para a variável que começa em 0 e conta até 10 minutos (ou qualquer tempo que você use) - deve ser normalizada - dividida pela unidade de tempo - de modo que seja um duplo que varia entre 0 e 1. Dessa forma, talvez ela possa ser aplicada a um gráfico de 5 minutos, ou a um gráfico de 10 minutos, ou a um gráfico de 1 minuto, mas qualquer que seja a unidade de tempo, esta variável está sempre entre 0 e 1.
 
Não existe nenhum programa desse tipo que lhe dará tudo o que você precisa saber sobre o mql4 em uma instância. Eu recomendarei passar pela base de códigos, por exemplo, uma vez que você já tem alguma programação. Se você não gosta de aprender olhando códigos, mas sim uma explicação de linguagem, então confira o mql4_book. Além disso, há as documentações para uma fácil referência.
 
Eu estava perguntando se alguém iria escrever um. Se você conhece o formato básico do idioma, deve levar cerca de 5 minutos, deve levar o tempo necessário para ler meu post. Basta escrever o programa, digitar um exemplo de cada uma destas coisas e colocá-lo para cima. Eu olhei o livro mql4, ele vai direto de explicar o que é uma variável a fazer pressuposições sobre meus conhecimentos sobre funções e eu fico sonolento tentando encontrar o ponto de transição onde ele vai de muito mais simples do que o que eu preciso a mais do que eu estou preparado para compreender. Não estou pedindo para alguém escrever um "conselheiro econômico" para mim, apenas uma coisa estúpida que tem em si todas as instruções que eu possa querer usar. Algumas coisas que baixam em variáveis em meu computador qualquer informação que eu possa querer usar, e cada instrução que eu possa querer entrar - o que agora que penso nisso, eu gostaria não só de comprar e vender ordens de limite e de mercado, mas também algo que anulasse qualquer ordem existente, afinal, eu não gostaria de deixar nenhuma ordem de limite estranha sentada no caso de não serem executadas, eu não gostaria que o programa as esquecesse.
 
zortharg: Eu estava perguntando se alguém iria escrever um. Se você conhece o formato básico do idioma, deve levar cerca de 5 minutos, deve demorar o tempo necessário para ler meu post. Basta escrever o programa, digitar um exemplo de cada uma destas coisas e colocá-lo para cima. Eu olhei o livro mql4, ele vai direto de explicar o que é uma variável a fazer pressuposições sobre meus conhecimentos sobre funções e eu fico sonolento tentando encontrar o ponto de transição onde ele vai de muito mais simples do que o que eu preciso a mais do que eu estou preparado para compreender. Não estou pedindo para alguém escrever um "conselheiro econômico" para mim, apenas uma coisa estúpida que tem em si todas as instruções que eu possa querer usar. Algumas coisas que baixam em variáveis em meu computador qualquer informação que eu possa querer usar, e cada instrução que eu possa querer entrar - o que agora que penso nisso, eu gostaria não só de comprar e vender ordens de limite e de mercado, mas também algo que anulasse qualquer ordem existente, afinal, eu não gostaria de deixar nenhuma ordem de limite estranha sentada no caso de não serem executadas, eu não gostaria que o programa as esquecesse.

Acho que você veio para o lugar errado.

Nós não escrevemos códigos para outras pessoas neste fórum.

Esperamos que você escreva seu próprio código.

Se você ficar preso, nós o apontamos na direção certa.

Se você quiser que alguém escreva códigos para você, então vá aqui.

Eles fazem mql4 e mql5.

 
zortharg:

[...]

Bem, isto faz uma mudança de discutir a maior atualização para o MT4, que deve ser feito em poucos dias.


Quero criar uma "EA", como vocês a chamam. Embora seja engraçado que você continue usando isso como um acrônimo

Depende de sua experiência. Para o bem ou para o mal, a MT4 e a MQL4 têm atualmente um quase monopólio no mercado mundial de câmbio de varejo, e o termo "EA" tem significado para, no mínimo, centenas de milhares de pessoas.


E pelo que vi dela, a MQL4 parece praticamente a mesma coisa que a C++

Existem efetivamente duas versões do idioma MQL4. A que existe há 9 anos não tem classes ou objetos e, portanto, é mais parecida com a C do que com a C++. Por outro lado, não tem indicadores ou alocação explícita de memória.

A nova versão do MT4 e MQL4 - prevista para lançamento ao vivo na próxima segunda-feira - acrescenta classes, mas novamente sem alocação e gerenciamento de memória realmente explícito. É discutível se isso é mais como C++, ou mais como Javascript, mas sem as funções de dactilografia e lambda, etc.


Basicamente, eu gostaria que meu programa pudesse baixar na RAM do meu computador o seguinte [...]

Simplificando um pouco as coisas, a plataforma faz isso para você automaticamente, e você não tem meios fáceis de anular seu comportamento padrão. Baixar quaisquer dados de preços externos e depois manipulá-los dentro da MQL4 - particularmente a tradicional MQL4 em vez da nova versão estendida - não é bonito.

Você pode obter preços atuais e pode manipular facilmente os preços históricos para todos os períodos de tempo que a plataforma atende: M1, M5, M15 etc., mas não M3, H2 etc.


dados altos, baixos, abertos, fechados para preços de compra e venda (já que o valor do spread pode variar)

O spread pode realmente variar, mas uma das idiossincrasias encantadoras da plataforma MT4 é que ela só fornece preços de licitação históricos. (Os preços atuais e o spread atual estão obviamente disponíveis).


Também gostaria de baixar o valor total da conta em liquidação [...] o número total de posições e tamanho [...] mas o valor da minha conta será em dólares

Com efeito, a plataforma transmite constantemente esses dados. Não há nenhum "download" explícito dele. Por exemplo, o código MQL4 tem acesso constante ao patrimônio líquido atual da conta através da função AccountEquity(). As posições abertas são automaticamente informadas em sua moeda de depósito.


Por exemplo, suponha que o preço de compra EUR/USD seja 1,3500 e eu tenha uma ordem limite para comprar a 1,3501, pagarei 1,3501 ou 1,3500?

É dependente do corretor, mas, de modo geral, a plataforma/corretor simplesmente não aceitará uma ordem de limite no BBO atual ou além dele. Não posso pensar imediatamente em uma exceção a isto.


se geralmente envolve mais de um arquivo real (com a extensão mql4?) como pode ser em C++ ou se geralmente é apenas um único arquivo mql4

Em termos gerais, um projeto pode consistir apenas de um arquivo .mq4, mas pode haver vários arquivos .mqh #incluídos. Portanto, você pode ter bibliotecas de código comuns e reutilizá-las entre projetos. O que você não pode fazer é ter múltiplos arquivos .mq4 que existem em pari passu, ou seja, que são compilados juntos como parte de um mesmo projeto. Apesar das origens da MQL4 em C, a estrutura de um projeto tipicamente grande é diferente: um arquivo .mq4, mais uma ou mais bibliotecas de vários tipos (pré-compiladas ou #incluídas).


então a plataforma de negociação usa o código da máquina ou o que quer que seja gerado pelo compilador

O compilador gera uma espécie de byte-código/p-código/coisa o que você quiser chamar, em vez de código de máquina. Você pode compilar arquivos .mq4 explicitamente, ou você pode colocá-los na pasta necessária do software e eles serão automaticamente compilados e disponibilizados para uso na próxima inicialização.


Se alguém fizesse isso, apenas para fazer um programa fictício que contivesse todos esses elementos, não só seria muito útil para mim, mas seria útil para outros, imagino

Não é um bom momento. Todos neste fórum estão muito ocupados discutindo sobre a primeira atualização verdadeiramente significativa da MQL4 em 9 anos.

 
zortharg: Eu estava perguntando se alguém iria escrever um.
Você tem apenas três opções: Procurá-lo,aprender a codificá-lo, ou pagar a alguém. Nós não vamos codificá-lo para você. Estamos dispostos a lhe AJUDAR quando você publicar sua tentativa (usando SRC) e a natureza de seu problema.
 

Eu não estava pedindo a ninguém para produzir algo de valor comercial para mim. Eu não estava pedindo para alguém "codificar meu método para mim", WHRoeder. Eu só preciso de um ponto de partida. Talvez eu consiga descobrir algo a partir do link que você coloca em "procurar", embora eu realmente gostaria de ter um "osso nu" "isto é o que é necessário". Eu não sei como o programa deveria realmente ser. Eu não sei o que é estritamente necessário para estar nele. Se eu mesmo tentar fazer isso do nada, sem nenhum ponto de referência, só vou receber erros de compilação porque não vou nem mesmo saber o que está faltando. E se eu fizer algo que deve funcionar, vou inicializá-lo errado e nem vou saber que o fiz direito. Ok, que tal isto. Um exemplo simples. Algo que perderia seu dinheiro se você o fizesse na vida real: um consultor especializado que mantém uma posição que é ousadia*(valor de sua conta)*(a diferença entre o preço agora e o preço 1 unidade de tempo atrás)/X, e X começa em 1, mas toda vez que a unidade, X é atualizada para ser X=.9*X+.1*(preço agora - preço 1 unidade de tempo atrás)^2, e ousadia é um parâmetro especificado pelo usuário. E para determinar quantos comprar ou vender, ele tem que determinar quantas posições já possui também. Portanto, apenas um programa idiota, mas tem praticamente todos os elementos nele que eu precisaria para trabalhar como ponto de partida.

gchrmt4 obrigado. Você respondeu a muitas das minhas perguntas. Mas quando você diz "você pode facilmente manipular preços históricos para todos os prazos que a plataforma atende", como eu faço isso? Existe uma função semelhante à AccountEquity() que retorna um preço em um determinado momento, e você lhe dá as unidades de tempo atrás e se você quer abrir baixo alto fechamento e que tipo de unidades de tempo ela usa? O tipo de unidades de tempo é determinado pelo tipo de gráfico em que você o aplica? Isto é, se você aplicá-lo a uma tabela de 1 minuto, 1 unidade de tempo atrás refere-se a 1 minuto atrás, mas se você aplicá-lo a uma tabela de 5 minutos, 1 unidade de tempo atrás refere-se a 5 minutos atrás, ou a etapa de tempo está codificada no programa em si, em vez de ser aplicada a uma tabela? E o spread atual, como posso acessar isso? Você diz que estas coisas são "streaming" e facilmente acessíveis, mas como elas são acessadas?

Obrigado por qualquer ajuda que você queira dar.

 
zortharg:
Existe uma função semelhante à AccountEquity() que retorna um preço em um determinado momento, e você lhe dá as unidades de tempo atrás e se você quer abrir baixo alto fechamento e que tipo de unidades de tempo ele usa? O tipo de unidades de tempo é determinado pelo tipo de gráfico em que você o aplica? Isto é, se você aplicá-lo a uma tabela de 1 minuto, 1 unidade de tempo atrás refere-se a 1 minuto atrás, mas se você aplicá-lo a uma tabela de 5 minutos, 1 unidade de tempo atrás refere-se a 5 minutos atrás, ou a etapa de tempo está codificada no programa em si, em vez de ser aplicada a uma tabela? E o spread atual, como posso acessar isso? Você diz que estas coisas são "streaming" e facilmente acessíveis, mas como elas são acessadas?

Obrigado por qualquer ajuda que você queira dar.

Há toda uma família de funções da série do tempo. Por exemplo, iHigh("USDJPY", PERÍODO_H1, 2) lhe dará a alta da barra USDJPY H1 2 barras de volta (onde a barra em progresso atual é a #0). Há funções para conversão de tempos em índices de barras.

O spread atual está disponível de várias maneiras. A mais simples é Ask - Bid (que lhe dá o spread para o símbolo em cujo gráfico seu código está rodando). O spread para um símbolo diferente do gráfico atual está disponível através de rotas diferentes e expresso em termos diferentes, tais como MarketInfo("símbolo", MODE_ASK) - MarketInfo("símbolo", MODE_BID), ou MarketInfo("símbolo", MODE_SPREAD)

 

@zortharg

Há uma coisa chamada documentação aqui (parcialmente depreciada): docs.mql4.com/

e aqui (em breve, parcialmente não aplicável): mql5.com/pt/docs


Lá você encontra tudo o que sempre quis saber; também há exemplos no próprio terminal. Exemplos de scripts, conselheiros especializados e indicadores. E também você pode importar DLLs, para realizar coisas que estão além do MQL.

Se você pode obtê-lo de lá, você está pronto, e se não, bem...


 

Entendo seu pedido, um exemplo de trabalho a partir do qual é muito útil

https://www.mql5.com/en/code

Também é possível encontrar no Google uma fonte gratuita de consultores especializados para aprender com

procure códigos que façam tarefas simples, agrupe-os em funções e tente manter seu código simples e legível

start() {

   SearchOrders();
   DetectEnvironment();      
   UpdateIndicators();
   RiskAssessment();
   CalcVolume();
   if( EnterSignal() ) OpenOrder();
   if ( ExitSignal() ) CloseOrder();
   TrailingStop();
   DisplayInfos();

}
Razão: