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

 
Alexey Kozitsyn:
Vamos colocar as coisas desta maneira. Você mostra o código que passa pelas ordens com uma explicação de como ele deve fazer isso e só então poderemos dizer o que está certo e o que está errado. Apenas os nomes das funções não o ajudarão a chegar mais perto do resultado.

Olá ... obrigado por concordar em me ajudar ... Parecia ser um pequeno empreendimento, para fazer o fechamento dos pedidos, poderia ser feito simplesmente adicionando o evento necessário à pasta apropriada - afinal não foi tão fácil ... Aqui está um exemplo de código que tirei dasfunções comerciais dereferência da MQL4:

intOrdensHistóriaTotal();

// recuperando informações do histórico comercial
int i,accTotal=OrdensHistóriaTotal();
for(i=0;i<accTotal;i++)
{
//---- verificar resultado da seleção
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==falso)
{
Imprimir("Erro ao acessar o banco de dados do histórico (",GetLastError(),")));
pausa;
}
// trabalhar com uma ordem ...

}

... A função retornaa quantidade de ordens fechadas e excluídas no histórico da conta corrente carregada no terminal do cliente. O tamanho da lista do histórico depende das configurações atuais da guia "Histórico de contas" do terminal.

Como vai procurar através deles e porque é necessário não está claro para mim... Talvez seja necessário memorizá-los e descartá-los, para que não atrapalhem.

Devemos soar as novas ordens fechadas no momento em que elas forem fechadas com um breve sinal sonoro. Todos os pedidos a serem fechados em meu Terminal de Clientes são de apenas dois tipos: porTrailStopLoss eTakeProfit Average. Ao fechar um pedido (um grupo de pedidos), não importa em que direção (Vender ou Comprar) eles devem ser separados somente peloStopLossouTakeProfit eenviados para a funçãoPlaySoundcorrespondente.

Справочник MQL4
Справочник MQL4
  • docs.mql4.com
Справочник MQL4
 
bablusut:

Olá ... obrigado por concordar em me ajudar ... Parecia ser um pequeno empreendimento, para fazer o fechamento dos pedidos, poderia ser feito simplesmente adicionando o evento necessário à pasta apropriada - afinal não foi tão fácil ... Aqui está um exemplo de código que tirei dasfunções comerciais dereferência da MQL4:

intOrdensHistóriaTotal();

// recuperando informações do histórico comercial
int i,accTotal=OrdensHistóriaTotal();
for(i=0;i<accTotal;i++)
{
//---- verificar resultado da seleção
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==falso)
{
Imprimir("Erro ao acessar o banco de dados do histórico (",GetLastError(),")));
pausa;
}
// trabalhar com uma ordem ...

}

... A função retornaa quantidade de ordens fechadas e excluídas no histórico da conta corrente carregada no terminal do cliente. O tamanho da lista do histórico depende das configurações atuais da guia "Histórico de contas" do terminal.

Como vai procurar através deles e porque é necessário não está claro para mim... Talvez seja necessário memorizá-los e descartá-los, para que não atrapalhem.

Devemos soar as novas ordens fechadas no momento em que elas forem fechadas com um breve sinal sonoro. Todos os pedidos a serem fechados em meu Terminal de Clientes são de apenas dois tipos: porTrailStopLoss eTakeProfit Average. Ao fechar uma ordem (um grupo de ordens) não importa em que direção (Venda ou Compra) elas devem ser separadas apenas pelo comandoStopLossouTakeProfit defechamentoe enviadas para a funçãoPlaySoundcorrespondente.

A ordem deve ser pesquisada em ordem inversa, já que 0 é o primeiro. accTotal-1 é o último. Neste código, após "// trabalhar com ordem", memorize o comentário e verifique se há um comentário final sobre o SL ou TP.
 
Alexey Kozitsyn:
As ordens devem ser pesquisadas na ordem inversa, já que 0 é o primeiro. accTotal-1 é o último. Neste código, após "// trabalhar com ordem", lembre-se do comentário e verifique se há um comentário final para o SL ou TP.

intOrdensHistóriaTotal();

