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

 
Tretyakov Rostyslav #:

Obrigado!

 
Tretyakov Rostyslav #:

Hi

    if(OrderSelect(FindTicketOrder(), SELECT_BY_TICKET,MODE_TRADES)) 
    { 
      if(OrderProfit()<=-x);
        {
         OrderClose(FindTicketOrder(),OrderLots(),OrderClosePrice(),iSlippage,clrPink);
        }
    } 
  else 
    Print("OrderSelect() вернул ошибку - ",GetLastError());

Tenho uma ordem de lucro em um bilhete, quero fechar quando ele chegar a -x.

Mas recebo todos os pedidos fechados de seguida.

Você pode me dizer como fazer isso corretamente?

 
Alexander Avksentyev #:

Hi

Tenho uma ordem de lucro em um bilhete, quero fechar quando ele chegar a -x.

Mas recebo todos os pedidos fechados de seguida.

Você pode me dizer como fazer isso corretamente?

Tente fazer desta maneira

 int min_ticket=FindTicketOrder();
    if(OrderSelect(min_ticket, SELECT_BY_TICKET,MODE_TRADES)) 
    { 
      if(OrderProfit()<=-x);
        {
         OrderClose(min_ticket,OrderLots(),OrderClosePrice(),iSlippage,clrPink);
        }
    } 
  else 
    Print("OrderSelect() вернул ошибку - ",GetLastError());

Em geral, você deve desenvolver toda a função para entender o que você está fazendo

//+------------------------------------------------------------------+
void Функция()
  {
   ...твой код, возможные ошибки;
  }
//+------------------------------------------------------------------+
 
Alexander Avksentyev #:

Hi

Tenho uma ordem de lucro em um bilhete, quero fechar quando ele chegar a -x.

Mas recebo todos os pedidos fechados de seguida.

Você pode me dizer como fazer isso corretamente?

Como você consegue fechar todos os pedidos se eu só vejo uma chamada OrderCloseClose?

Não está muito claro onde este código é chamado... O algoritmo do robô também não é claro...
 
Mihail Matkovskij #:

Como fechar todos os pedidos se eu só vejo uma chamada OrderCloseClose?

Encerra um pedido assim que é aberto

 
Tretyakov Rostyslav #:
Isso não é o que você queria - é um exemplo. Eu estava fazendo um EA para comércio semi-automatizado.


O que você quer você mesmo tem que escrever).

Se houver alguma coisa, eu ajudarei.

Portanto, descreverei mais especificamente o que preciso para este Painel de Ordens Rápidas Pendentes EA, encontrei parcialmente peças de código desta lista (20%), mas o resto precisarei perguntar a vocês, colegas.


1) Shell: exibir como tal uma placa com botões na tabela: BUY_lp(lower ASK in___pips), SELL_hp (higher BID in___pips) - número em pips inseridos manualmente na placa, BUY_lt (lower ASK up to____seconds),SELL_ht (higher BID up to____seconds) - número em segundos inseridos manualmente na placa, CLOSE_buys, CLOSE_sells - fechar todos os pedidos.

a) código para criar um botão no gráfico; o placar como um objeto de fundo;

b) código para inserir valores neste placar (pips, segundos) campos especiais para isso

c) salvar o valor de pips em um determinado arquivo de memória onde o preço é fixo após o botão ser pressionado e o número de pips para o preço ao qual você deseja entrar no mercado é adicionado ou subtraído;

d) salvar o valor de segundos em um determinado arquivo de memória, onde o valor mínimo/máximo do preço para o período "em segundos" selecionado é contado continuamente;

2) dentro: execução.

a) ler o valor em pips e preço fixo do arquivo, após pressionar o botão BUY_lp ou SELL_hp, a fim de compará-lo com o preço atual;

b) quando o botão BUY_lt ou SELL_ht é pressionado, o valor em segundos e o preço máximo/mínimo alterado é lido do arquivo para que seja comparado com o preço atual;

c) quando o preço atual atingir o valor requerido - entrar no mercado (ordem em aberto);

d) botão para fechar a ordem ou todas as ordens. Este botão deve funcionar diferentemente dependendo do modo de execução; se o preço foi inserido por "pips", então, após fechar por um número igual de pips, o preço de fechamento deve ser diferente na direção "melhor" (esperando por esse preço após pressionar "fechar"), se o botão é "por segundos", então o melhor preço deve ser calculado para um determinado período (esperando por esse preço, mas não mais baixo/mais alto no momento em que você pressionou o botão).

 
Alexander Avksentyev #:

Fecha a ordem assim que ela abre

Bem, sim. O lucro tem sempre um valor negativo no momento em que é inserido por causa do spread... Tente diminuir o valor de x.

E é melhor fazer seu próprio cálculo de lucro em pips (é claro, se você não quiser colocá-lo na moeda do depósito).
 
Mihail Matkovskij #:

Bem, sim. O lucro tem sempre um valor negativo no momento da entrada por causa da dispersão... Tente reduzir o valor de x.

-x menos que spread, saída para impressão

if(OrderProfit()<=-x);

será verdadeiro se as condições corresponderem. adicionando um comando de fechamento. fecha imediatamente

 
Mihail Matkovskij #:

Bem, sim. O lucro tem sempre um valor negativo no momento após a entrada devido à presença de spread... Tente reduzir o valor de x.

E seria melhor fazer sua própria função para calcular o lucro em pips (é claro, se você não quiser colocá-lo na moeda do depósito).

Você pode fazer isso com pontos, não faz muita diferença. Eu só queria tornar mais simples

 
Alexander Avksentyev #:

-x menos que spread, saída para impressão

será verdade se as condições corresponderem. Acrescento um comando de fechamento. fecha imediatamente

Então a condição deve ser falsa, de acordo com você...?

O spread é medido em pips e OrderProfit retorna um lucro na moeda do depósito, dependendo do volume de entrada.

Você vê onde você conseguiu o mal-entendido?

Razão: