Versão beta do livro online sobre programação MQL4 - por Sergey Kovalev (SK.) - página 3

 
Climber:
Experimentei a Meta Trader pela primeira vez há uma semana e descobri que é muito mais conveniente do que meus terminais anteriores (Rumus e Forex Trader). Há cerca de dois anos, quando tomei conhecimento do Forex e abri minha primeira conta demo, me perguntei como automatizar tudo. Depois abri o terminal e vi a mensagem Autotrading na seção de correio. E aqui estou eu)))) Intensamente lendo o livro, e espero que em breve escreva meu primeiro Expert Advisor para minha estratégia desenvolvida. Eu não tinha absolutamente nada a ver com programação antes, era até difícil imaginar que alguma vez eu iria aprender programação)))) Enquanto eu lia, surgiram perguntas, mas elas também desapareceram à medida que eu ia avançando. A pergunta apareceu, olhei para frente e fiquei satisfeito, pois vi a resposta após alguns capítulos e voltei a ler tudo em ordem. Fui especialmente atraído pela possibilidade de testar a estratégia em dados históricos e ajustar a estratégia como resultado.
De qualquer forma, muito obrigado pelo livro.


É excelente. Você é um novo usuário de MT. E você não sabe praticamente nada sobre programação no momento.

Permita-me sugerir que você informe pelo menos duas ou três vezes por mês como as coisas estão indo (e mais freqüentemente se você desejar). Isso seria extremamente interessante.

Entretanto, se você me permite, tenho uma pergunta. Você diz que surgiu uma pergunta que é respondida nas seções seguintes. Tentei montar tudo de forma a evitar essa situação. Você poderia esclarecer a que pergunta você está se referindo?

 
SK. писал (а):
Escalador:
Uma semana atrás instalei e experimentei a Meta Trader pela primeira vez. Acontece que este terminal é muito mais conveniente do que meus anteriores (Rumus e Forex Trader). Há cerca de dois anos, quando tomei conhecimento do Forex e abri minha primeira conta demo, me perguntei como automatizar tudo. Depois abri o terminal e vi a mensagem Autotrading na seção de correio. E aqui estou eu)))) Intensamente lendo o livro, e espero que em breve escreva meu primeiro Expert Advisor para minha estratégia desenvolvida. Eu não tinha absolutamente nada a ver com programação antes, era até difícil imaginar que eu iria estudar programação)))) Enquanto eu lia, surgiram perguntas, mas elas também desapareceram à medida que eu ia avançando. A pergunta surgiu, olhei em frente e fiquei satisfeito, pois vi a resposta após alguns capítulos e voltei para ler tudo em ordem. Fui especialmente atraído pela possibilidade de testar a estratégia em dados históricos e corrigi-la como resultado.
De qualquer forma, muito obrigado pelo livro.


É excelente. Você é um novo usuário de MT. E você não sabe praticamente nada sobre programação no momento.

Permita-me oferecer-lhe: que me informe pelo menos 2 ou 3 vezes por mês como você está indo (ou com mais freqüência, se desejar). Seria muito interessante.

Entretanto, se você me permite, tenho uma pergunta. Você diz que surgiu uma pergunta que é respondida nas seções seguintes. Tentei montar tudo de forma a evitar essa situação. Você poderia esclarecer a que pergunta você está se referindo?

