Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1134
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Estimados programadores, por favor ayuden a un novato en este negocio.
El EA está abriendo órdenes de compra y venta secuencialmente después de un cierto período de tiempo. Quiero que modifique todas las órdenes anteriores (en concreto, que todas las anteriores se cierren con el Take Profit de la última. Es decir, si la última orden de compra y la orden de venta anterior, entonces el stop loss de la orden anterior se establece en el nivel de take profit de la última,
Si la compra anterior compra, entonces su TakeProfit se establecerá en el nivel del último TakeProfit. La cuestión es que cuando llega la toma de beneficios de la última orden, todas las órdenes deben estar cerradas).
Espero haberlo explicado con claridad, aunque es difícil entender cómo debe aplicarse. Gracias de antemano.
Entiendo que podemos pasar por todas las órdenes abiertas y modificarlas, pero ¿cómo podemos saltarnos la última?
Lo más importante en todo esto es entender lo que debe ocurrir.
¿Qué es la "última orden"? ¿Es la última a la hora de abrir? ¿O por el nivel de precios de apertura?
¿Y si consideramos "la última" orden como "COMPRA", pero el precio se va a la mierda? O al revés, ¿la última orden será de VENTA, pero el precio va hacia el norte? Entonces, ¿cuál debería considerarse el último? Esto es lo que tenemos que entender para realizar nuestra idea.
Hola. Si no sabes de antemano cuántos elementos habrá en la matriz, ¿cómo declaras la matriz para que ésta aumente con cada nuevo elemento?
Un ejemplo para que quede más claro:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Hola. Si no sabes de antemano cuántos elementos habrá en la matriz, ¿cómo declaras la matriz para que ésta aumente con cada nuevo elemento?
Un ejemplo para que quede más claro:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Deberías leer la documentación más a menudo.
He leído y probado pero me sale un error de "array fuera de rango". En el ejemplo se veía así:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
He leído y probado pero me sale un error de "array fuera de rango". En el ejemplo se veía así:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Cuando la condición A[i] < B[i] no se cumple, el tamaño del array no cambia y el contador del bucle se incrementa. Por eso está fuera de alcance.
Inténtalo de esta manera.
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
int size = ArraySize(HighA);
ArrayResize(HighA, size+1);
HighA[size]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Cuando la condición A[i] < B[i] no se cumple, el tamaño del array no cambia y el contador del bucle se incrementa. Por eso está fuera de los límites.
Inténtalo de esta manera.
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
int size = ArraySize(HighA);
ArrayResize(HighA, size+1);
HighA[size]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
He leído y probado pero me sale un error de "array fuera de rango". En el ejemplo se veía así:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Bueno, eso funcionaría más rápido
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[countHlines-1]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
// Вариант №2
int countHlines=-1;
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines+1);
HighA[countHlines]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Bueno, así funcionará más rápido
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[countHlines-1]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
// Вариант №2
int countHlines=-1;
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines+1);
HighA[countHlines]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Gracias, ya veo. Será más rápido debido a la ArraySize, ¿se ralentiza de alguna manera?
No es mucho, pero es claro y a prueba de errores.