Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 22

 
Artyom Trishkin:

¡О! Gracias. No me di cuenta por la mañana... Sin embargo, todavía hay que hacer una comprobación para llenar las matrices. En Quatermass no se reunió, y en Cinco bastante a menudo no rellenado los datos la primera vez debido a la falta de datos históricos.

ZS. Deberías dormir más - tus pensamientos trabajarán en esa dirección.

Bueno, puedes ponerlo en un bucle

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 0);

o incluso

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 15);

para copiar exactamente la cantidad solicitada.


ps; Mientras me iba a servir el té, tenía otra idea, usar CopyRates() y estructuras de array MqlRates rates[] pero me da pereza reescribir algo.

 
Alexey Viktorov:

Bueno, también podrías ponerlo en un bucle

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 0);

o incluso

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 15);

para copiar exactamente el número de copias solicitadas.


ps; Mientras me tomaba un té, tuve otra idea - usar CopyRates() y array de estructuras MqlRates rates[] pero me da pereza reescribirlo.

¿No es la forma que propuse?
 
giannis1386:
Ayúdame a comprobar otras condiciones de venta.
int start()
{
//+--------------------------------------------------------------------+
//|   -= stop loss в без убыток =-                                      |
//+--------------------------------------------------------------------+
bool   result;
double stop;
int    cmd,error;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderProfit()>pOPCS)
{
cmd=OrderType();
double blevel=OrderStopLoss()<Bid-Point*TS;
double slevel=OrderStopLoss()>Ask+Point*TS;
//---
if(cmd==OP_BUY || cmd==OP_SELL)
{
while(true)
{
if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;
result=OrderModify(OrderTicket(),OrderOpenPrice(),stop,0,0,Orange);
if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
else error=0;
if(error==135) RefreshRates();
else break;
}
}
}
}

Tiene una lógica extraña. Pero incluso si no te fijas en la extraña lógica, entonces:

Aquí tienes dos condiciones para Comprar, y todo el resto para Vender.

if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;
 
Artyom Trishkin:

Su lógica es extraña. Pero incluso si no te fijas en la extraña lógica, entonces:

Aquí tiene dos condiciones marcadas para Comprar, y todo el resto para Vender

if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;

He intentado adjuntarslevel=OrderStopLoss()>Ask+Point*TS para la venta;

Pero como no tengo ni idea de programación, no ha salido nada útil. He curioseado por los foros durante una semana.

El código no es totalmente mío.

 
giannis1386:

He intentado añadirslevel=OrderStopLoss()>Ask+Point*TS;

Llevo una semana curioseando en los foros. Todos mis intentos terminaron con el Sell Stop moviéndose junto con el precio.

El código no es del todo mío. Lo he retocado lo mejor que he podido.

¿Por qué no escribes primero las condiciones en las que se deben desplazar los stops de venta y compra?

Y luego, después de pensarlo, escribe en tu código lo que está escrito en el resguardo.

 
Artyom Trishkin:

Y en primer lugar, escriba en un papel con un lápiz las condiciones en las que necesita cambiar el stop de compra y el stop de venta.

Y luego, después de haberlo pensado, escribe en el código lo que está escrito en el papel.

slevel=OrderStopLoss()>Ask+Point*TS; esto es lo que parece para una posición de Venta.
 
giannis1386:
slevel=OrderStopLoss()>Ask+Point*TS; bueno, parece que es el correcto. ¿O está mal? Soy nuevo en esto.

¿Entiendes siquiera lo que está escrito en esta condición? Es una asignación de cero o uno a una variable de tipo double

¿Qué quieres conseguir?

 
Artyom Trishkin:

¿Entiendes siquiera lo que está escrito en esta condición? Es una asignación de cero o uno a una variable de tipo double

¿Qué quiere conseguir?

Esto es lo que he corregido.

Comprobar la condición: no mover el SL de un lado a otro, sino sólo en una dirección.

Por ejemplo, para un pedido de COMPRA, su fórmula

OrderStopLoss()<bid-point*TrailingStop

Con este ejemplo, lo he hecho para Sel.

 
giannis1386:

Esto es lo que he leído.

Comprobar la condición - no mover el SL hacia adelante y hacia atrás, sino sólo en una dirección

Por ejemplo, para un pedido de COMPRA, su fórmula

OrderStopLoss()<bid-point*TrailingStop

Usando este ejemplo, lo pegué para una posición de venta.

Así que lo necesitas así:

en ruso... si la orden de stop es menor que el precio Bid menos la distancia de trailing stop, entonces ... su acción

Y se asigna a la variable el resultado de esta expresión lógica, es decir, cero o uno.

 
Artyom Trishkin:

Así que necesitas esto:

en ruso... si la orden de stop es menor que el precio Bid menos la distancia de trailing stop, entonces ... sus acciones

Y se asigna a la variable el resultado de esta expresión booleana, es decir, cero o uno.

Estoy completamente confundido.

double blevel=OrderStopLoss()<Bid-Point*TS; me funciona. SL va tras el precio sólo en beneficio.

double slevel=OrderStopLoss()>Ask+Point*TS; No sé cómo añadir este a else

no son un bool.

Razón de la queja: