[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 476

 
Si lo necesitas, publicaré el jma también. Cambiar el nombre del indicador a JMA[i]
Archivos adjuntos:
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;

Se pasa por barras desde el tiempo actual hasta el tiempo pasado.

Se busca en el array hasta el último.

Por lo tanto, todas las variables darán valores para el caso más reciente (en este caso -- hace mucho tiempo).

Por lo tanto, hay que hacer una búsqueda desde el pasado hasta el presente.

for(i = limit; i >= 0; i--)
Y las variables
int fd, fu,Fd, Fu;

declaran en el nivel superior, es decir, antes de Start e Init.

Y no hay necesidad de ponerlos a cero en el Start. Deje la puesta a cero sólo en el lugar en el que las tiene puestas a cero

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 Gracias, Vce está funcionando.
 
PapaYozh:


En primer lugar, OrderSend() ocurre 2 veces allí, y ambas veces fuera de la condición que usted especificó.

En segundo lugar, el precio no normalizado se pasa a OrderSend().

En tercer lugar, analice el resultado devuelto por la función OrderSend(), escriba un mensaje en el registro en caso de errores al abrir/modificar/cerrar el pedido y analice el registro.


¿Puede alguien publicar la versión corregida del Experimento 1?
 

¡Buenas tardes!

Gracias por sus respuestas, han sido de gran ayuda ))))

¡Chicos! El Asesor Experto realiza operaciones cuando los dos muwings se cruzan. Y cuando se cruzan de nuevo, cierra las operaciones y abre en sentido contrario, perdiendo beneficios.

1. ¿Cómo escribo que cierra acuerdos cuando las líneas acaban de empezar a converger? ¿Y no abriría un nuevo trato en la misma dirección, sino que esperaría cuando se cruzaran en la dirección opuesta?

2. o cerrar una operación cuando el r.c.i. cruza el nivel 80 hacia abajo en la compra, y el nivel 20 hacia abajo en la venta. y al cerrar una operación, cuando se cumplen las condiciones, no abriría una operación en la misma dirección, sino que esperaría a que se cruzaran en la dirección opuesta?

Si hay algún hilo similar en el foro, por favor, dame un enlace.

Muchas gracias de antemano.

¡Que tengas un buen intercambio!

¡Operaciones rentables!

 

Hola a todos.

Por favor, dígame qué significa esto:

Orden de compra ...... fallida [Tiempo de espera de la operación]

En concreto, me interesa saber cuál es este tiempo de espera

 
smartemiy:

¡Buenas tardes!

Gracias por sus respuestas, han sido de gran ayuda ))))

¡Chicos! El Asesor Experto realiza operaciones cuando los dos muwings se cruzan. Y cuando se cruzan de nuevo, cierra las operaciones y abre en sentido contrario, perdiendo beneficios.

1. ¿Cómo escribo que cierra acuerdos cuando las líneas acaban de empezar a converger? ¿Y no abriría un nuevo trato en la misma dirección, sino que esperaría cuando se cruzaran en la dirección opuesta?

2. o cerrar una operación cuando el r.c.i. cruza el nivel 80 hacia abajo en la compra, y el nivel 20 hacia abajo en la venta. y al cerrar una operación, cuando se cumplen las condiciones, no abriría una operación en la misma dirección, sino que esperaría a que se cruzaran en la dirección opuesta?

Si hay algún hilo similar en el foro, por favor, dame un enlace.

Muchas gracias de antemano.

¡Que tengas un buen intercambio!

¡Operaciones rentables!


https://www.mql5.com/ru/code tiene un almacén lleno de similares
 
Otra pregunta: ¿qué función se puede utilizar para sacar el coste por punto de herramienta?
 
PapaYozh:


En primer lugar, OrderSend() ocurre 2 veces allí y ambas veces fuera de la condición que usted especificó.

Sin embargo, no quiero ser una molestia.

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);
     }
   

   
  }

Explíqueme cómo se abrirá una orden si OrderTotal() es cero.

Gracias.

 

Por favor, dígame qué código debe ser escrito en el EA para hacer el comercio EA sólo una vez por hora

Por ejemplo, el EA se ha disparado, se ha abierto una orden (no me interesa más), me gustaría que la orden no se abriera en la barra actual en el marco temporal horario

todo se parece a esto

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

pero tengo innumerables pedidos abiertos

Razón de la queja: