Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 900

 
lufer:
Isto não resolve o problema, agora parece que algo está errado noOnTick() - quando carrego o EA na janela do terminal nada acontece, e quando tento apagá-lo, o terminal fica parado por muito tempo e depois de algum tempo o apaga. Eu tentei atribuir valores manualmente a alguns elementos, tudo está bem. Algo sobre o loop de inicialização da matriz parece estar errado.

O que você quer dizer com isso "não resolve"? Você está empurrando dados de precisão dupla abaixo de 1 na matriz Int, a saída conterá naturalmente zeros. Bem, o laço também estava aleijado.

Este código deve funcionar:

#property strict

extern int N=100;                       // Количество баров

double Mas[];                             // Объявление массива
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

int OnInit()
  { 
    ArrayResize(Mas,N);
     return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {                                       
       for(int i=0; i<N; i++)                     // Цикл записи данных
         {                      
    
              Mas[i]=iATR(NULL,0,5,i+1);           // Вычисление значений          
         }
           Print(DoubleToStr(Mas[0],_Digits),"," ,DoubleToStr(Mas[50],_Digits),"," ,DoubleToStr(Mas[99],_Digits));      // Вывод значений
  }
 
evillive:

O que você quer dizer com "não funciona"? Você está empurrando dados duplos com menos de 1 na matriz int, é claro que a saída será zeros. E o loop foi uma bagunça.

Este é o tipo de código que deve funcionar:

Claro que você está absolutamente certo sobre adupla Mas[] (eu considerei que o ATP conta pontos em valores inteiros por alguma razão). A questão é que ele não apareceu mesmo depois de eu ter mudado o tipo de matriz, mas eu percebi meu erro. Muito obrigado por sua ajuda!
 
Não quero criar um tópico separado, por isso vou perguntar aqui. A documentação para a função OrderSelect declara que todos os dados do pedido são copiados para o "ambiente do programa ". Refere-se apenas ao gráfico atual ou a todo o terminal? Faço esta pergunta porque tenho um problema em trabalhar simultaneamente com várias encomendas de diferentes gráficos que têm o mesmo EA instalado.
 
.roman.:
Não quero criar um tópico à parte, por isso vou perguntar aqui. A documentação para a função OrderSelect declara que todos os dados do pedido são copiados para o "ambiente do programa ". Refere-se apenas ao gráfico atual ou a todo o terminal? Estou fazendo esta pergunta porque tenho um problema ao trabalhar simultaneamente com várias ordens de diferentes gráficos que têm o mesmo EA instalado.
Estas ordens estão disponíveis para todas as aplicações do usuário em execução no terminal onde esta ordem está aberta.
 
evillive:
Estes pedidos estão disponíveis para todos os programas de usuários em execução no terminal onde o pedido é aberto.
Como podemos então nos proteger contra a falsa cópia no ambiente de software dos dados de outra ordem que foi ao mesmo tempo selecionada a partir de um gráfico diferente?
 
.roman.:
Como podemos então nos precaver contra cópias falsas no ambiente de software de dados de outra ordem que foi, ao mesmo tempo, selecionada a partir de um gráfico diferente?
Os dados das diferentes ordens não se sobrepõem de forma alguma, não há nada contra o qual se possa proteger.
 
evillive:
Os dados das diferentes ordens não se sobrepõem de forma alguma e não há nada de que se possa proteger.

Estamos falando então de coisas diferentes. Eu estava me referindo originalmente à questão do que é o "ambiente de software" que é descrito na documentação. Isso significa o terminal inteiro?

Especificamente, meu problema era que, apesar da comparação exclusiva da função OrderSymbol e Symbol na função OrderSelect, havia um problema quando os dados (tempo de abertura do pedido, preço aberto, etc.) podiam aparecer a partir de um gráfico de um par. Isto é, estou me perguntando, é possível que durante a função OrderSelect da EA no EURUSD, por exemplo, a EA também comece a trabalhar com a função OrderSelect em outro par de moedas e os dados da ordem da última chamada desta função sejam carregados no "ambiente do programa"?

 
.roman.:

Estamos falando então de coisas diferentes. Eu estava me referindo originalmente à questão do que é o "ambiente de software" que é descrito na documentação. Isso significa o terminal inteiro?

Especificamente, meu problema era que, apesar da comparação exclusiva da função OrderSymbol e Symbol na função OrderSelect, havia um problema quando os dados (tempo de abertura do pedido, preço aberto, etc.) podiam aparecer a partir de um gráfico de um par. Então, estou me perguntando, é possível que durante a função OrderSelect da EA no EURUSD, por exemplo, a EA também comece a trabalhar com a função OrderSelect em outro par de moedas e os dados da última chamada desta função sejam carregados no "ambiente do programa"?

Eu preciso do código. Há um erro nele
 
.roman.:

Estamos falando então de coisas diferentes. Eu estava me referindo originalmente à questão do que é o "ambiente de software" que é descrito na documentação. Isso significa o terminal inteiro?

Especificamente, meu problema era que, apesar da comparação exclusiva da função OrderSymbol e Symbol na função OrderSelect, havia um problema quando os dados (tempo de abertura do pedido, preço aberto, etc.) podiam aparecer a partir de um gráfico de um par. Isto é, estou me perguntando, é possível que durante a função OrderSelect da EA no EURUSD, por exemplo, a EA também comece a trabalhar com a função OrderSelect em outro par de moedas e os dados da ordem da última chamada desta função sejam carregados no "ambiente do programa"?

Cada pedido tem parâmetros únicos que o distinguem claramente de outros pedidos. Estes são o bilhete e a hora de abertura (ou fechamento, se você pesquisar o histórico). Eles são tão únicos dentro de uma conta comercial quanto o padrão da retina.

Não é suficiente selecionar a ordemusando a função OrderSelect, mas temos que verificar se é a ordem correta ou se temos que selecionar a próxima ordem.

 
Vinin:
Você precisa de um código. Há um erro nele
for(int i=OrdersTotal()-1;i>=0;i--)
        {
            if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
               {
                  if(OrderType()==OP_BUY)
                     {
                        double openPrice = 0;
                        openPrice = OrderOpenPrice();
                        if(Ask>openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     }
                  if(OrderType()==OP_SELL)
                     {
                        double openPrice = 0;
                        openPrice = OrderOpenPrice();
                        if(Bid<openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     }
               }
        }

Os cálculos desnecessários (irrelevantes para o problema) foram removidos. As impressoras foram adicionadas ao código especificamente para mostrar o problema. Apesar da comparação do símbolo do pedido com o símbolo, no qual a EA está aberta, ela pode mostrar isto (a partir do gráfico osi tomar os dados do pedido no euro, por exemplo, como neste caso):


Razão: