[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 587

 
OK, se não o fizerem, ajude-me a resolver isso esta noite.
 
Favor me dizer se é possível usar o valor do dobro, que é o resultado do cálculo, como um valor int substituto para cálculos posteriores.
Exemplo:
   ATR_Din=iATR(NULL,PERIOD_M5,14,1);
   Din_Per210= MathRound(6000*ATR_Din+210);
   Din_Per5  = MathRound(6000*ATR_Din+5);
   
   MA210_DIN  =iMA(NULL,PERIOD_M5,Din_Per210,0,MODE_SMA,PRICE_CLOSE,1);
   MA5_DIN    =iMA(NULL,PERIOD_H1,Din_Per5,0,MODE_SMA,PRICE_CLOSE,1);
   
Aqui minhas variáveis selecionadas são do tipo duplo, mas no iMA seu valor é usado onde um valor int é necessário (como um período de MA).
A questão é: este uso é correto ou é necessário converter os valores para int tipo ?
 
Olá a todos, poderiam avisar se sabem se existe um roteiro que fará um teste especializado em cada um dos resultados da otimização e salvará cada resultado do teste em um arquivo separado (relatório em htm)?
 
Craft:
Não me importo, existe um exemplo de trabalho ou uma ligação?
Dê-me o código ou me dê uma tarefa e nós o corrigiremos.
 
artmedia70:
Favor me dizer se é possível usar o valor do dobro, que é o resultado do cálculo, como um valor int substituto para cálculos posteriores.
Exemplo:
Aqui minhas variáveis selecionadas são do tipo duplo, mas no iMA seu valor é usado onde o valor int é necessário (como período de MA).
Então minha pergunta é: tal uso é correto ou alguma conversão de valores para int é necessária ?
A conversão é feita automaticamente, apenas cortando a parte fracionária. A única limitação que encontrei para tal uso é que o dobro não pode ser colocado no índice da matriz
 
alsu:
A conversão é feita automaticamente, bastando cortar a parte fracionária. A única limitação a este uso que vi é que o dobro não pode ser colocado no índice da matriz
Obrigado, isso é reconfortante... :)
Uma pergunta a mais:
   MA200_DIN =iMA(NULL,PERIOD_M5,Din_Per200,0,MODE_SMA,PRICE_CLOSE,1);
   MA200_UP  =MA200_DIN+20*pt;
   MA200_DN  =MA200_DIN-20*pt;
   
   MA5_DIN  =iMA(NULL,PERIOD_H1,Din_Per5,0,MODE_SMA,PRICE_CLOSE,1);
   MA5_UP   =MA5_DIN+20*pt;
   MA5_DN   =MA5_DIN-20*pt;
Construções
MA200_UP=MA200_DIN+20*pt; 
MA200_DN=MA200_DIN-20*pt; и 
MA5_UP=MA5_DIN+20*pt; 
MA5_DN=MA5_DIN-20*pt;
não funcionam. Ao emitir seus valores para o gráfico, todos eles têm o mesmo valor, por exemplo
1.4118 para MA200_DIN, MA200_UP, MA200_DN e
1.4106 para MA5_DIN, MA5_UP, MA5_DN.
Acontece que as fórmulas de cálculo dos níveis +20 e -20 pontos não funcionam.
O que eu estou fazendo de errado?
 
O que o pt iguala? Tente a saída com NormalizeDouble()
 
OK, obrigado, já está... Eu defino pt=Ponto; já após o cálculo dos valores...
Como disse Matroskin: Você é um tolo... :)
 
alsu:
Dê-nos um código ou defina uma tarefa e nós a corrigiremos

No WelsLab, o análogo do problema se parece com isto:

MyATR = SMA.Series((((HighLow)/Low), PerB)[i-1] ;

se (BuyAtStop(i, (Open[i] + Open[i]*MyATR), "") ;

ou seja, quando uma barra é aberta, uma posição Stop é colocada onde o preço Open [i] da barra atual + gatilho (o mesmo preço Open multiplicado pelo MyATR calculado para o período PerB nas barras fechadas [i-1]) é aberto uma vez se o nível especificado for alcançado

Este aqui mostra o que eu quero obter no mql4 usando o WellLab como exemplo.

Eu estudei os materiais do site e tentei fazer um análogo.

        MyATR = ((High[0] - Low[0])/Low[0]);
	 BT = Open[0] + Open[0]*iMAOnArray(MyATR ,0,PerB,0,MODE_SMA,1);
        ST = Open[0] - Open[0]*iMAOnArray((MyATR ,0,PerS,0,MODE_SMA,1);

   if (Ask >=  BT)                       // Если разница между
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (Bid <= ST)                       // Если разница между
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

Resultado: As ordens estão se acumulando. Favor informar qual condição deve ser adicionada (ou alterada) para que as ordens sejam executadas em um nível especificado uma vez.

 

Nota: o primeiro parâmetro da função iMAOnArray deve ser um array - e você tem o MyATR scalar. Para acertar, você deve fazê-lo:

1. declarar o dobro MyATR[];

2. Ajuste o tamanho da matriz para ArrayResize(MyATR,PerB);

3. preencher a matriz para(i=1;i<=PerB;i++) MyATR[i-1]=(High[i]-Low[i])/Low[i]; índice i começa com 1, pois precisamos de barras fechadas

4. Depois disto você pode ler iMAOnArray(MyATR,0,PerB,0,MODE_SMA,0); aqui o último parâmetro é 0 desde o turno ha1 já foi levado em conta na etapa 3.


Verifique como funciona, talvez o erro esteja apenas nisto