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

 
Valeriy Yastremskiy:

Obrigado. Vou tentar. Não sei se vai funcionar).

 
Tenho ordens abertas e fechadas.
1. Ao abrir um pedido, preciso escrever seu Ticket em um array, se o array estiver desocupado (provavelmente =0), para que eu possa relatar a partir dele mais tarde no overshoot.
2. Após o fechamento da ordem (pode não ser fechada), deve ser iniciado o relatório sobre o lucro das ordens fechadas. Quando um certo lucro é alcançado, ou seja: lucro + Take Profit >= lucro de uma ordem aberta (chamemos de Ordem 123), aberta mais cedo do que todas as outras, ou com uma perda máxima (ainda não decidi).
3. Se as condições forem cumpridas: "soma de lucro + lucro taka >= lucro da ordem aberta(vamos chamar a ordem 123)", a ordem 123 é fechada e a matriz é zerada(provavelmente torna-se = 0 ).

1. Quando você coloca uma EA, você já tem ordens abertas e fechadas que deseja levar em conta ou não e a EA sempre começa sem ordens abertas e não leva em conta as ordens abertas já fechadas?

2. Não está nada claro. Quando uma ordem é fechada, o lucro total é calculado e há os dados de lucro da ordem fechada. E há os dados sobre os lucros das encomendas que não estão fechadas; você pode calculá-los. O que é comparado com o que. Por exemplo, temos 3 pedidos. 1 está fechado, 2 está sendo fechado, 3 está aberto. Temos os perfis Pr1, Pr2 e o Pr3 estimado. Nós comparamos o que com o que. Entendemos que não levamos em conta as comissões e as trocas quando o pedido não é fechado.

3. Na verdade, se você zerar a matriz com os bilhetes, o que acontecerá a seguir? As ordens do mercado permanecerão no mercado. Como fechá-los?

 
Oksana_Timakova:
Pergunta: como manter o valor da barra alta ae barra baixa b paraconectá-las a uma linha indicadora?
Preciso criar duas matrizes adicionais para isso?
Sim. Matrizes de amortecedores.
 
Valeriy Yastremskiy:
Sim. Matrizes de amortecedores.
Portanto, é o mesmo que em ZigZag. E você tem que aplicar alguma função especial para não desenhar dois deles?
 
Oksana_Timakova:
Então, acontece como em ZigZag. E você tem que aplicar alguma função especial para não desenhar dois deles?
O tipo de linha é o mesmo. Eu não entendo o que não desenharia. Você declara 2 matrizes de proteção. Você define as propriedades. Este é o tipo de linha, cor da espessura. E você atribui o primeiro preço alto e o segundo Baixo por barra da série temporal.
 
Valeriy Yastremskiy:

1. Quando você coloca uma EA, você já tem ordens abertas e fechadas que quer levar em conta ou não, e toda vez que a EA começa sem ordens abertas e não leva em conta ordens previamente fechadas?

2. Não está nada claro. Quando uma ordem é fechada, o lucro total é calculado e há os dados de lucro da ordem fechada. E há os dados sobre os lucros das encomendas que não estão fechadas; você pode calculá-los. O que é comparado com o que. Por exemplo, temos 3 pedidos. 1 está fechado, 2 está sendo fechado, 3 está aberto. Temos os perfis Pr1, Pr2 e Pr3 estimados. Nós comparamos o que com o que. Entendemos que não levamos em conta as comissões e as trocas quando o pedido não é fechado.

3. Na verdade, se você zerar a matriz com os bilhetes, o que acontecerá a seguir? As ordens do mercado permanecerão no mercado. Como fechá-los?

Mais uma vez ))))

Temos ordens abertas, vamos assumir 5 ordens que são todas negativas. O primeiro (123), com 0,5 lotes, caiu em menos. Abrimos um novo pedido (456) com lote 0,1, o bilhete deste pedido é escrito para a matriz quando ela é aberta. Depois continuamos com outra série de pedidos com o mesmo lote; ganhamos alguns lucros e perdemos alguns. Mas o pedido 123 permanece negativo e aberto. Uma vez que o lucro de todas as ordens fechadas após o pedido 456 (também é fechado) é maior que o lucro do pedido 123, encontramos o pedido 123, pois é o primeiro pedido que ainda está aberto, fechando-o e zerando a matriz.

Se tivermos várias ordens em aberto, abrimos mais uma sob certas condições. Suponha que se o pedido fosse >=5

Encomenda (bilhete 456)

se o pedido for aberto com sucesso

se a matriz não estiver ocupada

bilhete 456 é escrito para a matriz

A ordem 456 fechou com lucro (não importa o lucro ou prejuízo), depois que outras ordens foram abertas e fechadas, mas a matriz armazena o bilhete 456.


CalCloseProfi () - esta função verifica o lucro dos pedidos fechados

passa pelos pedidos fechados por magia, compra, vende, a partir do pedido com o ticket 456 (retirado da matriz) e para cima, e conta seu lucro


FirstOrder() - esta função procura a primeira ordem em aberto (deve encontrar 123)