// recuperando informações do histórico comercial
int i,accTotal=OrdensHistóriaTotal();
for(i=0;i<accTotal;i++)
{
//---- verificar resultado da seleção
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==falso)
{
Imprimir("Erro ao acessar o banco de dados do histórico (",GetLastError(),")));
pausa;
}
// trabalhar com uma ordem ...

}

stringOrderComment();

comentário em cadeia;
if(OrderSelect(10,SELECT_BY_TICKET)==falso)
{
Print("OrderSelect() retornou um erro ",GetLastError()));
retorno(0);
}
comentário=OrderComment();

// ...

Obrigado pela resposta ... Após adicionar o código da funçãoOrderComment,(MQL4Trading FunctionsReference) que retorna o comentário de uma ordem selecionada usando a função OrderHistoryTotal, o código se parece com o seguinte ... E não temos uma função que rastreia novas ordens fechadas na história do terminal? "0 - muito primeiro. accTotal-1 - último" - queremos dizer "primeiro fechado" e "último fechado" na história do terminal, será por tempo ...? eu fiz bem?


Справочник MQL4
Справочник MQL4
  • docs.mql4.com
Справочник MQL4
 
bablusut:

mas será que não temos uma função para rastrear novas ordens fechadas no histórico do terminal?

Não existem padrões.

  int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }
Para determinar a presença de uma linha em outra - utilize as funções de trabalhar com linhas.
 
Alexey Kozitsyn:

Não existem padrões.

  int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }
Para determinar se uma corda está presente na outra - use funções de corda.

Obrigado ... Você quer dizer a função StringFind = Procura de um substrato em uma corda.

int StringFind(
string_value, // a string que estamos procurando
string match_substring, // o que estamos procurando
int start_pos=0 // Onde iniciar a busca

);

Parâmetros
string_value
[em] String para pesquisar.
match_substring
[em] Match_substring a ser pesquisado.
start_pos=0
[em] Posição na corda onde a busca deve ser iniciada.
Valor retornado

Retorna o número de posição no fio onde começa o substrato a ser pesquisado, ou -1 se não for encontrado substrato.

... ou funçãoStringCompare-Compara duas cordas?...


StringCompare - Строковые функции - Справочник MQL4
StringCompare - Строковые функции - Справочник MQL4
  • docs.mql4.com
StringCompare - Строковые функции - Справочник MQL4
 
bablusut:

Obrigado ... Você quer dizer a função StringFind = Procura de um substrato em uma corda.

int StringFind(
string_value, // a string que estamos procurando
string match_substring, // o que estamos procurando
int start_pos=0 // Onde iniciar a busca

);

Parâmetros
string_value
[em] String para pesquisar.
match_substring
[em] Match_substring a ser pesquisado.
start_pos=0
[em] Posição na corda onde a busca deve ser iniciada.
Valor retornado

Retorna o número de posição no fio onde começa o substrato a ser pesquisado, ou -1 se não for encontrado substrato.

...


É verdade.
 
Alexey Kozitsyn:
Correto.

Obrigado ... o código continuará a ser assim:

 int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }

int  StringFind(
   string  string_value,        // строка, в которой ищем
   string  match_substring,     // что ищем
   int     start_pos=0          // с какой позиции начинать поиск

   ); 



 

 
bablusut:

Obrigado ... o código tomará então a forma de:

 int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }

int  StringFind(
   string  string_value,        // строка, в которой ищем
   string  match_substring,     // что ищем
   int     start_pos=0          // с какой позиции начинать поиск

   ); 



 

Não. Tente entender o que você está fazendo. O que você escreveu é apenas uma função protótipo (ou seja, apenas uma descrição do que ela faz). Então, você acabou de arrancar um pedaço de documentação. Você precisa usá-lo. Portanto, você tem que substituir seus próprios valores por argumentos. E a função retornará o resultado. Então este resultado deve ser processado.
 

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Perguntas de principiantes

A1exPit, 2016.11.30 22:14

Você pode me dizer OrderSelect by SELECT_BY_POS qual 0 pedido é o último colocado ou o primeiro? Estou tentando de ambas as maneiras e vice versa, mas o erro de modificação #0 está voando para fora.

 
Vladimir Karputov:

vamos dar uma olhada no código.