Uma vez usei o Sign of Misery para facilitar meu trabalho, onde você pode escrever um programa sem conhecer nenhuma programação. Bastava especificar as ações na ordem em que foram realizadas (usei-o principalmente como um automatizador, embora haja muito mais possibilidades). Digamos que eu tinha muitos valores em 4 colunas no Excel (dados de levantamento elétrico da geofísica, a cada 20 cm). Para o processamento posterior destes dados eu precisava obter dados apenas de medidores (ou seja, de 0, 1, 2, 3, 4 ....). Eu fiz este programa para automatizar as ações, através de comandos para emular as teclas e mudar as coordenadas do mouse. Eu o compilei no ehe. Mas foi apenas uma digressão. O programa tinha que fazer etiquetas e definir as condições de transição para estas etiquetas, ou seja, fazer um ciclo de operações, com a condição de sair deste ciclo. Quando cheguei à questão da construção da EA, tive alguma idéia sobre a visão geral da estrutura do código. Mas quando comecei a ler o livro, fiquei um pouco confuso com a estrutura da construção do programa e depois por função no início () que se repete a cada tic e se no momento de sua execução eu descobri o preço da licitação, ele está escrito em uma variável e é armazenado nela durante toda a sua execução, então como saberei quando o preço mudou e o programa pode realizar qualquer outra ação com base no novo preço? Pensei que o preço em meu programa seria atualizado por algum tipo de código de loop, pedindo constantemente por ele. Eu também tinha outra pergunta: quando você chama uma função e sua execução, eu imaginava que a próxima função seria executada, mas acabou voltando o controle à função, seguindo aquela que inicialmente chamou a função. Mas este fato me agradou particularmente, porque ficou claro para mim (porque eu pensei, e as outras ações, que se seguiram a esta função, será que elas foram ignoradas desta maneira?) Agora eu tenho uma pergunta como esta: Entendi que ao executar a função init, chamarei uma função para calcular um preço de abertura adequado para meu pedido e também para calcular um tamanho de lote com base nos dados do saldo da minha conta; após o init terminar, a execução da função start será iniciada, a qual conterá um código de "espera" para O preço necessário da transação, e assim que vier, a abertura da ordem será executada (não se assume que haja lucro para colocar porque se houver um salto que salte sobre o valor ТР, ele não acionará, e o salto será potencialmente favorável ao valor ТР, portanto, quero formar a ordem para fechar a ordem finalmente ao preço conhecido quando o preço atual for igual, ou < , ou > especificado.ou >); então a coisa mais misteriosa para mim é onde escrever o código de espera do preço "fechar" e voltar ao início, ou seja, calcular novamente o preço estabelecido e usar o pedido "fechar". ou seja, tenho que calcular o preço a ser estabelecido para a abertura, esperar por este preço, etc. Olhei para a frente nas seções; acho que vi algo nos títulos, que provavelmente responderá à minha pergunta. Ao terminar de ler a seção de Abertura e Estabelecimento de Ordens. Comecei a lê-lo ontem de manhã.
Eu lhe informarei sobre o progresso, como na minha situação e sem comunicação)). Espero um feedback construtivo.
Obrigado por seu tempo e atenção.
 

Favor dividir as seguintes mensagens em parágrafos, pois é difícil entender o que está sendo escrito.

Climber:
Mas tendo começado a ler o livro, fiquei um pouco confuso pela estrutura de construção do programa e depois pela função int start (), que se repete a cada tick e se no momento de sua execução eu sei o preço da licitação, então ele é escrito para uma variável e é armazenado nela durante todo o tempo de execução, então como saberei quando o preço mudou e o programa pode realizar qualquer outra ação com base no novo preço? Pensei que o preço em meu programa seria atualizado por algum código de loop, pedindo constantemente por ele.

Você está certo ao dizer que para que o programa possa funcionar em tempo real, é necessário ser informado periodicamente sobre o fato de um novo preço e o próprio preço.

De fato, há duas maneiras de fazer isso:

A primeira maneira é executar em loop infinito alguma função e a partir dela periodicamente solicitar preço.
Mas este método tem desvantagens:
- Se as consultas são feitas com freqüência, o resultado é uma carga pesada no canal de comunicação e um desperdício de recursos de PC;
- Se você fizer consultas com pouca freqüência, pode perder um novo preço entre as consultas.

O método 2-nd (aceito como básico na tecnologia MQ) é bem diferente, pois o lançamento do código necessário pertence ao terminal. O terminal recebe informações do servidor, entende que chegou um novo tick (o fato de um novo preço e o próprio preço) e com base nestas informações, o terminal inicia() a função. Tudo isso é descrito no Programa na seção MQL4.

Trepador:
Agora tenho uma pergunta: percebi que, ao executar a função init, vou chamar a função de cálculo do preço aberto do meu pedido, e também o cálculo do tamanho do lote, com base nos dados do saldo da minha conta; após a execução init, a função start start será iniciada...

Incorreto. init() e start() são funções especiais. Eles são chamados pelo terminal do cliente de acordo com suas próprias propriedades (ou mais simplesmente, de acordo com as regras, condições sob as quais são chamados para execução). Isto é descrito na seção Funções Especiais. A função init() é executada uma vez, quando o programa é carregado na janela. E start() é chamado em cada tick. Isto é muito conveniente. Um tick veio e trouxe um novo preço = o início do lançamento do terminal() que é executado até que ele seja executado. Todos os cálculos devem ser inseridos nele - cálculo do número de lotes, condições de abertura/fecho de pedidos e tudo mais.

Trepador:
Então o mais intrigante para mim é onde escrever o código esperando o preço "fechado" do pedido e voltar ao início, ou seja, novamente, contando o preço de abertura, esperando por este preço, etc. Olhei para a frente nas seções; acho que vi algo nos títulos, que provavelmente responderá à minha pergunta. Gostarei de ler a seção de Abertura e Definição de Pedidos.

A julgar por suas perguntas, você não precisa escrever programas e não precisa ler o que você está lendo agora. Nesta situação, é fortemente recomendado começar a ler o livro novamente. De forma consistente e sem se antecipar. E à medida que você for avançando, digite todos os exemplos apresentados em ME e os execute em seu PC. E não passe para a próxima seção até que cada letra do código seja totalmente compreendida. Procure os conceitos de Tick, Controle, Função, Função Especial, Operador, e geralmente verifique o Dicionário de Termos de tempos em tempos.

Trepador:
Certamente relatarei o progresso como em minha posição e sem comunicação)) Espero um feedback construtivo.
Obrigado por seu feedback.

Espero que você siga o conselho corretamente e o siga.

 
SK. escreveu (a):
<br / translate="no">

Trepador:
Então o mais intrigante para mim é onde escrever o código esperando pelo preço "fechado" e voltar ao início, ou seja, contar novamente o preço de abertura, esperar por este preço, etc. Olhei para a frente nas seções; acho que vi algo nos títulos, que provavelmente responderá à minha pergunta. Ainda estou lendo a seção de Abertura e Estabelecimento de Ordens.

A julgar pelas perguntas que você tem, você ainda não precisa escrever programas e também não precisa ler o que você está lendo agora.

Ugh, eu acho que tenho a estrutura do especialista.
Rapidamente rabiscado no vdp, aqui está:

Init

Início

Eu defino o número máximo de ordens abertas = 1;

Verifique quantos pedidos estão abertos;

se 1 estiver aberto, então eu chamo a função para fechar a ordem,

Se nenhum pedido for aberto, então eu chamo a função "calcular preço e número de lotes".

--------------------------

Necessário para calcular um preço favorável de compra e venda e para calcular o número de lotes;

--------------------------

consultando o preço atual;

se o preço atual >= preço de barganha para vender,

depois abrir uma ordem de venda igual ao número de lotes já determinado;

se não, compare o preço atual com o preço da licitação vencedora;

se o preço atual for <= Preço de licitação,

respectivamente, abrir uma ordem de compra;

--------------------------

Função de chamada para fechar o pedido;

retornar

deinit


Entendeu bem?
 
Climber:
Entendeu bem?

Bem, de modo geral :) Parabéns a você. É sempre bom entender algo mais.

Ainda assim, siga meu conselho: volte ao início e vá desde o início sem pular ou pular, executando metodicamente em seu PC todos os códigos sugeridos no tutorial.

 
Parabellum:

