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

 
sergeev:

entonces la función OrderLots.


No puedo entender esta función, por favor ayuda con un ejemplo :)

dice "La orden debe ser preseleccionada usando la función OrderSelect()" ¿cómo selecciono todas las órdenes abiertas de la misma dirección?

 
Elektronik:


No puedo entender esta función, por favor ayúdeme con un ejemplo:)

dice "La orden debe ser preseleccionada con OrderSelect()" ¿cómo selecciono todas las órdenes abiertas de la misma dirección?

No hay manera. Sólo en un bucle recorriendo uno a uno con OrderSelect().

 

¿Puedes decirme si hay un script de stop loss que deba ser insertado en este EA?

double x = ... // Задаем на сколько пипсов выше
double sl = NormalizeDouble(High[1] + x * Point, Digits); // Задаем значение стоплосс на x пипсов выше предпоследней свечи
Archivos adjuntos:
 

¿Cómo puedo reducir el número de decimales sin redondear?

(DoubleToStr(NormalizeDouble(0.109,2),2)); = 0.11 y 0.10

 
Elektronik:

¿Cómo puedo reducir el número de decimales sin redondear?

(DoubleToStr(NormalizeDouble(0.109,2),2)); = 0.11 y 0.10

Hay un millón de maneras, por ejemplo, utilizando funciones de cadena para encontrar la ubicación de un punto y truncar una cadena un carácter más allá. Pero si hay una solución incorporada, ¿por qué tenemos que inventar problemas de la nada? Cambia el dos por el uno y ya está.
 
Reshetov:
Hay un millón de maneras, como utilizar funciones de cadena para encontrar la ubicación de un punto y truncar la cadena un carácter más allá. Pero si hay una solución lista para usar, para qué inventar problemas.


por favor, sugiera una solución ya hecha:)

 
Elektronik:


por favor, dígame si esto es una solución ya hecha:)

