Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 21

 
bablusut:

Obrigado pela resposta ... Assim, para buscar ordens no histórico comercial, usamos a funçãoOrdersHistoryTotal, que, depois de descartar tudo o que não precisamos, se parece com isto

for(int i=OrdersHistoryTotal()-1; i>=0; i--) // - a questão aqui é o que significa "accTotal"no modelo de função que descartamos, e por que você tomou "i--" e não "i++"como no modelo?
- a segunda funçãoOrderComment retorna o comentário da ordem selecionada se ela for selecionada pela função anteriorOrderHistoryTotal, toma a forma

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) //- onde "i", este é "i>=0" da função anterior, e "SELECT_BY_TICKET" foi substituído por "SELECT_BY_POS" e "MODE_HISTORY"foi adicionado- por quê?

- A terceira linha é a definição, na verdade não precisamos verificar a ordem necessária, uma vez que só temos ordens de mercado fechadas por TP e SL nesta história (podemos ter uma ordem pendente fechada, mas será rara), todos os outros parâmetros de ordem não são importantes para nós. A única coisa importante é que a quantidade de ordens fechadas na história aumentará constantemente, é possível fazer com que nosso recálculo não leve todas as ordens fechadas, mas uma certa quantidade das últimas, por exemplo, 5-10?

- As últimas quatro linhas são bastante claras, a única questão é sobre a função PlaySound, cujo código deve ser inserido após cada linha"Print("..." como esta



OrderComment retorna o comentário da ordem selecionada, se ela for selecionada pela função anteriorOrdersHistoryTotal - esta função não seleciona nada - ela retorna o número total de ordens fechadas e excluídas(O número de ordens fechadas e excluídas no histórico da conta corrente, carregadas no terminal do cliente). O tamanho da lista do histórico depende das configurações atuais da guia "Histórico de contas" do terminal. Citação do tutorial).


accTotal no exemplo do tutorial:

int i,accTotal=OrdensHistóriaTotal(); - Esta é uma variável int - tomando valor OrdensHistóriaTotal
for(i=0;i<accTotal;i++)// Como percorrer a lista do histórico não é importante da primeira à última ordem ou vice-versa, ela ainda percorre toda a lista em seqüência.

Mas no caso anterior, há 1 variável a menos, mas o pedido OrderHistoryTotalé processado em cada ciclo.

SELECT_BY_POS - o parâmetro índice contém o número do índice da ordem na lista, a lista em si é o segundo operador - MODE_HISTORY é a lista de fechado, MODE_TRADES - aberto ou pendente. SELECT_BY_TICKET - o número do bilhete é passado no parâmetro de índice. O que deve ser levado a algum lugar antes de selecionar a ordem.


- As

últimas quatro linhas são geralmente claras, a única questão é sobre a função PlaySound, cujo código deve ser inserido após cada linha "Print(

"...

" na seguinte forma:

bool PlaySound(

string payment // file name

)

; ..

.

Ou também é convertido de alguma forma?

Declare

bool PlaySound( no cabeçalho do programa - você terá a possibilidade de ligar e desligar o som no arquivo externo do set bool Play = TRUE;

então o que será impresso? E sob quais condições?

Qual é o objetivo desta ação? Tocar um som quando o pedido é fechado e escrever o comentário (por TP ou SL)?






 
bablusut:
Graças aVitalie Postolache pela ajuda, graças aos conselhos, e as informações sobre estes livros didáticos provavelmente é um pouco tarde para eu estudar na minha sexta década, provavelmente não posso fazer tanto, deveria ter feito mais cedo, mas não houve tempo. Estou realmente aborrecendo você aqui, desculpe se isso, eu não vou continuar, vou embora.
Prefiro ter um tópico separado, quero que funcione assim. Estarei interessado, por exemplo, em ver diferentes opções e também em entender qual delas é mais correta do ponto de vista da lógica.
 

A propósito, eu também tenho uma pergunta.

Preciso passar um cheque de spread.

Tenho utilizado uma simples solicitação de seu valor e proibição para abrir um pedido se o spread exceder o valor especificado.

Mas o que aconteceu é que quando a propagação está diminuindo, a EA abre uma ordem e essa propagação aumenta.

Agora não consigo encontrar a maneira correta de levar isso em conta: se adicionarmos o spread à matriz a cada tick, qual será o tamanho da matriz? Então, por quanto tempo vai durar?

É claro que não podemos usar valores semelhantes ou usar apenas valores menores e maiores, mas neste caso temos que zerá-lo de alguma forma.

E o mais importante, não consigo entender se devo levar em conta o spread mínimo e máximo ou uma indicação de seus saltos.
 
struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };
Você pode me dizer qual valor de Spread será salvo? O estado no início da abertura do bar?
 
A1exPit:
struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };
Você pode me dizer qual valor de Spread será salvo? É o estado no início da abertura do bar?

int spread;// spread

ou seja, não

 
A1exPit:
struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };
Você pode me dizer qual valor de Spread será salvo? É o estado no início da abertura do bar?
Se for solicitada a barra atual, então o spread atual, se do histórico, então no momento do fechamento.
 
Vitalie Postolache:
Se você perguntar pela barra atual, então o spread atual, se da história, então no momento do fechamento.
Obrigado.
 

Entendo corretamente, que para escrever dados na matriz, você precisa atribuir a cada célula uma matriz de valores diferentes1[i] = x; indicando um número de célula específico

ou a matriz pode ser preenchida sequencialmente a partir de i=0?

 
A1exPit:

Entendo corretamente, que para escrever dados na matriz, você precisa atribuir a cada célula uma matriz de valores diferentes1[i] = x; indicando um número de célula específico

ou a matriz pode ser preenchida sequencialmente a partir de i=0?

qual é a diferença? me parece que estas são apenas duas maneiras diferentes
 
Renat Akhtyamov:
Qual é a diferença? Eu acho que são apenas dois caminhos diferentes.
Eu quis dizer que quando você passa dados para um array, ele se preencherá seqüencialmente, ou seja, array1[] = x; para qual célula será escrito o valor de x se o número da célula não estiver explicitamente especificado?
Razão: