Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 90
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
la tesis: movimiento=vida, descanso=muerte. ¿Qué dice en el registro? Está en la parte inferior derecha dos pestañas
si yo tuviera uno - lo revisaría y lo arreglaría ...
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategia
Preguntas de los principiantes MQL4 MT4 MetaTrader 4
Ilya Prozumentov, 2017.06.11 13:53
Existe un modelo de clase para trabajar con un array.Para esta clase de plantilla, necesitamos implementar la ordenación, dado que el array puede almacenar tipos de datos complejos. Por ejemplo:
ArrayList<PP*> *dde; // PP - класс
Puedo escribir diferentes funciones para tipos simples y complejos, pero el compilador no entiende que las funciones están rígidamente delimitadas por el tipo de datos y sigue maldiciendo:
'<' - operación ilegal usar ArrayList.mqh
Así que decidí incrustar la interfaz:
Todas las partes de la construcción se compilan. Pero si tratas de declararlo:
ArrayList<PP*> *dde; // PP - класс
entonces, al compilar el archivo, estos son los errores:'QuickSorts' - plantilla incorrecta varQSort.mqh /*error 1*/
'=' - tipo erróneo ArrayList.mqh /*error 2*/
P.D.¿Qué debo arreglar en el código para eliminar este desajuste de tipo? No entiendo por qué se produjo en primer lugar.
'<' - operación ilegal usar varQSort.mqh
me persigue en esta construcción también. Es este mismo error el que quería eliminar. Pero entiendo este error, y no entiendo esos dos.
Necesito, por ejemplo el lunes, si tengo que abrir 2 o 3 operaciones, la función compara el tiempo y envía la tubería, pero tengo un tiempo comparado hasta ahora.
Porque cuando se pulsa el botón "descargar", se descargan 6 000 000 de cotizaciones. No todo el mundo quiere llenar el disco duro con datos de cotizaciones, esperar mucho tiempo hasta que se descarguen y luego eliminar los datos innecesarios de la tabla de cotizaciones.
Hola querida... ¿Puede decirme por qué el código de trailing stop especificado para las órdenes de COMPRA funciona correctamente ...
... ... pero el mismo para las órdenes de VENTA no fija el SL...
... La razón es probablemente en la condición(Ask+8*D*Point)<OrderStopLoss(), si la eliminamos, el SL se establecerá, pero el Trailing Stop funciona incorrectamente sin la condición especificada ...
Para las órdenes deCOMPRA ,la condición(Bid-8*D*Point)>OrderStopLoss(), siOrderStopLoss()==0, se aceptacorrectamente (es decir, algún valor > 0) ...
... Perola condición(Ask+8*D*Point)<OrderStopLoss(),OrderStopLoss()==0 no escorrecta ( es decir, algúnvalor es< 0
) ...Por favor, aconsejen cómo formular correctamente en el código la condición requerida(Ask+8*D*Point)<OrderStopLoss()para que funcione correctamente
elTrailing Stop con órdenesSELL
.
Agradezco de antemano a todos los que respondan
.Buenas tardes: Hay una función en la que el indicador lee el archivodel historial de ticks. Pero sólo se lee una vez, cuando se carga o actualiza el indicador. ¿Cómo puedo hacer que se lea cada vez que aparece el primer tick de la barra cero?
void ProcessOldCandles(int limit, TickStruct &lastTick)
{
int hTicksFile = FileOpen(Symbol() + ".tks", FILE_BIN | FILE_READ | FILE_SHARE_READ | FILE_SHARE_WRITE);
if (hTicksFile < 1)
return;
TickStruct tick;
while (!IsStopped())
{
if (!IsReadTimeAndBidAskOfTick(hTicksFile, tick))
return;
if (tick.time >= Time[limit])
break;
}
lastTick = tick;
int barIndex = iBarShift(NULL, 0, tick.time);
while (barIndex >= 0)
{
if (!IsReadTimeAndBidAskOfTick(hTicksFile, tick))
return;
if (!IsTickBelongToBar(tick, barIndex))
barIndex = iBarShift(NULL, 0, tick.time);
ProcessOneTick(barIndex, tick, lastTick);
}
FileClose(hTicksFile);
Hola querida... Me pueden decir por qué este código de Trailing Stop para órdenes de COMPRA funciona correctamente ...
... ... pero el mismo para las órdenes de VENTA no fija el SL...
... La razón es probablemente en la condición(Ask+8*D*Point)<OrderStopLoss(), si la eliminamos, el SL se establecerá, pero el Trailing Stop funciona incorrectamente sin la condición especificada ...
Para las órdenes deCOMPRA ,la condición(Bid-8*D*Point)>OrderStopLoss(), cuandoOrderStopLoss()==0 se tomacorrectamente (es decir, algún valor > 0) ...
... Perola condición(Ask+8*D*Point)<OrderStopLoss(), cuandoOrderStopLoss()==0 no se consideracorrecta (es decir, algún valor es< 0
) ...Por favor, aconsejen cómo formular correctamente en el código la condición requerida(Ask+8*D*Point)<OrderStopLoss()para que funcione correctamente
elTrailing Stop con órdenesSELL
.
Agradezco de antemano a todos los que respondan
.Hola a todos ... algo de muy poca actividad en esta rama del foro ... el problema se resuelve así...
... Es un poco largo, pero funciona... Quién sabe cómo hacerlo más corto, puede acortarlo, se lo agradecería... el resto de nosotros puede usarlo tal cual.
introduzca la función
OrderCloseByTicket (542534564)
Cerrar el pedido por el billete con el lote completo.
para no tener que especificar los lotes, el precio, el deslizamiento.
similar a pulsar una cruz en la orden en el terminal.
introduzca la función
OrderCloseByPos (0)
cerrar la orden por posición.
y entonces no habrá necesidad de prescribir estas engorrosas construcciones.
Hola! Los dos números menos q y w se comparan incorrectamente, cuando son iguales, el operador if piensa que uno es mayor que el otro.¿Cuál es el error? Cuando q = -0,0002 y w es también -0,0002, res12=falso, ¿por qué?