[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 137

 
hoz:

No momento, a tarefa é a seguinte: fastMa cruzou a slowMa para cima... por isso, estamos procurando onde comprar. Então esperamos até que o preço, ou seja, Ask (já que consideramos comprar) atinja fastMa ( bem, acho que não haverá valor exato, precisamos de +- algum desvio, e isto é alterado por i_thresholdFromMa) e assim que o preço atingir fastMa +- i_thresholdFromMa o Consultor Especialista deverá configurar BUYSTOP em (fastMa + buyHear * pt).

O que eu inventei não funciona em um terminal e nem sempre funciona em outro. Algo está errado em geral.

A última variante da função buyHear aqui:

Aqui estão os parâmetros de entrada:

Os erros podem ser vistos na captura de tela (em OrderSend() o preço é alimentado acima da varinha vermelha, e a ordem como vista na captura de tela está abaixo....):

Está fora há alguns dias... Estou me perguntando - os mesmos parâmetros têm as varinhas jogadas na tabela que as varinhas usadas nos cálculos? Talvez seja lá que o cão está enterrado?

(Ainda não tive tempo de mergulhar no código e desmontá-lo).

Eu faria uma função, por exemplo:

//-----------------------------------------------------------------------------+
double ma(int MAperiod, int MAmethod, int MAshift) {return (iMA(Symbol(), Period(), MAperiod, 0, MAmethod, PRICE_OPEN,MAshift));}
//-----------------------------------------------------------------------------+

e chamá-lo para obter os parâmetros

 

Olá, por favor, você poderia aconselhar! Um sinal indicador para comprar foi acionado, abro um pedido somente depois de confirmar as duas velas seguintes para cima.

 
Top2n:

Olá, por favor, você poderia aconselhar! Um sinal indicador para comprar foi acionado, abro um pedido somente depois de confirmar as duas velas seguintes para cima.


Portanto, verifique se as duas últimas velas estão acesas e a condição para abrir uma ordem há duas barras ao mesmo tempo.
 
Roger:

Portanto, verifique se os dois últimos castiçais estão em pé e a condição para abrir um pedido duas barras de volta ao mesmo tempo.

como faço isso?

 if (bay_min == true) сработал сигнал на покупку ждем подтверждение
  
 if (Open[1]<Close[1] && Open[2]<Close[2] )
   
 if (Bars(2).............


E se assim for, o sinal é acionado aguardando confirmação, somente após uma barra subir ou descer 2 barras.

Precisamos dela para lembrar a barra no sinal, a barra após o sinal, compará-las se as duas forem ascendentes ou descendentes, então .....

 
Top2n:

como faço isso?


Se o sinal funcionou, esperamos pela confirmação, mas depois que a barra sobe ou desce.

Deve lembrar a barra no sinal, a barra após o sinal, compará-las se as duas forem ascendentes ou descendentes, então .....

Mostre como você chegou ao bay_min.
 
Top2n:

como faço isso?


Se o sinal funcionou, esperamos pela confirmação, mas depois que a barra sobe ou desce.

Deve lembrar a barra no sinal, a barra após o sinal, compará-las se as duas forem ascendentes ou descendentes, então .....



if (bay_min == true)   datetime T=Time[0] //сработал сигнал на покупку запоминаем время  бара

if(iBarShift(NULL,0,T)==2) //по времени, сигнал был на 2 баре
   {   
  if (Open[1]<Close[1] && Open[2]<Close[2] )   //и эти бары бичьи 
     { 
    // что-то делаем
     }
   }
   
// я думаю, как-то так.
 
Pergunta para Consultores Especialistas

Estou escrevendo um simples Expert Advisor e me deparo com uma série de problemas.

A condição é

Lembro-me do preço de fechamento da barra atual e o introduzo na variável Preço inicial se a 4ª barra anterior estava na barra deslizante.


Se a condição for satisfeita, então desenhe um ícone mostrando o preço de fechamento da barra, ou seja, Startprice.

O que eu tenho é que o ícone é desenhado, mas apenas uma vez, enquanto eu preciso dele todas as vezes.

O preço de fechamento da barra não coincide com o preço inicial a 0,00001. Por que e como eu o conserto?

O arredondamento e o corte de 5 dígitos não ajudaram(

No registro usando a impressão chamo o valor Startprice, mostra o número apenas até 4 dígitos e menos.

Como obter a mesma precisão que na janela de dados do terminal?

Este problema do ponto decimal também se aplica ao próprio controle deslizante. Se você chamar seus valores via impressão, você não pode obter mais de 4 dígitos no log.



#property copyright "Zuly"


 extern int MA_Period = 50; //периуд Ма
extern int MA_Method =MODE_SMA;     //Метод усреднения скользящего среднего. Может быть любым из значений методов скользящего среднего (Moving Average):
                              //*MODE_SMA 
                              
 extern int Maximum_History = 0;         //Ограничение истории для расчетов, если 0 то расчет всей истории
 
   
    
   //начало кода советника
int start()


{      
    double MA4;                                // Значение МА на 4 баре 
    
    double Startprice;
    
   { 
   MA4=iMA(NULL,0,MA_Period,0,MA_Method,PRICE_CLOSE,4); 
 
   
                       if  (Low[4]< MA4 && MA4 < High[4]) //условия если 4-я свеча лежит в скользящей
  
  {    
  
   Startprice=Close[0];
  
    //   Startprice=NormalizeDouble(Close[0],5); // пробуем округлить до 5-го знака, не помогло 
 
    //  Startprice=MathFloor(Close[0]*100000)/100000; // пробуем обрезать до 5-го знака не помогло
      
  
  
     
      //Print (Startprice); // распечатаем Startprice
     
      
   datetime TmR1=Time[0]; // запоминаем время текущего бара? 

   

   
       ObjectCreate("Rep1",OBJ_ARROW, 0, TmR1, Startprice); // создаем обьект 
      ObjectSet("Rep1", OBJPROP_COLOR, White); // устанавливаем обьект на график
       ObjectSet("Rep1", OBJPROP_ARROWCODE,71); 
      
     return(0); 
 
 
 
}} }    
   
parâmetros de teste e tempo
 
Use DoubleToStr(número, Dígitos) para a saída. Ao invés de Dígitos, você pode escrever a precisão que quiser. Adicione ao nome do ícone a hora da barra na qual você está definindo o ícone.
 
artmedia70:
Use DoubleToStr(número, Dígitos) para a saída. Em vez de Dígitos você pode escrever a precisão desejada. Adicione ao nome do ícone a hora da barra na qual você está definindo o ícone.


se assim for

Startprice=DoubleToStr(Close[0],5);

não está funcionando, está culpando '=' - tipos incompatíveis C:\sve.mq4 (34, 14)

Como escrevê-lo corretamente?

Obrigado pela resposta, há uma semana que estou lutando com isso )

 
artmedia70:
Use DoubleToStr(número, Dígitos). Você pode escrever a precisão que quiser, em vez de Dígitos. Adicione o tempo de barra ao nome do ícone onde você está definindo o ícone.

mas para a saída, entendo que a impressora imprime apenas 4 ou menos dígitos.

então se imprimir (DoubleToStr(Startprice,5)); // imprimir Startprice

dá 5.

Mas aqui está como adicionar o tempo do bar.

Esta linha não acrescenta o tempo da barra?

  datetime TmR1=Time[0];