[¡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 81

 

extern bool BUY = true;
extern int Magic = 0;
extern double Lot = 0.1;
extern int takeprofit = 0;
extern int stoploss = 0;
extern int slippage = 3;
double SL,TP;
int init(){
return(0);
}
int start()
{
if (BUY)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;

BUY=false;
}

return(0);
}
void OPENORDER(string ord)
{
int error;
while (true)
{ error=true;
if (ord=="Buy") error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,",Magic,0){BUY = false;}
}
return;
}

 
nemo811:

Por favor, dame un ejemplo. Estoy aprendiendo, y aún no me he enfrentado a la tarea de configurar una bandera. )
Sólo hay que cambiar la variable a false y ya está, en el siguiente tick el EA no entrará en este bloque y no abrirá nada más hasta que se reinicie.
 
nemo811:

Por favor, indique cómo permitir una única ejecución de una condición en un EA (por ejemplo, la apertura de una orden), en lugar de repetirla con cada tick. En este caso, al cerrar una posición, el EA no debería abrir una nueva. He intentado hacerlo, pero no funciona como se pretende.

Gracias de antemano.



¿por qué ha nombrado la variable donde se guardará el ticket de pedido error?

if (ord=="Buy") error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0){BUY = false;}

Lee sobre OrderSend(), creo que las preguntas desaparecerán solas, yo escribiría algo así:

void OPENORDER(string ord)
{
int ticket = -1;
 while (ticket<0)
 {ticket=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0);
  sleep(500);
}
return;
}
 
IgorM:



Tal vez hayas leído antes que he expresado mi problema. Parece que han encontrado una solución, pero no encuentro en el libro cómo trabajar con string en mql(

¿cómo se sacan los números de la línea por línea?

 
NameLess:


Tal vez hayas leído antes que he expresado mi problema. Parece que han encontrado una solución, pero no encuentro en el libro cómo trabajar con string en mql(

¿cómo se sacan los números de la línea por línea?


Crear un script para experimentar con las funciones de cadena MQL4 - ver aquí https://docs.mql4.com/ru/strings
 

CERO

¿bajo qué normas, por ejemplo?

 
drknn:

Crear un script que experimente con las funciones de cadena MQL4 - ver aquí https://docs.mql4.com/ru/strings/StringSubstr

Gracias.
 
NameLess:


Tal vez hayas leído un poco antes que expresé mi problema. Parece ser una solución, pero no encuentro en el libro la forma de trabajar con cadenas en mql (

¿Cómo puedo sacar un número de una cadena de números?

para convertir un número en una cadena https://docs.mql4.com/ru/convert/DoubleToStr

cortar una parte de la cadena https://docs.mql4.com/ru/strings/StringSubstr desde el principio https://docs.mql4.com/ru/strings/StringLen

y convertirlo de nuevo al tipo real https://docs.mql4.com/ru/convert/StrToDouble

eso es todo lo que necesitas hacer con cadenas, quizás StrToDouble() sea suficiente para ti.

pero esta "forma fea" cortará el número, no lo redondeará. Otra forma: multiplicar un número real a potencia de x por 10, y dar el resultado al tipo int - si no me equivoco, no habrá redondeo, luego dividir int por 10 a potencia de x.

 
IgorM:

traducir un número a la cadena https://docs.mql4.com/ru/convert/DoubleToStr

cortar una parte de la cadena https://docs.mql4.com/ru/strings/StringSubstr desde el principio de https://docs.mql4.com/ru/strings/StringLen

y volver a convertir todo a un tipo real https://docs.mql4.com/ru/convert/StrToDouble

eso es todo lo que necesitas hacer con cadenas, quizás StrToDouble() sea suficiente para ti.

pero esta "forma fea" cortará el número, no lo redondeará. Otra forma: multiplicar un número real por 10 a la potencia de x, y dar el resultado al tipo int - si no me equivoco, no habrá redondeo, luego dividir int por 10 a la potencia de x


al menos *cortado*, ya que el número sólo se puede sacar del indicador a una cadena... gracias por el consejo, experimentaré)
 

IgorM:

Sin nombre :

Gracias por la ayuda. Entiendo la lógica con el establecimiento de la bandera y la función de devolver el número de órdenes. Pero también me interesa el momento en que se cierra el pedido. Parece que la condición de la bandera intenta colocar una orden de nuevo, pero la función que devuelve el número de orden dice que hay 1 orden menos e inicializa la apertura de una posición también. Corríjanme si me he perdido algo.
Razón de la queja: