[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 30

 
AndrewX:

Por favor, informe como definir a verificação correta na condição de abertura da posição - se há ou não uma posição aberta para este instrumento. E se houver uma posição para o símbolo (qualquer venda ou compra), então a abertura não ocorre, caso contrário o sinal para abrir a posição é acionado?

Aqui está o código (acho que ele é responsável pela abertura de posições):

Parece correto em lógica, mas não funciona ainda abre várias poses em uma única ferramenta.

P.S. Eu não sou um programador. Se for possível explicar com mais detalhes ao manequim.


Isto não é difícil. É melhor organizar 2 subprogramas que contem as ordens.

// =================================================================================================
// ************************* Счётчики ордеров ******************************************************
// =================================================================================================


//=========== SchBuy()  ===============================
//  Функция возвращает количество Buy-ордеров
//   SchBuy      - счётчик Buy ордеров
//-----------------------------------------------------------
int SchBuy(int MAGIC){
  string SMB=Symbol();
  int SchBuy=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--) {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
      if(OrderSymbol()!= SMB || OrderMagicNumber()!= MAGIC){ continue;}
      if(OrderType()==OP_BUY){ 
        SchBuy++;
      }  
    }
  }
  return(SchBuy);
}                  
//==================================================================================================


//=========== SchSell()  ===============================
//  Функция возвращает количество Sell-ордеров
//  SchSell  - счётчик Sell ордеров
//-----------------------------------------------------------
int SchSell(int MAGIC){
  string SMB=Symbol();
  int SchSell=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--){
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
      if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC){ continue;} 
      if(OrderType()==OP_SELL){
        SchSell++;
      }
    }
  }
 return(SchSell);     
}                  
//==================================================================================================

Além disso, no próprio código, prich:

if(SchBuy(MAGIC)+SchSell(MAGIC)<=0){
// ордеров нет - устанавливаем ордер при наличии торгового сигнала
}

A constante MAGIC é melhor declarada nas variáveis do usuário. Assim:

extern int      MAGIC=467223; // У ордеров открытых вручную MAGIC=0
 

Tentado


if (NumberOfPositions(Symbol_1,-1,Magic)<1

все равно не пашет
 
drknn:


Não é complicado. É melhor organizar 2 subprogramas que contem as ordens.

Em seguida, no próprio código, prich:

É melhor declarar a constante MAGIC nas variáveis do usuário. Assim:

Obrigado, vou dar uma olhada, mas provavelmente é um pouco complicado para mim.
 
AndrewX:
Obrigado, vou dar uma olhada, mas provavelmente é um pouco complicado para mim.

Anexei um arquivo EA a este post. Dê uma olhada.
Arquivos anexados:
 
Bom dia! Talvez minha pergunta sobre não otimizar seja complicada ou não tenha interesse ?
 
volshebnik:
Bom dia! Talvez minha pergunta sobre não otimizar seja complicada ou não tenha interesse ?

Há muitas razões possíveis para isso. Desde o trivial - falta de história até a variante - nenhuma opção lucrativa. Embora pudesse ser mais simples - um bug no Expert Advisor
 

Por favor, me diga se o robô cria ordens pendentes.

Comandos para ordens pendentes são enviados ao servidor.

Os pedidos pendentes colocados na fila são exibidos no terminal?

As ordens pendentes estão em aberto no topo, abaixo das ordens pendentes colocadas na fila?

 
Jaguar1974:

Por favor, me diga se o robô cria ordens pendentes.

Comandos para ordens pendentes são enviados ao servidor.

Os pedidos pendentes são colocados na fila de espera no terminal?

O mesmo que se eu definisse as ordens pendentes manualmente?


O que você quer dizer com "enfileirado"? O Expert Advisor envia uma ordem para o servidor para definir uma ordem pendente. Se os parâmetros desta ordem estiverem corretos, o servidor define a ordem pendente e esta é imediatamente exibida no terminal do cliente. Se o Expert Advisor envia um pedido para colocar pedidos pendentes em uma determinada etapa (isso é feito através de um loop), então cada novo pedido é processado pelo servidor separadamente. Estes pedidos são colocados em fila - o Expert Advisor deu um pedido - o servidor respondeu. O Expert Advisor deu uma ordem novamente e está aguardando a resposta do servidor.

O que significam os pedidos enfileirados? O que você quer dizer com isso?

 
Vinin:

Há muitas razões possíveis para isso. Desde o trivial - falta de história até a variante - nenhuma opção lucrativa. Embora possa ser mais simples - um erro no Expert Advisor.
Verifiquei-o e ele tem a história de Expert Advisors desde 1999. Verifiquei todas as variantes (não lucrativas também). Se eu definir apenas um parâmetro МА, por exemplo de 100 a 110, então a otimização "morre" - sem resultados, sem gráfico.... Sem mencionar a inclusão de outros parâmetros.
 
volshebnik:
Eu verifiquei - há um histórico de minutos de 1999. Marquei a caixa de seleção para mostrar todas as variantes (não-lucrativas também). Eu coloquei apenas um parâmetro MA na otimização, por exemplo, de 100 a 110 e todos - "matrizes" de otimização - sem resultados, sem gráfico.... Sem mencionar a inclusão de outros parâmetros.

Tenho que consultar o Consultor Especialista. Não há nada a dizer desta maneira