(DoubleToStr(NormalizeDouble(0.109,1))
 

Si no se redondea, sólo este :

Reshetov с помощью строковых функций найти местоположение точки и обрезать строку на один символ далее нее

 

Por favor, ayúdenme a entender lo que está mal:

//+------------------------------------------------------------------+

//| AAAA.mq4 ||

//| |

//| |

//+------------------------------------------------------------------+

#property copyright ""

#enlace de la propiedad ""


extern string TimeStart = "00:00"; //hora de inicio del periodo de control

extern string TimeEnd = "00:00"; //fecha de finalización del periodo de control.


extern double LOT = 0.01; // lote

extern int Magia = 777; // magia



double marga,Lot,SL,TP; // variables de margen, lote, stop loss y take profit introducidas

int Total,Orders,tipOrders,TradeDey; // variables tipo, tipo de orden, día de negociación.


//+---------------------------------------------------------------------------------------------------------------------------------------+

//| función del Asesor Experto |

//+---------------------------------------------------------------------------------------------------------------------------------------+

int start() // Función de inicialización start

{

datetime Time_Start = StrToTime(StringConcatenate(Day(),".",Month(),".",Year()," ",TimeStart, ":00")); // parámetros de inicio //

datetime Time_End = StrToTime(StringConcatenate(Day(),".",Month(),".",Year()," ",TimeEnd, ":00")); // Parámetros finales//



Total=0; // Si no hay pedidos

for(int i=1; i<=TotalPedidos(); i++) // Bucle de pedidos

{

if (OrderSelect(i-1,SELECT_BY_POS)==false) // Si no hay órdenes de mercado

{

si //Si:

{

int BarStart = iBarShift(NULL,PERIOD_M1,Time_Start,false); // busca la barra al principio del periodo de comprobación en m1

int BarEnd = iBarShift(NULL,PERIOD_M1,Time_End,false); //busca el final de la barra del periodo de referencia en m1

double Max_Price=iHigh(NULL,0,iHighest(NULL,PERIOD_M1,MODE_HIGH,BarStart-BarEnd,BarEnd)); //el valor más alto del precio dentro del periodo

double Min_Price=iLow (NULL,0,iLowest (NULL,PERIOD_M1,MODE_LOW,BarStart-BarEnd,BarEnd)); //el valor más bajo del precio dentro del periodo

}

if (TimeCurrent()>Time_End && ObjectFind("bar0"+Time_End)==-1) // Ajustes de visualización de gráficos

{

ObjectCreate("bar0"+Time_End, OBJ_RECTANGLE, 0, 0,0, 0,0);

ObjectSet("bar0"+Time_End, OBJPROP_STYLE, STYLE_SOLID);

ObjectSet ("bar0"+Time_End, OBJPROP_COLOR, Blue);

ObjectSet ("bar0"+Time_End, OBJPROP_BACK, true);

ObjectSet ("bar0"+Time_End, OBJPROP_TIME1,Time_Start);

ObjectSet ("bar0"+Time_End, OBJPROP_PRICE1,Max_Price);

ObjectSet ("bar0"+Time_End, OBJPROP_TIME2,Time_End);

ObjectSet ("bar0"+Time_End, OBJPROP_PRICE2,Min_Price);

}

if (Bid<Max_Price) OrderSend(Symbol(),OP_BUYSTOP,LOT,Ask,3,Min_Price, //condiciones para colocar una orden pendiente de COMPRA

NormalizeDouble(Ask + Max_Price - Min_Price,Digits), "UPDD",Magic,Blue);

si (Oferta>Precio_máximo)

Comentario("La orden pendiente no puede ser colocada en la oferta");

if (Bid>Min_Price) OrderSend(Symbol(),OP_SELLSTOP,LOT,Bid,3,Min_Price, //condiciones para colocar la orden pendiente de VENTA

NormalizarDoble(Pedido + Precio_máximo-Precio_mínimo,Dígitos), "UPDD",Magia,Azul);

si (Oferta<Precio_máximo)

Comentario("La orden pendiente no puede ser colocada en VENTA");

}

volver;

}

No se puede compilar. De lo contrario, debería colocar dos órdenes pendientes hacia arriba y hacia abajo del rango.

 
Legeo777:

Por favor, ayúdenme a entender lo que está mal:

//+------------------------------------------------------------------+

//| AAAA.mq4 ||

//| |

//| |

//+------------------------------------------------------------------+

#property copyright ""

#enlace de la propiedad ""


extern string TimeStart = "00:00"; //hora de inicio del periodo de control

extern string TimeEnd = "00:00"; //fecha de finalización del periodo de control.


extern double LOT = 0.01; // lote

extern int Magia = 777; // magia



double marga,Lot,SL,TP; // variables de margen, lote, stop loss y take profit introducidas

int Total,Orders,tipOrders,TradeDey; // variables tipo, tipo de orden, día de negociación.


//+---------------------------------------------------------------------------------------------------------------------------------------+

//| función del Asesor Experto |

//+---------------------------------------------------------------------------------------------------------------------------------------+

int start() // Función de inicialización start

{

datetime Time_Start = StrToTime(StringConcatenate(Day(),".",Month(),".",Year()," ",TimeStart, ":00")); // parámetros de inicio //

datetime Time_End = StrToTime(StringConcatenate(Day(),".",Month(),".",Year(),",TimeEnd, ":00")); // Parámetros finales//



Total=0; // Si no hay pedidos

for(int i=1; i<=TotalPedidos(); i++) // Bucle de pedidos

{

if (OrderSelect(i-1,SELECT_BY_POS)==false) // Si no hay órdenes de mercado

{

si //Si: - eliminar
{

int BarStart = iBarShift(NULL,PERIOD_M1,Time_Start,false); // busca la barra al principio del periodo de comprobación en m1

int BarEnd = iBarShift(NULL,PERIOD_M1,Time_End,false); //busca el final de barra del periodo de comprobación en m1

double Max_Price=iHigh(NULL,0,iHighest(NULL,PERIOD_M1,MODE_HIGH,BarStart-BarEnd,BarEnd)); //el valor más alto del precio dentro del periodo

double Min_Price=iLow (NULL,0,iLowest (NULL,PERIOD_M1,MODE_LOW,BarStart-BarEnd,BarEnd)); //el valor más bajo del precio dentro del periodo

}

if (TimeCurrent()>Time_End && ObjectFind("bar0"+Time_End)==-1) // Ajustes de visualización de gráficos

{

ObjectCreate("bar0"+Time_End, OBJ_RECTANGLE, 0, 0,0, 0,0);

ObjectSet("bar0"+Time_End, OBJPROP_STYLE, STYLE_SOLID);

ObjectSet ("bar0"+Time_End, OBJPROP_COLOR, Blue);

ObjectSet ("bar0"+Time_End, OBJPROP_BACK, true);

ObjectSet ("bar0"+Time_End, OBJPROP_TIME1,Time_Start);

ObjectSet ("bar0"+Time_End, OBJPROP_PRICE1,Max_Price);

ObjectSet ("bar0"+Time_End, OBJPROP_TIME2,Time_End);

ObjectSet ("bar0"+Time_End, OBJPROP_PRICE2,Min_Price);

}

if (Bid<Max_Price) OrderSend(Symbol(),OP_BUYSTOP,LOT,Ask,3,Min_Price, //condiciones para colocar una orden pendiente de COMPRA - las órdenes pendientes no pueden ser colocadas por Ask o Bid

NormalizeDouble(Ask + Max_Price - Min_Price,Digits), "UPDD",Magic,Blue);

si (Oferta>Precio_máximo)

Comentario("La orden pendiente no puede ser colocada en la oferta");

if (Bid>Min_Price) OrderSend(Symbol(),OP_SELLSTOP,LOT,Bid,3,Min_Price, //condiciones para colocar la orden pendiente de VENTA - igual

NormalizarDoble(Pedido + Precio_máximo-Precio_mínimo,Dígitos), "UPDD",Magia,Azul);

if (Bid<Max_Price) - aquí debe haber un error

Comentario("La orden pendiente no puede ser colocada en VENTA");

}

} - añadir

volver;

}

No puedo compilarlo. En realidad, debería colocar dos órdenes pendientes arriba y abajo del rango.

Después de las correcciones, debería compilar, pero probablemente no funcionará - tiempos mal ajustados, precios no normalizados, no se comprueba la proximidad de los stops a los precios de apertura.