Auto-aprendizagem da linguagem MQL5 a partir do zero - página 66

 
Valeriy Yastremskiy:

O operador do laço e os operadores no corpo do laço. Não exatamente russo clássico.

Tudo é bom, é claro, mas onde está o iterador i no corpo do loop? E para obter o símbolo de posição e seu número mágico, ele tem que ser selecionado primeiro. A descrição da posição é uma estrutura (na MQL5 toda a estrutura e ordens e tempo e negócios) e é preenchida através da seleção, pelo iterador que não é um bilhete de posição, mas um número de posição. E devemos lembrar que na estrutura de descrição da posição, é sempre a última seleção de posição.

Olá Valery! Obrigado pelo esclarecimento.

Foi aí que entrou toda a minha confusão, porque tudo funcionou sem o operador de loop, enquanto não funcionou com ele por alguma razão. Fiz bem em primeiro lugar todas as consultas necessárias através de solicitação?

Cumprimentos, Vladimir.

 
MrBrooklin:

Olá Valery! Obrigado pelo esclarecimento.

Era aí que residia toda a minha confusão, porque tudo funcionava sem o operador de loop, mas com ele, por alguma razão, não funcionava. Será que eu fiz bem em fazer todas as consultas necessárias primeiro por solicitação?

Cumprimentos, Vladimir.

Não, eu não conheço bem a MKL5 . Este é um pedido de execução. E você precisa selecionar uma posição por seu número, a fim de trabalhar com ela.

PositionSelect

Eu acho que sim.

 
MrBrooklin:

Bom dia e bom humor para todos!

Caros profissionais! Por favor, me aconselhe, mas não por palavras, senão nunca aprenderei a linguagem de programação MQL5.

Cumprimentos, Vladimir.

Olá! A questão é que você aplicou o loop de posições abertas e não o definiu em termos de "se", ou seja, o que exatamente o loop procura, e ainda não o completou, ele deve retornar algo...

As posições abertas são contadas o tempo todo, então é melhor criar um bloco com um loop, e quando você o abre, você pode chamá-lo, por exemplo, desta forma;

input int MaxOpenedPositions=1;
.
.
.
int Total=TotalPositions(-1);
if(Total<MaxOpenedPositions && другие условия для открытия) OpenBUY();//например
if(Total<MaxOpenedPositions && другие условия для открытия) OpenSELL();//например

//+------------------------------------------------------------------+
//| Total Positions                                                  |
//+------------------------------------------------------------------+
int TotalPositions(int Type)
   {
int cnt=0;
if(PositionsTotal()>0)
for(int i=PositionsTotal()-1;i>=0;i--)
   
if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetString(POSITION_SYMBOL)==_Symbol && PositionGetInteger(POSITION_MAGIC)==MagicNumber) 
   {
   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) {cnt++;continue;}
   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) {cnt++;}
   }
   return(cnt);
   }
 
Valeriy Yastremskiy:

não, eu realmente não conheço MKL5 . Este é um pedido de execução. E você precisa selecionar uma posição por número, a fim de trabalhar mais com ela.

PositionSelect

Eu acho que sim.

Experimentei tudo, inclusive o PositionSelect. Nenhum deles ajudou.

Cumprimentos, Vladimir.

 
VVT:

Olá! com palavras; a questão é que quando você aplicou loop de posições abertas, você não especificou em condições de "se", ou seja, o que exatamente o para loop está tentando, também não terminou de forma alguma, deve retornar algo...

As posições abertas são calculadas o tempo todo, então é melhor criar um bloco com um laço e chamá-lo quando você o abre, por exemplo;

Olá!

Obrigado pela dica. Vou tentar analisar e aplicar seu método de enumeração de posições em aberto.

Cumprimentos, Vladimir.

 
VVT:

Olá! Em palavras; a questão é que quando você aplicou o loop para procurar posições abertas, você não especificou no "se", ou seja, o que exatamente o loop procura, e você não o terminou de forma alguma, ele deve retornar algo...

A propósito, a Referência MQL5 não diz nada sobre o fato de que o laço deve retornar algo após a conclusão. Talvez, eu tenha entendido algo errado? Ou talvez se refira à declaração do "se"?

Com os melhores cumprimentos, Vladimir.

 
MrBrooklin:

Experimentei tudo, inclusive o PositionSelect. Nada ajudou.

Cumprimentos, Vladimir.

Somente entendido, sim, a seleção de posição na rede por ferramenta, não por número. Oh, eles estragaram tudo).

É possível através de

  • PositionGetTicket devolve o bilhete de posição por número de posição (e nós temos um número) e após receber o bilhete de posição podemos obter seu símbolo e magik.
Ou, se for uma rede, podemos pensar sobre isso e decidir porque precisamos do número total de pedidos ou posições, se podemos ter apenas uma posição em um instrumento e precisamos conhecê-la. É por isso que talvez não precisemos de um ciclo. Em nosso instrumento fazemos Se o PositionSelect retorna Falso, ele abre uma posição e se Verdadeiro, ele seleciona uma posição neste instrumento e nós podemos trabalhar com ele e modificá-lo para o arrasto.
 
Valeriy Yastremskiy:

Acabamos de perceber, sim, a seleção de posição na rede por instrumento, não por número. Oh, eles estão confusos).

É possível através de

  • PositionGetTicket devolve um bilhete de posição por número de posição (e nós temos um número) e obtendo o bilhete de posição, podemos obter seu símbolo e magik.
Ou, se for uma rede, podemos pensar sobre isso e decidir porque precisamos do número total de pedidos ou posições, se podemos ter apenas uma posição em um instrumento e precisamos conhecê-la. É por isso que talvez não precisemos de um ciclo. Em nosso símbolo, fazemos Se o PositionSelect retorna Falso, ele abre uma posição e se Verdadeiro, ele seleciona uma posição sobre este símbolo e podemos trabalhar com ele e modificá-lo para arrasto.

Portanto, o código foi originalmente escrito sem o operador de laço, embora eu estivesse curioso para experimentá-lo mais tarde.

Cumprimentos, Vladimir.

 
MrBrooklin:

A propósito, não há nada na Referência MQL5 sobre o fato de que o laço deve retornar algo após a conclusão. Talvez eu tenha me enganado novamente...

Atenciosamente, Vladimir.

As ações devem ser realizadas no corpo do laço, dependendo do iterador. Dependendo do iterador. E é o resultado da realização dessas ações no corpo do loop que deve ser devolvido. Se o laço foi passado e não houve nenhuma quebra ou operadores de contingência, significa que iremos para a Expressão 3 e depois para a Expressão 2 e se for Verdadeiro, o devolveremos com o novo iterador ao corpo do laço.

 
MrBrooklin:

Assim, originalmente o código foi escrito sem o operador de laço, embora eu estivesse então interessado em tentar aplicá-lo.

Com todo o respeito, Vladimir.

Você pode solicitar

  • PositionGetTicket devolve um bilhete de posição por número de posição (e nós temos um número) e tendo recebido o bilhete de posição, podemos obter seu símbolo e magik.

Percorrer todas as passagens por número. E através dos bilhetes descubra os símbolos da posição e compare com os nossos. Obtenha a posição magik e compare com a nossa.

if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetString(POSITION_SYMBOL)==_Symbol && 
PositionGetInteger(POSITION_MAGIC)==MagicNumber) // вот эта строчка

Mas apenas por quê.