Noite de fim de semana - página 9

 
Aleksey Panfilov:

Há seis alças de um indicador em três períodos de tempo.

E a compensação do valor a ser tomado, já está estabelecida. Copiei deles um valor de cada vez.

Fiquei confuso ao usar três alças de um indicador em três períodos de tempo e copiar o possível intervalo de troca deles.

Se você precisar obter um valor indicador de mais de uma barra de cada vez, você deve copiar os valores em uma matriz. Usando o iATR como exemplo:

//+------------------------------------------------------------------+
//| Get value of buffers for the iATR                                |
//+------------------------------------------------------------------+
double iATRGet(const int index)
  {
   double ATR[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iATR array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle_iATR,0,index,1,ATR)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iATR indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(ATR[0]);
  }
//+------------------------------------------------------------------+
//| Get value of buffers for the iATR in the array                   |
//+------------------------------------------------------------------+
bool iATRGetArray(const int start_pos,const int count,double &arr_buffer[])
  {
   bool result=true;
   if(!ArrayIsDynamic(arr_buffer))
     {
      Print("This a no dynamic array!");
      return(false);
     }
   ArrayFree(arr_buffer);
   int       buffer_num=0;          // indicator buffer number 
//--- reset error code 
   ResetLastError();
//--- fill a part of the iATRBuffer array with values from the indicator buffer that has 0 index 
   int copied=CopyBuffer(handle_iATR,buffer_num,start_pos,count,arr_buffer);
   if(copied!=count)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iATR indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(false);
     }
//---
   return(result);
  }
 
Vladimir Karputov:

Se você quiser receber um valor indicador de mais de uma barra por vez, você precisa copiar os valores em uma matriz. Usando o iATR como exemplo:

Sim, parece que foi um erro deixar as matrizes para as quais copiei como dinâmicas. :(

Vai verificar.

 
Aleksey Panfilov:

Sim, parece ter sido um erro deixar as matrizes que eu copiei como dinâmicas. :(

Vou verificar.

Eu copio somente para matrizes dinâmicas! E, antes de copiar, eu façoArrayFree à força. Tive problemas com arrays estáticos. Desde então, apenas os dinâmicos.

 
Vladimir Karputov:

Eu só copio para arrays dinâmicos! E antes de copiar, eu forço oArrayFree. Havia problemas com matrizes estáticas. Desde então, apenas os dinâmicos.

Entendi. O erro não está aqui.

Aqui está o Conselheiro Especialista que não foi.

Arquivos anexados:
 
Aleksey Panfilov:

Entendi. O erro não está aqui.

Aqui está o especialista que não foi.

ERROR: você está copiando UM valor ou DOIS?

   //---  Используя функцию CopyBuffer, мы копируем по 1 последних новых значения индикаторов в динамические массивы

   if(CopyBuffer(Handle_4P72_L0_1,0,0,200,line1_L0)<0  // || CopyBuffer(Handle_4P72_L0_2,0,0,1,line2_L0)<0   || CopyBuffer(SMA_Handle_00,0,0,1,SMA_L0)<0
   || CopyBuffer(Handle_4P72_L1_1,0,0,200,line1_L1)<0  // || CopyBuffer(Handle_4P72_L1_2,0,0,1,line2_L1)<0   || CopyBuffer(SMA_Handle_01,0,0,1,SMA_L1)<0
   || CopyBuffer(Handle_4P72_L2_1,0,0,200,line1_L2)<0  // || CopyBuffer(Handle_4P72_L2_2,0,0,1,line2_L2)<0   || CopyBuffer(SMA_Handle_02,0,0,1,SMA_L2)<0
   ||  CopyTime(_Symbol,_Period,0,1,New_Time)<0)
 
Vladimir Karputov:

ERRO: você está copiando UM valor ou DOIS valores?

Neste EA (é diferente na data) tentei três handels e duzentos valores.

 

Se você estiver pronto para fazer robôs para o MT5, posso começar a lhe dar idéias. Eu simulo condições no TS-Lab, mas gostaria de negociá-las no MT5 em modo automático.

Se não houver problemas com o teste, descreverei a lógica comercial. A primeira provavelmente será esta.

Arquivos anexados:
 
Vladimir Karputov:

Vou começar com pequenas porções.

Assim que houver"segundos antes de fechar a vela de sinalização" segundos antes de a vela atual fechar, calculamos o tamanho médio de"Número de velas para calcular o tamanho médio das velas". Se a vela atual exceder o tamanho médio por"Vela atual: excesso de tamanho do corpo, porcentagem" - abrimos uma posição com o volume"Lotes" e colocamos uma ordem de limite pendente com o volume"Lotes" *"Fator de multiplicação" do preço de abertura à distância do"Nível limite pendente: porcentagem da altura da vela atual" em porcentagem da altura do sinal da vela.

Isto parece estar correto?


Preciso de tempo para lembrar o que eu fiz lá :) Estou ficando resfriado por causa das correntes de ar. É ao mesmo tempo zangado e engraçado: apanhar uma febre no verão e apanhar uma constipação :)

 
Vladimir Karputov:

Leva tempo para lembrar o que tenho andado fazendo :) E então, como se de propósito, há correntes de ar e o resultado é uma constipação. É engraçado e zangado: apanhar uma febre e apanhar uma constipação no verão :)

Sinta-se melhor.

 
Vladimir Karputov:

Eu só copio para arrays dinâmicos! E antes de copiar, eu forço oArrayFree. Havia problemas com matrizes estáticas. Desde então, apenas os dinâmicos.

Oh, vamos lá... Eu também não tenho problemas com as estáticas. Mas isso depende do que estamos falando. Nos índices, sim, os dinâmicos são melhores, se não houver o desejo de administrar o buffer e capturar erros. Mas em corujas não há diferença, na verdade.