Se o perfilCalCloseProfi> FirstOrder, então feche o pedido 123 e zerne o array, para que ele possa escrever lá novamente quando as condições forem cumpridas.


Não sei mais como explicar isso)

As condições nas quais esta função será executada, posso escrever, mas não estou diante de arrays.
Preciso de um exemplo, como obter informações na matriz, ou seja, OrederTicket quando aberto, e como obtê-las depois.
É desejável usar uma matriz dupla e escrever o mágico em uma parte dela, para que quando se trabalha em uma conta em configurações diferentes não se misturem (ou talvez não, eu não sou bom em matrizes).

Obrigado de antemão

 
makssub:

Mais uma vez ))))

Há ordens em aberto, vamos supor 5, todas negativas. O primeiro (123), com 0,5 lotes, foi negativo. Abrimos um novo pedido (456) com lote 0,1, o bilhete deste pedido é escrito para a matriz quando ela é aberta. Depois continuamos com outra série de pedidos com o mesmo lote; ganhamos alguns lucros e perdemos alguns. Mas o pedido 123 permanece negativo e aberto. Uma vez que o lucro de todas as ordens fechadas após o pedido 456 (também é fechado) é maior que o lucro do pedido 123, encontramos o pedido 123, pois é o primeiro pedido que ainda está aberto, fechando-o e zerando a matriz.

Se tivermos várias ordens em aberto, abrimos mais uma sob certas condições. Suponha que se o pedido fosse >=5

Encomenda (bilhete 456)

se o pedido for aberto com sucesso

se a matriz não estiver ocupada

bilhete 456 é escrito para a matriz

A ordem 456 fechou com lucro (não importa o lucro ou prejuízo), depois que outras ordens foram abertas e fechadas, mas a matriz armazena o bilhete 456.


CalCloseProfi () - esta função verifica o lucro dos pedidos fechados

passa pelos pedidos fechados por magia, compra, vende, a partir do pedido com o ticket 456 (retirado da matriz) e para cima, e conta seu lucro


FirstOrder() - esta função procura a primeira ordem em aberto (deve encontrar 123)

Se o perfilCalCloseProfi> FirstOrder, então feche o pedido 123 e zerne o array, para que ele possa escrever lá novamente quando as condições forem cumpridas.


Não sei mais como explicar isso)

As condições nas quais esta função será executada, posso escrever, mas não estou diante de arrays.
Preciso de um exemplo, como obter informações na matriz, ou seja, OrederTicket quando aberto, e como obtê-las depois.
É desejável usar uma matriz dupla e escrever o mágico em uma parte, para que ao trabalhar em uma conta em configurações diferentes não seja misturado (ou talvez não, eu não sou bom em matrizes).

Obrigado de antemão

Escreva as condições para as funções.
 

Boa tarde. Você pode me dizer por que há um erro: matriz fora de alcance em '.......' (152,41)


ticket = OrderSend (Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, tpl, Magic, 0, Red);
if (ticket <1)
{
Print("Sell open error");
}
if (ticket >1 && SaveTick[1] <= 0 && SaveTick[0] == Magic)
{
FindTicket();
Print(" Encomenda de bilhetes: ", FindTicket(), " Order Array: ", SaveTick[1], " Array Magic: ", SaveTick[0]);
}

int FindTicket()
{
int oldticket;
int tick=0;
ticket=0;
ArrayResize( SaveTick, 2 );
for(int cnt = OrderTotal ()-1; cnt>=0; cnt--)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
ticket = oldticket;
tick = OrderTicket();
SaveTick[1] = tick;
SaveTick[0] = Magic;
}
}
}
}
return(tick);
}

 
makssub #:

Boa tarde. Você pode me dizer por que há um erro: matriz fora de alcance em '.......' (152,41)


ticket = OrderSend (Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, tpl, Magic, 0, Red);
            if (ticket <1)
            {
               Print("Ошибка открытия на продажу");
            }
               if (ticket >1 && SaveTick[1] <= 0 && SaveTick[0] == Magic)
            {
               FindTicket();
               Print(" Тикет ордера: ", FindTicket(), " Массив ордера: ", SaveTick[1], " Магик массива: ", SaveTick[0]);
    }

int FindTicket()
   {
   int oldticket;
   int tick=0;
   ticket=0;
   ArrayResize( SaveTick, 2 );
   for(int cnt = OrdersTotal ()-1; cnt>=0; cnt--)
      {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
         {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            {
            oldticket = OrderTicket();
            if (oldticket > ticket)
               {
               ticket = oldticket;
               tick = OrderTicket();
               SaveTick[1] = tick;
               SaveTick[0] = Magic;
               }
            }
         }
      }
   return(tick);
  }              

Insira o código corretamente, alt S ou por ícone, código de dica.

Por que você precisa doSaveTick array?

Você usa apenas 2 elementos da matriz. Substitua-os por variáveis globais ou estáticas se você as declarar em uma função.

Não é sensato usar uma matriz para 2 variáveis.

E você parece chamar arrays antes que a funçãoFindTick() seja chamada, onde o tamanho da matriz SaveTick é definido. E há um excesso da matriz.

 
Parou de funcionar 🤖?