Há um indicador ROC interessante no livro - o indicador da taxa de variação de preço(https://book.mql4.com/ru/samples/iroc). Entendo que este livro é um livro de texto e o autor não é obrigado a dar código fonte de semi- ou mesmo de um quarto de grão, mas a idéia do indicador é muito boa, e eu o afinei um pouco para tornar o atraso ainda mais fraco.

A propósito, o texto do indicador publicado na própria página tem duas impressões errôneas no código e, portanto, é incompilável.
      Line_4[i]=(Line_1[i]+Line_2[i]+Line_3[i])3;// Суммарный массив
      //-------------------------------------------------------- 17 --

      Line_5[i]= Sum(Aver_Bars+1); // Индик. массив сглаженной линии
Falta duas vezes o caráter de divisão (desapareceu durante a criação do arquivo html?).
O arquivo indicador vinculado no texto é normal.
 
SK. писал (а):

Bem, de modo geral :) Parabéns a você. É sempre bom entender algo mais.

Ainda assim, siga meu conselho: você precisa voltar ao início e ir desde o início sem pular e pular, executando metodicamente em seu PC todos os códigos sugeridos no tutorial.


Sim, concordo, é muito importante ver e sentir qualquer resultado do que você lê, isto é, quando ele é fixado na memória a longo prazo, ainda mais sob a influência de conteúdo emocional, mais de uma associação aparece:) A propósito, também queria enfatizar que, para estimular o interesse, é necessário voltar atrás ou usar os capítulos mais importantes, então o próprio interesse levará ao objetivo e expandirá o círculo de conhecimento. O mais difícil em nossa situação é entender o que é interessante à medida que vamos avançando, para chegarmos à ordem que será mais eficaz, pois vemos a eficácia de tudo o que possuímos. Relacionaria a operação da memória associativa com a memória guiada, onde existe uma área distribuída desde que haja pelo menos um link (associação) para ela, quanto mais links, mais provável que a área não seja liberada, garantindo assim sua utilização e subsequente utilidade. É necessário, portanto, reabastecer constantemente o estoque das associações a fim de consolidar o que você leu.

P.S.: Desculpe se fui longe demais:)

 
timbo: A propósito, o texto indicador publicado na própria página tem dois erros de digitação no código e, portanto, é incompilável.
      Line_4[i]=(Line_1[i]+Line_2[i]+Line_3[i])3;// Суммарный массив
      //-------------------------------------------------------- 17 --

      Line_5[i]= Sum(Aver_Bars+1); // Индик. массив сглаженной линии
O símbolo de divisão está faltando duas vezes (desapareceu ao criar o arquivo html?).
O arquivo indicador vinculado no texto é normal.


Sim, existe tal coisa. Nos códigos fonte ainda não foram detectados erros, mas os códigos de texto estão estragados em alguns lugares por alguma razão. Vamos resolver isso.
 
xnsnet:

P.S.: Desculpe se exagerei:)

:) Sim, um pouquinho lá)))
 
Há também uma pequena nota sobre o livro. É melhor usar exemplos da vida real, não em gatos, mas em dinheiro ou coisas que são relevantes. Por exemplo, quando cheguei aos operadores de loop, o exemplo com ovelhas o distrai um pouco, você começa a pensar em como ele pode ser usado em nossas condições, e isto distrai do processo de percepção.

Já estou tendo dificuldades com os laços (vou voltar a estas seções mais de uma vez), e depois há aquelas ovelhas.

Apenas minha opinião, se for considerado um exemplo específico de negociação (quase invasão:), ok, negociação, então se o leitor encontrar um exemplo semelhante a sua idéia (que ele não sabe como implementar), ele irá com grande interesse considerar este exemplo e pensar como modificá-lo e personalizá-lo para implementar sua idéia (acho que você sabe o que quero dizer).

Eu tinha tal exemplo, eu estava interessado em como abrir um pedido de 1/3 do saldo. Você não pode imaginar que tipo de operações matemáticas foram realizadas na minha cabeça para converter 1/3 em dólares, de modo que eu consegui a soma em lotes (0,1 ou 3,5 lotes...). E como fiquei feliz quando vi um exemplo deopenbuy.mq4, que abre uma ordem de compra no valor de 35% dos fundos disponíveis, com alguns valores especificados de ordens de parada. Olhei através dele, estudando cada linha, o quê, por quê e onde. Eu olhei as funções padrão utilizadas nele (MathFloor, MarketInfo. ....).