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

 
Falx:

Bom dia a todos!

Por favor, dê-me uma ordem para que o robô não abra mais de 1 pedido por 1 vela.

Mesmo que ele tenha aceitado esta vela - não para abrir a próxima ordem na mesma vela.

Agora, se as condições dos indicadores forem cumpridas - abrir um comércio.

Quando um acordo sobre o take é fechado, ele abre imediatamente um novo negócio no mesmo castiçal, e aqui já é desnecessário para mim e cria problemas.

Sinto que é importante dar algum feedback.

Precisa estritamente de 1 vela - 1 negócio.

Muito obrigado de antemão!

Otempo para abrir uma posição, o tempo para fechar a posição - a vela em que este tempo e o tempo de abertura desta vela.
 
Falx:

Bom dia a todos!

Por favor, dê-me uma ordem para que o robô não abra mais de 1 pedido por 1 vela.

Mesmo que ele tenha aceitado esta vela - não para abrir a próxima ordem na mesma vela.

Agora, se as condições dos indicadores forem cumpridas - abrir um comércio.

Quando um acordo sobre o take é fechado, ele abre imediatamente um novo negócio no mesmo castiçal, e aqui já é desnecessário para mim e cria problemas.

Sinto que é importante dar algum feedback.

Precisa estritamente de 1 vela - 1 negócio.

Obrigado de antemão!

Você também pode usar a bandeira.

Declarar uma variável estática ou uma variável global, deixá-la ser bandeira. Ordem aberta - bandeira = verdadeira, um novo castiçal aberto - bandeira = falsa e acrescente esta bandeira à condição de abertura da ordem.

 
Alexey Viktorov:

Você também pode usar uma bandeira.

Declarar variável estática ou variável de nível global, deixá-la ser bandeira. Ordem aberta - bandeira = verdadeira, uma nova vela aberta - bandeira = falsa e acrescente esta bandeira à condição de ordem aberta.

A bandeira deve ser salva no terminal global e restaurada no seu reinício.
 
Artyom Trishkin:
A bandeira deve ser salva no terminal global e restaurada no seu reinício.

Depende do período em que o comércio está e da capacidade de reiniciar o terminal dentro de uma barra para abrir um pedido e reiniciar o terminal.

Eu não gosto da GV e tento passar sem ela. Quando você inicia uma EA, você deve reunir todas as informações sobre pedidos abertos de qualquer maneira, então por que não restaurar o valor da bandeira na inicialização? Esta é uma opção. A segunda variante é que o valor inicial da bandeira proíbe a abertura de pedidos e somente a próxima barra dará permissão. Portanto, mesmo se abrirmos e reiniciarmos a EA no bar atual, a bandeira nos proibirá de abrir pedidos até o próximo bar.

Se você der tais conselhos com tais sutilezas, não terá que pensar em nada. Assim, o número de perguntas aumentará de acordo... Por que decidir algo você mesmo... Pergunte no fórum e você terá uma versão funcional. E a única coisa que resta é colocar o produto no mercado...

 
Alexey Viktorov:

Depende do período em que o comércio está e da capacidade de reiniciar o terminal dentro de uma barra para abrir um pedido e reiniciar o terminal.

Eu não gosto da GV e tento passar sem ela. Quando você executa uma EA, você ainda deve reunir todas as informações sobre as ordens abertas, então por que não restaurar o valor da bandeira quando você a executa? Esta é uma opção. A segunda variante é que o valor inicial da bandeira proíbe a abertura de pedidos e somente a próxima barra dará permissão. Portanto, mesmo que tenhamos uma nova abertura de pedidos no bar atual e reiniciemos a EA, a bandeira proibirá de qualquer forma a abertura de pedidos até o próximo bar.

Apenas dando conselhos com tais sutilezas, não teremos que pensar em nada. Conseqüentemente, o número de perguntas pode aumentar. Por que decidir algo você mesmo... Pergunte no fórum e você terá uma versão funcional. E a única coisa que resta é colocar o produto no mercado...

:)
Tenho o hábito de olhar sempre em frente.
Para mim, precisamente porque as bandeiras ainda precisam ser restauradas, é melhor olhar para a barra de abertura da posição, e dançar ao redor dela, e não se preocupar com bandeiras e seu armazenamento.
 
Artyom Trishkin:
:)
Tenho o hábito de olhar sempre em frente.
Acho melhor olhar para a barra de abertura de uma posição, e depois começar a dançar ao redor dela, sem ter que se preocupar com bandeiras e armazená-las.

É a mesma razão pela qual nós gostamos de mulheres diferentes.

