[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 1114

 
pr0fess0r64


1. Precisamos remover &&OrderSymbol()==Symbol() do código.

2. Necessidade de normalizar a licitação e pedira.

3. É melhor não definir o deslizamento em 10 pontos, mas calculá-lo dinamicamente. Por exemplo, se um pedido de ouro e este instrumento transita 50 pontos por carrapato, então 10 pontos de escorregamento causarão solicitações. Portanto, é melhor calcular o tamanho mínimo do tick e multiplicá-lo por este 10.

4. Você deve inserir a manipulação de erros em seu código. Caso contrário, em caso de falha, você não entenderá as razões pelas quais as ordens não foram fechadas.

 
drknn:


1. Você deve remover &&OrderSymbol()==Symbol() do código

2. Necessidade de normalizar a licitação e perguntar.

3. O Slippage é melhor para calcular dinamicamente em vez de 10 pips. Por exemplo, se um pedido em ouro e este instrumento se move 50 pontos por tick, então 10 pontos de deslizamento lhe causarão muitas solicitações. Portanto, é melhor calcular o tamanho mínimo do tick e multiplicá-lo por este 10.

4. Você deve inserir a manipulação de erros em seu código. Caso contrário, no caso de uma falha, você não entenderá as razões pelas quais as ordens não foram fechadas.

Esta é a visão geral, e você pode pensar em toda uma série de coisas a fazer.
 
pr0fess0r64:
Muito obrigado, vou tentar no testador, mas sobre a modificação dos pedidos, você tem algum conselho?
Há algum erro no diário de bordo quando se modifica?
 

Para onde o retorno é enviado?

Claramente, para a linha 0 e esperar por um tique

int start()
  {
//----
   
//----
   return(0);
  }

também está claro aqui - pare

   if(Lot_s<=0){
    Alert("Не выбран лот!");
    return;

E aqui?

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает количество ордеров.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ko=0, ot;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) ko++;
        }
      }
    }
  }
  return(ko);
}
O valor do número de pedidos é ko, então a próxima função deve ser escrita usando o ko? O que o retorno faz aqui?
 

return() não envia ninguém a lugar algum.

O operador de retorno encerra a função atual e retorna o controle ao programa de chamada. O uso de retorno (expressão); encerra a função atual e envia o resultado. A expressão do operador está entre parênteses e não deve conter um operador de atribuição.

 
Vinin:

return() não envia ninguém a lugar algum.

O operador de retorno encerra a função atual e retorna o controle ao programa de chamada. O uso de retorno (expressão); encerra a função atual e envia o resultado. A expressão do operador está entre parênteses e não deve conter um operador de atribuição.

Oh, então, em vez de uma atribuição explícita do resultado ko, nós o passamos pelo retorno? Acho que consegui, obrigado.
 
Como, então, é correto impedir o funcionamento da EA se as condições não são atendidas? Não para adormecê-lo, mas para pará-lo completamente.
 
Abzasc:
Como, então, é correto impedir o funcionamento da EA se as condições não são atendidas? Não para adormecê-lo, mas para pará-lo completamente.

O que você quer dizer com "colocar para dormir" e o que você quer dizer com "parar"?
 
Vinin:

O que você quer dizer com "colocar para dormir" e o que você quer dizer com "parar"?

Coloque para dormir - coloque o sono, então ele tentará recomeçar.

Parar - completamente, para que o Expert Advisor pare de trabalhar (muda seu "rosto").

Por exemplo, o Expert Advisor está sob o Eurobucks, mas foi atirado para o EuroJPY. Ele verifica o símbolo e, no caso de um descasamento, lança o alerta e não tenta mais trabalhar antes do reinício manual.

 
Abzasc:

Coloque para dormir - coloque o sono, então ele tentará recomeçar.

Parar - completamente, para que o Expert Advisor pare de trabalhar (muda seu "rosto").

Por exemplo, o Expert Advisor está sob o Eurobucks, mas foi atirado para o EuroJPY. Ele verifica o símbolo e, no caso de um descasamento, lança um alerta e não tenta trabalhar novamente antes do reinício manual.


Por que tão complicado?

Suficiente na função de início() para proporcionar condições de manuseio

int start(){
  if (Symbol()!="EURUSD") {
     Alert("Советник должен работать только на EURUSD");
     return(0);
  }
  // Далее обработка, принятие решений

}
Neste caso, se você colocar o EA no instrumento errado, você será inundado de Alertas, até que você mesmo o desabilite (o EA).

Você também pode adicionar um som de sirene, depois você pode desligá-lo com certeza