[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 77

 

Hola a todos

Por favor, aconsejar, ¿por qué scoop comprar, pero cuando las condiciones están maduras no cerrar la posición

/---- parámetros de entrada
extern int PerRSI=8;
extern int CámaraMágica=77771;
extern double Lots=1.0;
//+------------------------------------------------------------------+
int inicio()
{
int
cnt, // índice de orden
ticket, // número de identificación del pedido
total; // número de pedidos ya abiertos
doble
rsi_0, // Valor. rsi_0 actual
rsi_1; // Valor. rsi_1 1ª barra
si (Bares<100)
{
Print("barras menos de 100");
return(0);
}
total=Total de pedidos();
if(total<1)
{
rsi_0=iRSI(NULL,0, PerRSI,0,0); // Barra actual
rsi_1=iRSI(NULL,0, PerRSI,0,1); // Barra actual más 1

if(rsi_0 < rsi_1 && rsi_0 < 30) // Si la línea ha cruzado 30
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Orden de venta abierta : ",OrderOpenPrice())
}
else Print("Error al abrir la orden de VENTA : ",GetLastError());
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_BUY && OrderSymbol()==Symbol()) // ¿es una posición abierta? OP_BUY o OP_SELL
{
if(OrderType()==OP_BUY) // posición larga abierta
{
if(rsi_0 > rsi_1 && rsi_0 > 70) // si la línea ha cruzado el 70
{
OrderClose(OrderTicket(),1,Bid,3,Violet); // cerrar posición

return(0); // salir
}}}}}}
 
KoZaNOStra >> :

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Orden de venta abierta : ",OrderOpenPrice())
}


¿Qué demonios es esto? ¿Para qué sirve OrderSelect()?


El resto es difícil de entender porque el código está dispuesto sin sangrías y no se pueden seguir los paréntesis - no quiero estropear mi visión.

 
¿Cómo puedo decolorar el gráfico para mostrar el movimiento del borde de salida?
 
anat писал(а) >>

Muchas gracias por toda su ayuda. Y también al cóndor - y. Ahora hay otro problema. Por ejemplo, hemos abierto 10 posiciones de compra. Cuando cerramos 1, 2, 3, etc. posiciones utilizando el stop o la toma, el Asesor Experto empieza a comprar, si hay señal de compra. Pero necesito que primero se cierren TODAS las órdenes, y luego, cuando no haya ninguna posición abierta, se iniciará un nuevo ciclo de negociación. En otras palabras, necesitamos un contador. Primero se abren las posiciones hasta un número determinado, y luego, cuando se cierran las posiciones, hasta cero. Me gustaría dar las gracias por adelantado.

Es exactamente como se hace ahora. Mientras haya al menos una orden abierta, no se abrirá otra. Si quieres hacer lo contrario, tienes que ser más preciso. Entonces tiene que elegir - si sus órdenes se abren si hay posiciones abiertas o no.

 

He aquí una pregunta:

¿Existen herramientas de depuración en MetaTrader?

Por favor, comparte tus experiencias: ¿cómo depuras los scripts y los EAs?

Se trata de dígitos, parámetros, visiones de algoritmos, etc. ¿Cómo se detectan los errores en el algoritmo?

 
Ryan_ryan >> :

He aquí una pregunta:

¿Existen herramientas de depuración en MetaTrader?

Por favor, comparte tus experiencias - ¿cómo depuras los scripts y los Asesores Expertos?

Si necesito hacer depuración, lo hago a través de Print()

Pero en la mayoría de los casos no surge esa necesidad.

 

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Me pueden decir por qué en este diseño después de cerrar una orden suena primero "timeout.wav", "no error" igual al número de órdenes que se cierran (si se cierran 2 órdenes, saldrá dos veces "no error", etc.), y luego suena "money.wav". Lo curioso es que esto es sólo para operaciones cortas, para operaciones largas todo funciona bien. ¿Quién sabe cuál es el truco y cómo solucionarlo?

 
Dimoncheg писал(а) >>

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Me pueden decir por qué en este diseño después de cerrar una orden suena primero "timeout.wav", "no error" igual al número de órdenes que se cierran (si se cierran 2 órdenes, saldrá dos veces "no error", etc.), y luego suena "money.wav". Lo curioso es que esto es sólo para operaciones cortas, para operaciones largas todo funciona bien. ¿Quién sabe cuál es el truco y cómo solucionarlo?

¿No es el soporte después de la primera si se cierra?

if(OrderType()==OP_SELL && OrderMagicNumber()==mnum

Esta línea se cae de alguna manera.

 
Dimoncheg >> :

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Me pueden decir por qué en este diseño después de cerrar una orden suena primero "timeout.wav", "no error" igual al número de órdenes que se cierran (si se cierran 2 órdenes, saldrá dos veces "no error", etc.), y luego suena "money.wav". Lo curioso es que esto es sólo para operaciones cortas, para operaciones largas todo funciona bien. ¿Quién sabe cuál es el truco y cómo solucionarlo?


La condición del primer operador condicional "si" afecta sólo al siguiente operador que le sigue (la línea siguiente).

Los demás se ejecutan A MENOS que se cierre la orden. Es decir, aunque no haya ningún comando para cerrar la orden, uno de los sonidos de juego funcionará.

La forma correcta es esta:

  RefreshRates();
  if(OrderType()==OP_SELL && OrderMagicNumber()== mnum) 
  {
     bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);  
     if ( sellclose) 
        PlaySound("money.wav");
     else 
     {
        Print("Ошибка : ", Error(GetLastError()));
        PlaySound("timeout.wav");  
     }
  }
 
infinum13 >> :

¿No se cierra el paréntesis después del primer si?

if(OrderType()==OP_SELL && OrderMagicNumber()==mnum

Esta línea de alguna manera no se cierra.

Cierra, esto lo he quitado por accidente, de lo contrario no compilaría si no fuera así, si(OrderType()==OP_SELL && OrderMagicNumber()==mnum entonces se cae, pero funciona el truco en las transacciones cortas y largas, y el error "No hay error" con el sonido "timeout.wav" sólo funciona para operaciones cortas, para operaciones largas funciona bien, hay los mismos corchetes y todo es igual

Razón de la queja: