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.
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{
staticint lt2=0;
if(TimeCurrent()>lt2+20){
lt2=TimeCurrent();
Print("Need open buy. Trade Context Busy");
}
return(-2);
}
}
else{
staticint 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é? ????
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".
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....
Hola
mi botón "iniciar en datos históricos" no está activo
¿Cuál podría ser la razón?
Hola
mi botón "iniciar en datos históricos" no está activo
¿Cuál podría ser la razón?
¿Son correctos los parámetros?
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.
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.....
¿Puede decirme cuál puede ser el problema? ¡He intentado adjuntar diferentes indicadores, todos funcionan, pero sólo en el Probador de Estrategias!
¡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 );
¡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...
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".
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....