Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 84

 
trader781:

Então, por favor, responda minha pergunta anterior

1) Escrever um conjunto de estruturas

2) Transferência para outras funções

3) Recuperando e comparando elementos de uma série de estruturas

4) imprimir um conjunto de estruturas

É importante para mim escrevê-lo na forma de código para que eu entenda como ele deve ser.

Tudo depende da tarefa em mãos. Como as tarefas podem ser tão diferentes quanto você quiser, o que deve ser mostrado?

Bem, vou escrevê-lo, vou perder meu tempo e o que eu escrevi é quadrado. E o buraco é triangular. E onde eu coloco a quadrada então?

 
Artyom Trishkin:

Tudo depende da tarefa em mãos. Como as tarefas podem ser tão variadas quanto você quiser, o que deve ser mostrado?

Bem, vou escrevê-lo, perder meu tempo, mas o que eu escrevi é quadrado. E o buraco é triangular. Onde eu coloco a quadrada então?

vamos assumir o posto 699 e cerca de

como passar isso para outras funções e comparar um elemento da estrutura com o anterior

para que eu possa tomar qualquer pedido em ordem e emitir todos os valores para a impressão

A diferença é que não é um número e existem diferentes regras de registro.

 
trader781:

vamos assumir o posto 699 e cerca de

como passar isso para outras funções e comparar o elemento estrutura com o anterior

e assim posso tomar qualquer pedido em ordem e imprimir todos os valores

A diferença é que não se trata de um número e aplicam-se regras de escrita diferentes.

Você precisa passar por todas as ordens necessárias.

Após determinar a próxima ordem necessária, você aumenta a matriz em 1, e registra todos os dados sobre esta ordem em sua nova célula. A própria célula da matriz é preenchida com o tempo de abertura do pedido (se você estiver procurando por pedidos fechados, então, tempo de fechamento). O restante dos dados deve ser escrito nos campos da estrutura.

Após o término do loop, ordenar a matriz em ordem ascendente de valores.

Você deve fazer isso primeiro. O resto pode ser discutido mais detalhadamente.

 
Vitalie Postolache:

Este não é um problema que possa ser resolvido dentro de um único ciclo.

Obrigado.

 
Artyom Trishkin:
//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct myorder
  {
   int               Ticket;
   double            orderopenprice;
   int               ordertype;
   double            profit;
   double            stoploss;
   double            lot;
  };
myorder orders[][5];

int    i;
int    Magic=444;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   CalcOrders();

  }
//+------------------------------------------------------------------+
void CalcOrders()
  {
   int count1=-1;
   ArrayResize(orders,AccountInfoInteger(ACCOUNT_LIMIT_ORDERS),10);
   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
        {
         count1++;
         orders[count1][0].Ticket=OrderTicket();
         orders[count1][1].lot=OrderLots();
         orders[count1][2].orderopenprice=OrderOpenPrice();
         orders[count1][3].ordertype=OrderType();
         orders[count1][4].profit=OrderProfit();
         orders[count1][5].stoploss=OrderStopLoss();
        }

     }
   ArraySort(orders,WHOLE_ARRAY,0,MODE_ASCEND);

  }
//+------------------------------------------------------------------+
Arquivos anexados:
test.mq4  3 kb
 
trader781:

Eu coloquei seu código em seu posto.

Agora, se você começar a resolver isso

  1. Por que você transformou o conjunto de estruturas em um conjunto multidimensional?
  2. Por que você mudou o tamanho da matriz da estrutura em função CalcOrders() para"Número máximo permitido de ordens pendentes"? Se você abrir sua ajuda (o que você deve sempre fazer), verá que este identificador(ACCOUNT_LIMIT_ORDERS) pode retornar zero, o que significa que não há limite para o número de ordens pendentes . O tamanho da matriz deve ser zero antes do laço.
  3. Por que você não está aumentando o tamanho da matriz no loop?
 
Artyom Trishkin:

Eu coloquei seu código em seu posto.

Agora, se você começar a resolver isso

  1. Por que você fez de um conjunto de estruturas um conjunto multidimensional?
  2. Por que você muda o tamanho da matriz da estrutura na função CalcOrders() para"Número máximo permitido de ordens pendentes ativas"? Se você abrir sua ajuda (o que você deve sempre fazer), verá que este identificador(ACCOUNT_LIMIT_ORDERS) pode retornar zero, o que significa que não há limite para o número de ordens pendentes . O tamanho da matriz deve ser zero antes do laço.
  3. Por que você não está aumentando o tamanho da matriz no loop?

1) achou que o número de parâmetro X de ordem Y é mais apropriado para a tarefa em questão

2) Eu o tenho igual a 50 ou 100, dependendo do tipo de conta, e nada mais

3) portanto, secontarmos 1++; aumentará a cada passagem, e a matriz adquirirá seu valor

 
trader781:

1) considerou que o número de parâmetro X de ordem Y é mais apropriado para esta tarefa

2) é igual a 50 ou 100, dependendo do tipo de conta, e nada mais

3) portanto, secontarmos 1++; aumentará a cada passagem, e a matriz adquirirá seu valor

1. Para que serve então a estrutura?

2. Você precisa deste parâmetro para uma série de posições de mercado "o que foi e o que foi"... A matriz antes do laço deve ter um tamanho zero .

3. É isso mesmo. A matriz tem um tamanho zero no início. A cada novo pedido encontrado, o conjunto torna-se igual em tamanho ao número de pedidos que você precisa.

 
Artyom Trishkin:

1) Para que serve então a estrutura?

2. Você precisa deste parâmetro para a gama de posições de mercado "o que foi e o que foi". A matriz antes do laço deve ter um tamanho zero .

3. Isso mesmo. A matriz tem um tamanho zero no início. A cada novo pedido encontrado, o conjunto torna-se igual em tamanho ao número de pedidos que você precisa.

1) o compilador reclamará se a segunda dimensão não for colocada, "especificar tipo de classe, parâmetros desconhecidos" surgirá imediatamente

2) o bot morrerá imediatamente no lançamento com "matriz de erros críticos fora de alcance".

3) setint count1=-1; depois passar pelo laço. O que há de errado aqui?

 
trader781:

1) o compilador irá reclamar se a segunda dimensão não estiver definida

2) então o bot morrerá imediatamente na partida com "matriz de erros críticos fora de alcance".

3) imediatamente definirint count1=-1; O que há de errado aqui?

É só para dizer que uma das dimensões deve ser removida. Você está declarando uma matriz unidimensional e quer escrevê-la em uma bidimensional. O que você obterá como resultado? Você receberá um erro do compilador, é claro.

2. Você tem que preencher a matriz corretamente no laço, e não apenas dar-lhe alguma variável de tamanho aleatório e depois enfiar algumas coisas de tamanho aleatório nela.

3. você é quem define a variável como -1. E a matriz deve ter tamanho zero antes do laço. O que você não entende?

Vamos jogar um jogo de associação:

  • Imagine que você tem um balão deflacionado (matriz vazia) que tem volume interno zero (tamanho da matriz zero). Dentro deste balão (na matriz) você quer colocar moedas (as ordens que você quer). Aqui, cada moeda, uma vez que você decidir que é apropriada para ser armazenada no balão (cada ordem desejada encontrada), aumentará o volume interno do balão (somente a própria moeda esticará o balão, e você precisa fazê-lo você mesmo - aumente o tamanho da matriz em 1 e enfie uma ordem nele).
    No final, quando você tiver encontrado todas as moedas e as amontoou na bola, ela não será deflacionada - seu volume interno foi esticado pelas moedas (ao final do ciclo de busca o tamanho da matriz será igual ao número de ordens necessárias encontradas, pois você aumentou o tamanho da matriz em 1 com cada ordem necessária encontrada).

    Agora imagine que, inicialmente, você coloca suas moedas não em uma bola, que é de borracha e pode mudar seu tamanho, mas em uma pequena caixa de dinheiro que tem um tamanho limitado (você inicialmente definiu o tamanho da matriz e não a aumentou mais). O que vai acontecer? Nem todas as moedas caberão no porquinho mealheiro. O balão irá.

Aqui está uma associação para você.
Razão: