[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 476

 
Se você precisar, eu colocarei o jma também. Mudar o nome do indicador para JMA[i]
Arquivos anexados:
jmaxvib.mq4  11 kb
 
for(i = 0; i < limit; i++)
     {
       if(dBuffer[i+1]>80 && dBuffer[i]<80) DN[i] = 70; Fd=-1; Fu=0;               //пересекла 80   --> 1
       if(dBuffer[i+1]<20 && dBuffer[i]>20) UP[i] = 30; Fu=1;  Fd=0;               //пересекла 20   --> 1
       
       if(dBuffer[i+1]>rsi[i+1] && dBuffer[i]<rsi[i]) dn[i] = 60; fd=-1; fu=0;     //пересечение двух  -->  2
       if(dBuffer[i+1]<rsi[i+1] && dBuffer[i]>rsi[i]) up[i] = 40; fu=1;  fd=0;     //пересечение двух     -->  2
       
       if(Fd==-1 && fd==-1) dot[i]=90; Fd=0; Fu=0; fd=0; fu=0;
       if(Fu==1 && fu==1)   dot[i]=10; Fd=0; Fu=0; fd=0; fu=0;

Você está passando por barras do tempo atual para o tempo passado.

A matriz é pesquisada até a última.

Portanto, todas as variáveis darão valores para o caso mais recente (neste caso, há muito tempo).

Portanto, você precisa fazer uma pesquisa do passado para o presente.

for(i = limit; i >= 0; i--)
E as variáveis
int fd, fu,Fd, Fu;

declarar no nível superior, ou seja, antes de Start e Init.

E não há necessidade de zerá-los no Start. Deixe o zeramento somente no local onde você os tem zerados

if(Fd==-1 && fd==-1) dot[i]=90; Fd=0; Fu=0; fd=0; fu=0;
       if(Fu==1 && fu==1)   dot[i]=10; Fd=0; Fu=0; fd=0; fu=0;
 
rlx Obrigado, Vce está trabalhando.
 
PapaYozh:


Primeiro, OrderSend() ocorre 2 vezes lá, e ambas fora da condição que você especificou.

Em segundo lugar, o preço não-normalizado é passado para OrderSend().

Terceiro, analisar o resultado retornado pela função OrderSend(), escrever uma mensagem no log em caso de erros ao abrir/modificar/fechar o pedido e analisar o log.


Alguém pode postar a versão corrigida do Experimento 1?
 

Boa tarde!

Obrigado por suas respostas - você tem sido muito útil ))))

Gente! O Expert Advisor faz negócios quando os dois muwings se cruzam. E quando eles cruzam para trás, fecha os negócios e abre na direção oposta, perdendo lucros.

1. Como posso escrever que fecha negócios quando as linhas acabam de começar a convergir? E não abriria um novo negócio na mesma direção, mas esperaria quando eles cruzassem na direção oposta?

2. ou fechar um comércio quando o r.c.i. cruza o nível 80 para baixo na compra, e o nível 20 para baixo na venda. e ao fechar um comércio, quando as condições são cumpridas, ele não abriria um comércio na mesma direção, mas esperaria que eles cruzassem na direção oposta?

Se houver algum tópico similar no fórum, por favor, me dê um link!

Muito obrigado de antemão!

Tenha um bom negócio!

Ofícios rentáveis!

 

Olá a todos!

Por favor, diga-me o que isto significa:

Pedido de compra ...... falhou [Tempo limite de troca].

Especificamente interessado no que é este timeout

 
smartemiy:

Boa tarde!

Obrigado por suas respostas - você tem sido muito útil ))))

Gente! O Expert Advisor faz negócios quando os dois muwings se cruzam. E quando eles cruzam para trás, fecha os negócios e abre na direção oposta, perdendo lucros.

1. Como posso escrever que fecha negócios quando as linhas acabam de começar a convergir? E não abriria um novo negócio na mesma direção, mas esperaria quando eles cruzassem na direção oposta?

2. ou fechar um comércio quando o r.c.i. cruza o nível 80 para baixo na compra, e o nível 20 para baixo na venda. e ao fechar um comércio, quando as condições são cumpridas, ele não abriria um comércio na mesma direção, mas esperaria que eles cruzassem na direção oposta?

Se houver algum tópico similar no fórum, por favor, me dê um link!

Muito obrigado de antemão!

Tenha um bom negócio!

Ofícios rentáveis!


https://www.mql5.com/ru/code tem um estoque de produtos similares
 
Outra pergunta: que função pode ser usada para retirar o custo por ponto de ferramenta?
 
PapaYozh:


Primeiro, OrderSend() ocorre 2 vezes lá e ambas as vezes fora da condição que você especificou.

Não quero ser um chato, porém.

if(OrdersTotal()>0&&tral>0&&OrderMagicNumber()==MAGIC&&(OrderType()==OP_SELL||OrderType()==OP_BUY)){
     if(ObjectFind(NamePrice)==-1)
      {
        ObjectCreate(NamePrice,OBJ_HLINE,0,0,Ask);
        ObjectSet(NamePrice,OBJPROP_COLOR,LineColor);
      }
      double n= ObjectGet( NamePrice, OBJPROP_PRICE1); 
      double p1= ObjectGet( NamePrice1, OBJPROP_PRICE1);
      double p2= ObjectGet( NamePrice2, OBJPROP_PRICE1);
//....................................................................... 
      double d= AccountEquity()-AccountBalance();                 
       if(ObjectFind(NamePrice1)==-1&&d>0)
      {       
        ObjectCreate(NamePrice1,OBJ_HLINE,0,0,n+d*Point*10);
        ObjectSet(NamePrice1,OBJPROP_COLOR,LineColor1);
      }
      if(n+d*Point*10>p1)ObjectSet(NamePrice1,OBJPROP_PRICE1,n+d*Point*10);
      if(ObjectFind(NamePrice2)==-1&&n+d*Point*10<p1)
      {       
        ObjectCreate(NamePrice2,OBJ_HLINE,0,0,n+d*Point*10);
        ObjectSet(NamePrice2,OBJPROP_COLOR,LineColor2);
      } 
      if(p2!=n+d*Point*10)ObjectSet(NamePrice2,OBJPROP_PRICE1,n+d*Point*10);  
      if(nb+ns==2&&tral<20&&p1-p2>=(p1-n)/tral&&p2>n&&p2-n>dohod*Point/10)CloseALL(); 
      if(nb+ns==2&&tral>20&&p1-p2>=tral*Point&&p2>n)CloseALL();  
      }
//..........................................................................
    if(ob==0||OrderOpenTime()<iTime(Symbol(),TF,0))
       { 
     
      if( R==1&&zb==0&&C1>O1&&iVolume(Symbol(),TF,0)<2)
         {
         if(ob==0||OrderOpenTime()<iTime(Symbol(),TF,0))
         {
         OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+dist*Point,3,0,0,"ko",MAGIC,TimeCurrent()+60*experation,Green);
         }
         }
      
      }
    if(os==0||OrderOpenTime()<iTime(Symbol(),TF,0))
        {      
      if(R==1&&zs==0&&C1<O1&&iVolume(Symbol(),TF,0)<2)
        {        
         if(os==0||OrderOpenTime()<iTime(Symbol(),TF,0))
         {
         OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-dist*Point,3,0,0,"ko",MAGIC,TimeCurrent()+60*experation,Red);
         }
         }
      return(0);
     }
   

   
  }

Explique-me como uma ordem será aberta se OrderTotal() for zero.

Obrigado.

 

Por favor, diga-me qual código deve ser escrito na EA para fazer o comércio da EA apenas uma vez por hora

Por exemplo, a EA acionou, uma ordem é aberta (não estou interessado em mais), eu gostaria que a ordem não fosse aberta no bar atual em um período de uma hora

tudo se parece com isto

int hh;
int CurrentHour;
CurrentHour=TimeHour(TimeCurrent());
if (CurrentHour!=hhh)
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point);
hh=TimeHour(TimeCurrent());
}

mas tenho incontáveis pedidos abertos