OrdersTotal devuelve 0
#include <Trade\Trade.mqh>
CTrade trade;
int gi_flag=1;
void OnTick()
{
if(gi_flag==1)
{
trade.PositionOpen(_Symbol,ORDER_TYPE_SELL,1, SymbolInfoDouble(_Symbol,ORDER_TYPE_SELL==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK),0,0);
gi_flag=0;
}
PrintFormat(DoubleToString(OrdersTotal(),1));
}
Aunque entiendo que debería devolver 1, ¿o estoy leyendo mal?
Las órdenes no son posiciones. Una orden es una orden no ejecutada para abrir una posición, mientras que una posición es el resultado de la ejecución de una orden.
Gracias, ya veo, entonces usaremos la función PositionsTotal.
¿Y el primer problema?
Escribí este código y algo no está claro donde puede estar el error
string Data() { string vr; string den; datetime date=TimeCurrent(); MqlDateTime str; TimeToStruct(date,str); switch(str.day_of_week) { case 0: den = "Воскресенье"; case 1: den = "Понедельник"; case 2: den = "Вторник"; case 3: den = "Среда"; case 4: den = "Четверг"; case 5: den = "Пятница"; case 6: den = "Суббота"; } printf("%02d.%02d.%4d %02d:%02d:%02d %d",str.day,str.mon,str.year,str.hour,str.min,str.sec,str.day_of_week); printf("%02d.%02d.%4d %02d:%02d:%02d %s",str.day,str.mon,str.year,str.hour,str.min,str.sec,den); return(StringFormat("%02d.%02d.%4d %02d:%02d:%02d %s",str.day,str.mon,str.year,str.hour,str.min,str.sec,den)); }
El registro imprime los siguientes resultados
MF 0 11:06:34 04.06.2010 09:06:43 5RN 0 11:06:34 04.06.2010 09:06:43 Sábado
que yo sepa el 5º día es el viernes.
Escribí este código y algo no está claro donde puede estar el error
El registro imprime los siguientes resultados
MF 0 11:06:34 04.06.2010 09:06:43 5RN 0 11:06:34 04.06.2010 09:06:43 Sábado
que yo sepa el 5º día es el viernes.
Para cualquier valor de day_of_week obtendrá el valor "sábado". Porque no hay operadores de ruptura entre los casos
2 puntos más oscuros
void OnTick()
{
for(int li=1; li<2; li++)
{
PrintFormat(SymbolName(li,true));
}
}
Devuelve un espacio en blanco o un espacio, pero no un nombre de carácter
void OnTick()
{
PrintFormat(DoubleToString(SymbolsTotal(true),1));
}
Devuelve 1 aunque tenga al menos 10 abiertos
Pero si pones false en lugar de true, todo parece funcionar bien
Devuelve un espacio en blanco o un espacio, pero no el nombre del personaje
for(int li=0; li<SymbolsTotal(false); li++) { PrintFormat(SymbolName(li,false)); }Esto es probablemente correcto si quieres pasar por todo lo que hay en el CC. Si sólo lo que hay en la tabla de terminales, entonces cambia false por true.
Eso es lo que estoy diciendo, ¡no funciona con la verdad!
Funciona, lo he comprobado en tres sociedades de bolsa (he buscado todos los símbolos que se negocian en las sociedades de bolsa).
for(int li=0; li<SymbolsTotal(false); li++) { PrintFormat(SymbolName(li,false)); }
Y este código recorrerá todo lo que esté seleccionado en la ventana "Market Watch"
for(int li=0; li<SymbolsTotal(true); li++) { PrintFormat(SymbolName(li,true)); }
Lo que no entiendo es esto. Por qué hacer esa búsqueda en OnTick().
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Ejecutando el probador en EURUSD, todo funciona, ambas órdenes son enviadas. Si descomentamos la línea, la orden GBPUSD no se abre y hay un error en el registro:
2010.06.02 10:34:26 Core 1 falló la venta instantánea de 1,00 GBPUSD a 0,00000 [Paradas no válidas]
2010.06.02 10:34:26 Core 1 No hay precios para el símbolo GBPUSD
He probado con SymbolInfoTick, y lo mismo.
¿Conoces el SymbolInfoTick o el SymbolInfoDouble?