[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 11

 
Fox_RM:

Eu tentei abrir pedidos em um novo bar lá usando a função NewBar(). Se for utilizado para este fim?

Por exemplo, if (NewBar())i++; Algo assim.

Eu não notei NewBar, desculpe.

Em seguida, mude o seguinte: Você não precisa calcular o indicador inteiro a cada tick, se você só abre negócios em um novo bar.

Portanto, mova todo o cálculo do indicador antes de verificar as condições de abertura de um negócio e não conte quantas barras forem necessárias (20, se não estou enganado)


Portanto, a estratégia é a seguinte:

1) novo bar? não - andar

2) sim - calcular tudo o que precisamos (MA, indicador, tudo o mais para as condições)

3) Verificar as condições - não - andar

4) Sim - aberto ao preço atual (Ask ou Bid, respectivamente)

 
ilunga:

NewBar não percebeu, peço desculpas.

Em seguida, mude o seguinte: Você não precisa contar todo o indicador a cada tic tac se você só abre negócios em um novo bar.

Portanto, mova todo o cálculo do indicador antes de verificar as condições de abertura do comércio e conte não tantas barras, mas tantas quantas você precisar (20 se não estou enganado).

Isso mesmo, 20. Eu entendo aproximadamente como fazer isso. Por favor, explique-me a diferença entre meu cálculo e o cálculo de 20 barras para Expert Advisors.

Eu só quero entender a essência do erro.

 
Fox_RM:
Bom dia a todos!
Decidi reescrever o código do meu indicador para que um Expert Advisor possa rastrear
Decidi mudar o código do meu indicador para rastrear o funcionamento de seus sinais.
Eu não tenho erros ao compilá-lo e ele funciona no Testador de Estratégia sem erros.

Não sei como utilizá-lo.

Z.U. Tenho certeza de que há muitos erros bobos, por favor atire em branco.

É mais fácil reescrever o código como você o vê do que, por exemplo, "o que você está dançando ao redor" aqui:

  ArrayResize(MA1,Bars);ArrayResize(MA2,Bars);

Ainda não encontrei como funcionará a função utilizada nos indicadores na EA:

  int counted_bars=IndicatorCounted();  

Mas, se "qualquer coisa", o loop que você organiza:

   for(i=0; i<=limit; i++) 

Onde limite = Barras - counted_bars, no 2o. tick terá um valor igual a 0, então por código lhe será atribuído um valor... OPA - e este é um NOVO MUNDO na programação:

  if(limit>0) limit=0;

...tente escrever esta condição assim, se ela não quebrar toda a estratégia:

  if(limit<=0) limit=1;
 
Fox_RM:

Ou seja, usar esta condição para o recálculo das barras?

Mas em meu indicador, a cada tique as arrays TP_UP e TP_DN são calculadas.Portanto, eles devem ser calculados primeiro.


Novamente, o preço de abertura de OP_BUY==Ask, OP_SELL===Bid.

E você tem Close[i].

 
Fox_RM:

Isso mesmo, 20. Eu entendo aproximadamente como fazer isso. Favor explicar a diferença entre meu cálculo e o cálculo de 20 barras somente para o Expert Advisor.

Eu só quero entender a essência do erro.

Não há erro como tal no cálculo de todo o indicador. Basta pensar no que é mais rápido:

1) para contar barras (aproximadamente 10000) barras a cada tick

2) para contar 20 barras 1 vez por minuto (ou até mais)

 
Fox_RM:
Bom dia a todos!
Decidi reescrever o código do meu indicador para que um Expert Advisor possa rastrear
Decidi mudar o código do meu indicador para rastrear o funcionamento de seus sinais.
Eu não tenho erros ao compilá-lo e ele funciona no Testador de Estratégia sem erros.

Não sei como utilizá-lo.

Z.I. Tenho certeza de que há muitos erros e estúpidos, por favor, atire em espaços em branco.

NÃO PRINCIPAL, mas para simplificar o código, esta construção:

  ArrayResize(TP_UP,20);ArrayResize(TP_DN,20); 
  ArrayResize(TP_UPMin,20);ArrayResize(TP_DNPl,20);

Deveria ter sido substituído por uma simples declaração de matriz com dimensionalidade:

double delta,price,old_price,col_bar,sum_tick,sum_pip,TP_UP[20],TP_DN[20],TP_UPMin[20],TP_DNPl[20];
 
Fox_RM:

Isso mesmo, 20. Eu entendo aproximadamente como fazer isso. Favor explicar a diferença entre meu cálculo e o cálculo de 20 barras somente para o Expert Advisor.

Eu só quero entender a essência do erro.

Estes são PRINCIPAIS {FUNDAMENTAIS princípios de programação - não faça coisas que não fazem sentido! :)))
 
Fox_RM:
E outra questão relacionada com o funcionamento da biblioteca.
Eu criei o arquivo da biblioteca, compilei-o, tudo transcorreu sem erros.
Eu importei a função para o código indicador, compilei-o, tudo está bem também.
Quando inicio o indicador, a função a ser importada não é executada, quando uso

código indicador, tudo funciona. Aqui está o código da biblioteca.

Esta é uma chamada no código indicador:

//+------------------------------------------------------------------+
//|                                                         lib1.mq4 |
//|                                         Copyright © 2012, Fox.RM |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Fox.RM"
#property link      "http://www.metaquotes.net"
#property library
//+------------------------------------------------------------------+
//| My function                                                      |
//+------------------------------------------------------------------+
double Sredn(double & ArrSr[])
{
double a=1,c,step=1/20;
for (int i=0;i<=20;i++)
{if (ArrSr[i]==0){a*=1;}else{a*=MathAbs(ArrSr[i]);}}
c=MathPow(a, step);
  return(c);
}
//+------------------------------------------------------------------+
 
Zhunko:

Vadim, você coloca um (&) tão pequeno (&) que não consegue ver imediatamente!...! :)))

Pergunto-me como o autor (na versão do autor) esta função foi realizada em um lugar e não em outro! ;)

 
Fox_RM:

Isso mesmo, 20. Eu entendo aproximadamente como fazer isso. Favor explicar a diferença entre meu cálculo e o cálculo de 20 barras somente para o Expert Advisor.

Eu só quero entender a essência do erro.

A propósito, notei que você declara matrizes de trabalho de tamanho 20:

  ArrayResize(TP_UP,20);ArrayResize(TP_DN,20); 
  ArrayResize(TP_UPMin,20);ArrayResize(TP_DNPl,20);

E sua biblioteca calcula 21 elementos:

for (int i=0;i<=20;i++)

Posso assumir que o laço deve começar a partir de 1:

for (int i=1;i<=20;i++)
Razão: