Problemas com a atribuição de elementos de matriz 2D
Results 1 to 3 of 3

Thread: Problemas com a atribuição de elementos de matriz 2D

  1. #1
    O Attached faz parte de um Expert Advisor em que tenho trabalhado para examinar uma eégia de negociação, mas estou tendo alguma dificuldade com as limitações do MQL4 ao lidar com arrays. O que eu quero é usar uma matriz para armazenar informações sobre as situações que tenho abertas e além de redefinir os valores dos elementos. O que eu quero implementar é uma série de 3 funções que reconstrói a coleção de pedidos abertos. Isso pode ser feito após o fechamento ou a abertura de todas as posições. A próxima função deve classificar as ordens em aberto de acordo com seus respectivos preços de abertura. A função sequencial seria reavaliar o stop loss e obter valores de lucro. Os valores para evitar perdas e obter valores de lucro devem basear-se no preço inicial do pedido. Eu desejei que o EA executasse os valores de stop loss e take profit. Estou ciente de que há riscos em estabelecer um EA dessa maneira e, com isso, quero prosseguir.





    Double OrderStack [7] [9];/Matriz de informações do pedido


    if ((OrderStack [TotalOrders 1] [1] lt; Licitação) (TotalOrders lt; 2))/Abre a nova posição de Venda a preço mais favorável
    //3
    TicketNum = OrderSend (símbolo (), OP_SELL, LotSize2, lance, 3,0,0, CommentString, 0,0, vermelho);/Abra este pedido.
    Se (TicketNumlt; 0)
    //4
    Imprimir (Comércio de abertura de erro: Código de erro =, GetLastError (), Lotesize:, Lotes);
    //3
    outro
    //4
    if (OrderSelect (TicketNum, SELECT_BY_TICKET))
    //5
    Imprimir (ordem de venda aberta ao preço:, OrderOpenPrice ());
    OrderFlags = 1;/Usado pela função primária do EA para observações
    Terminal();/Chame para a função que produz uma matriz de dados de ordem aberta
    //4
    //3
    //2
    }/1
    }/0

    //------------------------------------------------ --------------------
    //Terminal.mqh
    //------------------------------------------------ ------------------------------ 1 -
    //Ordem da função de contabilidade
    //Variáveis ​​globais:
    //OrderStack [7] [9]
    //O último array de pedidos conhecidos
    //1º índice = número do pedido
    //[] [0] não definido
    //[] [1] ordem de preço aberto (abs. Valor do preço)
    //[] [2] StopLoss desta ordem (estômago) Valor de preço)
    //[] [3] TakeProfit desta encomenda (estômago) Valor de preço)
    //[] [4] número do pedido
    //[] [5] volume de pedidos em lotes (abs. Valor de preço)
    //[] [6] formulário de pedido 0 = B, 1 = S, 2 = BL, 3 = SL, 4 = BS, 5 = SS
    //[] [7] ordem número mágico
    //[] [8] 0/1 acessibilidade de observação
    //Mas_Tip [6]
    //Matriz do número de pedidos de todos os tipos
    //[] formulário de pedido: 0 = B, 1 = S, 2 = BL, 3 = SL, 4 = BS, 5 = SS
    //------------------------------------------------ ------------------------------ 2 -
    baralho duplo ()
    //1
    int Mas_Tip [6];
    int Qnt = 0;
    int eu;

    //Orders counter
    //------------------------------------------------ ------------------------------ 3 -

    ArrayInitialize (OrderStack, 0,0);/Zerar a seleção
    ArrayInitialize (Mas_Tip, 0);/Zeroize o array
    //------------------------------------------------ ------------------------------ 4 -
    for (I = 0; I lt; OrdersTotal (); I )/Para ordens de mercado e pendentes
    //2
    if ((OrderSelect (I, SELECT_BY_POS) == verdadeiro) (OrderSymbol () == Símbolo ()))
    //Quando houver o seguinte. . E o nosso par de moedas
    //3
    //------------------------------------------------ --------------------- 5 -
    Qnt ;/Quantidade de pedidos
    OrderStack [Qnt] [1] = OrderOpenPrice ();/Ordem de preço aberto
    OrderStack [Qnt] [2] = OrderStopLoss ();/preço do SL
    OrderStack [Qnt] [3] = OrderTakeProfit ();/preço TP
    OrderStack [Qnt] [4] = OrderTicket ();/Número do pedido
    OrderStack [Qnt] [5] = OrderLots ();/Quantidade de lotes
    Mas_Tip [OrderType ()] ;/Quantidade de pedidos do tipo
    OrderStack [Qnt] [6] = OrderType ();/Tipo de pedido
    OrderStack [Qnt] [7] = OrderMagicNumber ();/Número mágico
    if (OrderComment () ==)
    //4
    OrderStack [Qnt] [8] = 0;/Se não há absolutamente nenhum comentário
    //3
    outro
    //4
    OrderStack [Qnt] [8] = 1;/Se houver um comentário
    //3
    //2
    //------------------------------------------------ --------------------- 6 -

    OrderStack [0] [0] = Qnt;/Quantidade de pedidos

    //------------------------------------------------ ------------------------------ 7 -

    FillStack (OrderStack, Trend_Up);/Chamar para a função que classifica os dados de negociação aberta com base na direção da tendência e no preço inicial do comércio
    retorno (0);
    //1

    //0
    //------------------------------------------------ ------------------------------ 8 -




    //
    //Existing Orders Sorting Function
    //

    double SortStack (double OrderStack [7] [9], bool Trend_Up)/Função para classificar o array de ordem reconstruída em
    //ordem com base no preço inicial da ordem aberta
    //1
    int eu, TotalOrders;
    TotalOrders = OrderStack [0] [0];

    if (Trend_Up == true)
    //2
    ArraySort (OrderStack [TotalOrders] [1], TotalOrders, 1, MODE_DECEND);
    //1
    if (Trend_Up == falso)
    //2
    ArraySort (OrderStack [TotalOrders] [1], TotalOrders, 1, MODE_ASCEND);
    //1
    FillStack (OrderStack, Trend_Up);/Chamada para função que define parâmetros de negociação para efeitos adversos
    //negociações de mercado no array order
    retorno (0);
    //0

    //
    //Registra a Função dos Parâmetros de Negociação de Mercado Adversos
    //

    double FillStack (double OrderStack [7] [9], bool Trend_Up)/Define os Parâmetros de Negociação de Mercado Adversos
    //baseado no pedido inicial do piercing da banda Bollinger

    //1

    Preço duplo;

    PriceIn = OrderStack [1] [1];
    //2
    if (Trend_Up == true)
    //3
    OrderStack [1] [2] = Price In - StopLossVal;/Coluna 2, Coluna de entrada Stop Loss
    OrderStack [1] [3] = Preço em 0,0030;/Coluna 3, Coluna de entrada de lucro
    OrderStack [2] [1] = PreçoIn - 0,0010;/Coluna 1, preço médio de compra para baixo do preço de compra
    OrderStack [2] [3] = Preço em - 0,0005;/Coluna 3, Take Profit para Média de Entrada no Mercado
    //2
    if (Trend_Up == falso)
    //3
    OrderStack [1] [2] = Preço em StopLossVal;/Coluna 2, Coluna de entrada Stop Loss
    OrderStack [1] [3] = Preço em - 0,0030;/Coluna 3, Coluna de entrada de lucro
    OrderStack [2] [1] = PreçoIn 0,0010;/Coluna 1, preço médio de compra para baixo do preço de compra
    OrderStack [2] [3] = Preço em 0,0005;/Coluna 3, Take Profit para Média de Entrada no Mercado
    //2
    //1
    retorno (0);
    //0




    O problema que estou tendo com a implementação deste EA é que o compilador me dá mensagens de erro sobre ”o item de matriz não pode ser atribuído” para o código na minha função FillStack (). O que é desconcertante é que parece que é precisamente o que está sendo feito a partir da função Terminal () acima da minha função FillStack (). Eu estou esperando que um desses programadores experientes possa me dar uma cura para esse bug.
    É difícil acreditar que, com todas as semelhanças que o MQL4 tem em C , a capacidade de atribuir valores a elementos de matriz como C também não existiria no MQL4. Obrigado.

  2. #2

    OrderStack [0] [0] = Qnt;/Número de pedidos TotalOrders = OrderStack [0] [0];
    olá, apenas uma nota que reservar área para nove duplas para conselhos que podem ser mantidos em 1 inteiro, conforme revelado em seu texto citado é má administração à distância. Pesquise e descubra as funções de variedade a partir do arquivo de ajuda do MetaEditor (Navigator) e tenha sempre em mente que quanto mais informações estiverem flutuando, mais baixo o seu códigocomputador será executado.

  3. #3
    Este erro indica que uma gravação para uma matriz somente leitura. Como esse post é antigo, presumo que você não postou acompanhamento e descobriu uma solução ou encontrou uma solução alternativa. Código inserido duplo OrderStack # 91; 7 # 93; # 91; 9 # 93; função void (dual array # 91; # 93; # 91; # 93; -RRB- Alerta (tamanho do intervalo, ArraySize (range)); range # 91; 0 # 93; # 91; 0 # 93; = EURUSD;/error not allowed to write A chave para as matrizes de leituragravação passadas para servir está na instrução.O bloco de códigos não será por um erro.Código inserido double OrderStack # 91; 7 # 93; # 91; 9 # 93; function (# 91; color = Purple # 93; dual # 91;cor # 93; # 91; b # 93; #

Permissões de Publicação

  • Não pode publicar novos tópicos
  • Não pode publicar respostas
  • Não pode publicar anexos
  • Não pode editar as suas publicações
  •  
  • Código BB está Ativo
  • Smilies estão Ativos
  • Código [IMG] está Ativo
  • Código [VIDEO] está Ativo
  • Código HTML está Desligado
O site da tradingintuitivo utiliza cookies
O site da tradingintuitivo utiliza cookies, alguns já foram definidos. Pode ler sobre a nossa utilização de cookies aqui. Por favor, clique no botão à direita para aceitar os nossos cookies. Se continuar a usar o site da tradingintuitivo, vamos supor que aceita os nossos cookies.