Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 920

 

Hola

mi botón "iniciar en datos históricos" no está activo

¿Cuál podría ser la razón?

 
mukata:

Hola

mi botón "iniciar en datos históricos" no está activo

¿Cuál podría ser la razón?

¿Empezar qué?
 
Vinin:
¿Son correctos los parámetros?
No, los parámetros son correctos. Comprobado el cambio de 0 a 99. Todos los valores de 1 a 99 se corresponden claramente con el indicador, pero con un valor de desplazamiento de 0, los datos no se corresponden con el indicador. No consigo averiguar cómo se toman y cuál es mi error.
 

Que se diviertan todos :-)

Me he enfrentado a este problema. Tengo una función que pone una orden pendiente. Pero los coloca SÓLO si no hay ningún pedido al precio dado. Pero un pedido se repite al mismo precio de forma extraña. Esta es la función que realiza un pedido.

int fOrderOpenBuy(double PR1, double PTP){
bool chek1=false;
   RefreshRates();
   double lts=fGetLotsSimple(OP_BUY);
      if(lts>0){      
         if(!IsTradeContextBusy()){
            //double PR=Close[1]-(150*Point);
            double slts=ND(PR1-Point*StopLoss);
            if(StopLoss==0)slts=0;
//проверка ордеров
     int  TotalOrders=OrdersTotal(); 
           for (int i=0; i<=TotalOrders; i++){
     
                 if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
                 
                     if   (PR1==OrderOpenPrice()){chek1=true;}   
                 Print ("Чек "+OrderOpenPrice()+"  "+PR1);
                 }
           }  
        if (chek1==false) {   int irv=OrderSend(Symbol(),OP_BUYLIMIT,lts,PR1,Slippage,slts,PTP,NULL,Magic_N,0,CLR_NONE); }
               if(irv>0){
                  PlaySound("ok");
                  return(irv);
               }
               else{
                  PlaySound("timeout");
                  Print ("Error open BUY. "+fMyErDesc(GetLastError())); 
                  return(-1);
               }
         }
         else{
            static int lt2=0;
               if(TimeCurrent()>lt2+20){
                  lt2=TimeCurrent();
                  Print("Need open buy. Trade Context Busy");
               }            
            return(-2);
         }
      }
      else{
         static int lt3=0;
            if(TimeCurrent()>lt3+20){
               lt3=TimeCurrent();
               if(lts==-1)Print("Need open buy. No money");
               if(lts==-2)Print("Need open buy. Wrong lots size");                  
            }
         return(-3);                  
      }
}  

Se obtienen los mismos precios de apertura, pero la líneaif(PR1==OrderOpenPrice()){chek1=true;} no se quiere ejecutar. ¿Alguien puede responder por qué? ????

 

Porque me estoy cansando de ..... :-( los precios son los mismos y el pedido sigue abierto.....

 
Estimados profesionales !!!!! El EA no opera en Demo y Real, pero en el Probador de Estrategias todo está bien!

¿Puede decirme cuál puede ser el problema? ¡He intentado adjuntar diferentes indicadores, todos funcionan, pero sólo en el Probador de Estrategias!

Archivos adjuntos:
 

¡Buenas tardes a todos!

¿Puedes darme una pista...

Aquí hay un fragmento de código en el que hay dos condiciones cuando la función Print imprime un mensaje.

El problema.

La función de impresión imprime el mensaje CADA tick, necesito que lo imprima sólo en el primer tick y en el resto - descansado.

Por favor, aconséjeme cómo detenerlo después del primer tic.

Gracias.

if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))

if ( OrderType ()==OP_SELL)

X1 = OrderProfit( );

if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))

if ( OrderType ()==OP_SELL)

si(X1 < 0)

Print(" LOW ", X1 );

 
solnce600:

¡Buenas tardes a todos!

¿Puedes darme una pista...

Aquí hay un fragmento de código en el que hay dos condiciones cuando la función Print imprime un mensaje.

El problema.

La función de impresión imprime el mensaje CADA tick, necesito que lo imprima sólo en el primer tick y en el resto - descansado.

Por favor, aconséjeme cómo detenerlo después del primer tic.

Gracias.

si (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))

if ( OrderType ()==OP_SELL)

X1 = OrderProfit( );

si (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))

if ( OrderType ()==OP_SELL)

si(X1 < 0)

Print(" LOW ", X1 );

Si se trata de un sitio de racha una vez por barra, utilizo

si (b!=Bars){

b=Barras;

}

Así que el cálculo que está entre paréntesis sólo ocurre una vez por barra...

 
nikelodeon:

Si hablamos de rachsite una vez por barra, uso

si (b!=Bars){

b=Barras;

}

Por lo tanto, el cálculo que está entre paréntesis sólo ocurre una vez por barra...

Muchas gracias.

Necesito que la información se muestre en la primera barra de minutos y sólo en ella.

La versión que propones la he probado, ..... pero muestra la información de la 2 y la 3 y así sucesivamente... porque la segunda barra no es igual a la primera y la tercera no es igual a la segunda, etc.

Necesito imprimir la información una vez en el primer bar. Y hasta que la siguiente orden sea cerrada por el STOP, la función deimpresión debe "descansar".

 
solnce600:

Muchas gracias.

Necesito que la información se muestre en la primera y sólo en la primera barra de minutos.

La opción que ofreces la he probado, ..... pero muestra información sobre la 2 y la 3 y así sucesivamente... porque la segunda barra no es igual a la primera y la tercera no es igual a la segunda, etc.

Necesito imprimir la información una vez en el primer bar. Y la función deimpresión debe "descansar" hasta que la siguiente orden sea cerrada por el STOP.

Intenta usar una bandera.

como

bool flag=false;

......

if (x1<0)&&(flag==false){Print();flag=true;}

Entonces la impresión se hará UNA vez.

Y después de que se active la parada, restablecer la bandera a falso y la impresión se ejecutará una vez más....