devolve a política de execução. - página 8

 

É assim que eu obtenho os dados atuais da média móvel, isto é correto?

input int      ma_period = 10;
 int ma_handle = 0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    ma_handle = iMA(_Symbol,_Period,ma_period,0,MODE_SMA,PRICE_MEDIAN);
   if(ma_handle == INVALID_HANDLE)
     {
      Print("ma_handle == INVALID_HANDLE");
      return(INIT_FAILED);
     }

   return(INIT_SUCCEEDED);


  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  { 
  double   ma[1] ;
   if(CopyBuffer(ma_handle,0,0,1,ma)==1)
     {
     
     
     }
 }

Duas perguntas.

1.Nada sobre não associar o número tampão indicador com o indicador. Como há um indicador, ele tem automaticamente um buffer 0 e foi isso que especifiquei.

2. Se eu tiver o controle do indicador na inicialização, quando eu mudar os parâmetros que são passados para o indicador, eu preciso preencher novamente o EA para que o evento de inicialização venha e os novos parâmetros sejam aplicados?

 
Ivan_Invanov:

É assim que eu obtenho os dados atuais da média móvel, isto é correto?

Duas perguntas.

1.Nada sobre não associar o número tampão indicador com o indicador. Como há um indicador, ele tem automaticamente um buffer 0 e foi isso que especifiquei.

2. Se eu tiver o controle do indicador na inicialização, quando eu mudar os parâmetros que são passados para o indicador, preciso recarregar a EA no gráfico para que o evento de inicialização ocorra e os novos parâmetros sejam aplicados?

1. Não existe uma "associação". Nunca existiu.

Vamos ler a ajuda no CopyBuffer

int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   int       start_pos,            // откуда начнем 
   int       count,                // сколько копируем
   double    buffer[]              // массив, куда будут скопированы данные
   );

Há uma função que requer a manipulação do indicador (no seu caso, esta é a variávelma_handle e o número de buffer '0' - zero, porque o indicador Moving Average tem apenas um buffer).


2. Se você alterar os parâmetros de entrada em seu EA, ele inicializará seu EA novamente e o manípulo indicador será criado no OnInit com os parâmetros que você inseriu.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
Vladimir Karputov:

1. Não existe uma "associação". Nunca existiu.

...

Significa uma chamada paraSetIndexBuffer()

 
Dmitry Fedoseev:

Significa uma chamada para SetIndexBuffer()

Sim, não está claro qual é o número do indicador tampão, como estes tampões são criados, se pertencem a um indicador específico ou se têm uma numeração comum. A documentação diz para escrever SetIndexBuffer(), mas no exemplo da Moving Average é escrito sem. Li a referência e pesquisei artigos adicionais, mas ainda não está claro. O pré-processador precisa especificar os amortecedores e por que os amortecedores devem ser um a menos do que na diretiva do pré-processador e não o mesmo.
 
Ivan_Invanov:
Não sei o que é um número tampão indicador, como esses tampões são criados e se são atribuídos a um determinado indicador ou se têm a mesma numeração. A documentação diz para escrever SetIndexBuffer(), mas no exemplo da Moving Average é escrito sem. Li a referência e pesquisei artigos adicionais, mas ainda não está claro. O pré-processador precisa especificar os amortecedores e por que os amortecedores devem ser um a menos do que na diretiva do pré-processador e não o mesmo.

Se você procura algum significado metafísico... então, muita coisa se torna incompreensível. Caso contrário, é apenas um número. Ela pertence a um indicador específico.

Os Conselheiros Especialistas não têm tampão indicador, portanto não pode haver uma chamada SetIndexBufer().

Não um a menos, mas exatamente o mesmo. Ao contar a partir de zero, o último número é 1 a menos do que o número total.

 
Obrigado.
 

Se você não se importa, responda a mais algumas perguntas, por favor.

1. Eu não entendo porque preciso atribuir 0 a uma variável declarada se vou atribuir algo mais tarde de qualquer forma. E além disso, às vezes não é atribuído 0, às vezes é.

E dizem que você precisa apagar objetos na desinicialização (não entendo por quê), mas um cabo indicador é um objeto, mas normalmente não é apagado, por que isso?

3.MqlTradeRequest request={0}; O que isso significa? Provavelmente, toda a estrutura é atribuída a 0, mas ela não contém apenas tipos numéricos.

4. E por que existe aqui uma operação lógica?

bool  OrderSend(
   MqlTradeRequest&  request,      // структура запроса
   MqlTradeResult&   result        // структура ответа
   );
 
Ivan_Invanov:

Se você não se importa, responda a mais algumas perguntas, por favor.

1. Eu não entendo porque preciso atribuir 0 a uma variável declarada se vou atribuir algo mais tarde de qualquer forma. E além disso, às vezes não é atribuído 0, às vezes é.

E dizem que você precisa apagar objetos na desinicialização (não entendo por quê), mas um cabo indicador é um objeto, mas normalmente não é apagado, por que isso?

3.MqlTradeRequest request={0}; O que isso significa? Provavelmente, toda a estrutura é atribuída a 0, mas não se trata apenas de tipos numéricos.

4. Por que precisamos de uma operação lógica aqui?

1. Por hábito.

2. é outro objeto. Ele será descarregado por si mesmo, mas pode ser acelerado pela função IndicatorRelease().

3. está limpo e pronto.

4. Esta não é uma operação lógica, mas uma transferência de variável por referência.

 
Dmitry Fedoseev:

1. Por hábito.

2. este é um objeto diferente. Em seguida, ela se descarregará sozinha, mas pode ser acelerada pelo IndicatorRelease().

3. está limpo e pronto.

4. esta não é uma operação lógica, mas uma transferência de variável por referência.

obrigado)
 
Estou confuso com alguma coisa. Quando SYMBOL_TRADE_EXECUTION_MARKET é executado. Posso fazer algo para abrir pedidos a um determinado preço, como na Execução Imediata? Preciso de uma ordem pendente? Por favor, escreva um formato de solicitação de mercado para uma ordem pendente.