Que diferença faz, a bandeira ou a hora de abrir uma posição? Não importa como você gire, você ainda tem que verificar algo...
 

Olá! Você pode me dizer como devolver o número de últimos pedidos perdidos, após os lucrativos?

Aqui está o meu código, o que está errado?

int GetProfitLoss()// Perda em pedidos fechados (número de últimos pedidos perdidos)

{

int Perda = 0;

dataHoraFecharTempo = 0;

int cnt = OrderHistoryTotal();

for(int i=0; i < cnt; i++)

{

se(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && lastCloseTime < OrderCloseTime())

{

lastCloseTime = OrderCloseTime();

}

se (OrderProfit()<0)

{

Perda ++;

}

if(OrderProfit()>0)

{

break; // Sair do loop no primeiro rentável encontrado }

}

}

}

}

devolução(Perda);

}

 
Falx:

Bom dia a todos!

Por favor, dê-me uma ordem para que o robô não abra mais de 1 pedido por 1 vela.

Mesmo que ele tenha aceitado esta vela - não para abrir a próxima ordem na mesma vela.

Agora, se as condições dos indicadores forem cumpridas - abrir um comércio.

Quando um acordo sobre o take é fechado, ele abre imediatamente um novo negócio no mesmo castiçal, e aqui ele não é mais necessário e cria problemas para mim.

Sinto que é importante dar algum feedback.

Precisa estritamente de 1 vela - 1 negócio.

Obrigado de antemão!

Função NumberOfBarCloseLastPos().

Esta função retorna o número de barra da última posição a ser fechada, ou-1. A seleção das posições a serem consideradas é definida por parâmetros externos:

  • sy- Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições deste instrumento. O valor padrão -NULL denota o instrumento de mercado atual.
  • tf- Cronograma. O valor padrão0 significa o período de tempo atual.
  • op- Operação comercial, tipo de posição. Valores válidos:OP_BUY,OP_SELL ou-1. O valor padrão-1 significa qualquer posição.
  • mn- Identificador de posição, MagicNumber. O valor padrão de-1 significa qualquer identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t=0;
  int      i, k=OrdersHistoryTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t=0;
  int      i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}

A função NumberOfBarOpenLastPos().

Esta função retorna o número de barra da última posição aberta ou-1. A seleção das posições a serem consideradas é definida por parâmetros externos:

  • sy- Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições do instrumento especificado. O valor padrão -NULL denota o instrumento de mercado atual.
  • tf- Cronograma. O valor padrão0 significa o período de tempo atual.
  • op- Operação comercial, tipo de posição. Valores válidos:OP_BUY,OP_SELL ou-1. O valor padrão-1 significa qualquer posição.
  • mn- Identificador de posição, MagicNumber. O valor padrão de-1 significa qualquer identificador.

Depois, usando estas funções, verifique a condição que você precisa.

 

Por favor, ajude.

Preciso acrescentar a seguinte função ao meu robô:

Após abrir um negócio, em 40 segundos, se o lucro for superior a 15 pips, o negócio é fechado instantaneamente, se menos, o lucro é transferido para o nível de lucro de 15 pips.

Agradecemos antecipadamente.

 
Vladimir Zubov:

A função NumberOfBarCloseLastPos().

Esta função retorna o número de fechamento da barra da última posição ou-1. A seleção das posições a serem levadas em conta é definida por parâmetros externos:

  • sy- Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições deste instrumento. O valor padrão -NULL denota o instrumento de mercado atual.
  • tf- Cronograma. O valor padrão -0 indica o período de tempo atual.
  • op- Operação comercial, tipo de posição. Valores válidos:OP_BUY,OP_SELL ou-1. O valor padrão-1 significa qualquer posição.
  • mn- Identificador de posição, MagicNumber. O valor padrão de-1 significa qualquer identificador.

A função NumberOfBarOpenLastPos().

Esta função retorna o número de barra da última posição aberta ou-1. A seleção das posições a serem consideradas é definida por parâmetros externos:

  • sy- Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições do instrumento especificado. O valor padrão -NULL denota o instrumento de mercado atual.
  • tf- Cronograma. O valor padrão -0 indica o período de tempo atual.
  • op- Operação comercial, tipo de posição. Valores válidos:OP_BUY,OP_SELL ou-1. O valor padrão-1 significa qualquer posição.
  • mn- Identificador de posição, MagicNumber. O valor padrão de-1 significa qualquer identificador.

Em seguida, use estas funções para verificar a condição que você precisa.


Muito obrigado!

Eu vou investigar!!!

Razão: