[¡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 621

 
VladislavVG:

DLL - ver ejemplos. Es posible que un programador que sabe escribir en C/C++ no sea capaz de entender los ejemplos estándar de la entrega de МТ y esto a pesar de que hay mucho material en el foro?

No soy programador, pero a veces escribo yo mismo las cosas más sencillas. No necesito escribir un robot complejo en ningún lenguaje y no es un problema en absoluto. Quiero escribir un robot con su propia interfaz y no ejecutar parte de las funciones como una dll y llamarlas desde μl. Gracias a Dios hay muchos lenguajes visuales diferentes en los que esto se puede hacer sin mucho esfuerzo
 
lottamer:


Sí, ahora entiendo por qué hay una comparación para el tiempo en el bucle, y el tiempo en general....

También entiendo la LÓGICA - marcar la "A", luego excluir la "A", pero en primer lugar, todas las opciones DONDE esta "A" puede ser fijada las he probado - y aún así el asesor me devuelve la última entrada, no la penúltima.

.

He introducido 2 bucles (2 funciones) - el primero su original, el segundo con excepción de "A"... se ejecutan uno tras otro.

Imprime cero....


Esta función utiliza variables locales, por lo que no debe ejecutarse sí o sí como una función separada, hacer dos bucles uno tras otro en una función, o declarar A como una variable global. Iré a por cigarrillos y tú lo intentas, y si no funciona, llámame cuando vuelva y lo resolveremos.
 
Desead:

No soy programador, pero a veces escribo yo mismo las cosas más sencillas. Quiero escribir un robot sencillo en cualquier lenguaje y no hay ningún problema. Quería escribir todo un robot con su propia interfaz sin llamar a Metatrader, no parte de sus funciones en una dll y llamarlas desde μl. He inventado un montón de lenguajes visuales diferentes, en los que esto se puede hacer sin mucho esfuerzo.

Si no quieres utilizar las características del terminal en absoluto (más de un centenar de diferentes funciones incorporadas, indicadores incorporados, la propia interfaz del programa), entonces no se trata de un simple Asesor Experto, sino de tu propio terminal, tu propio desarrollo, y creo que difícilmente pueden ayudarte con eso, especialmente en esta rama.
 
rigonich:

Esta función utiliza variables locales, por lo que no la ejecutes dos veces como una función separada, ni hagas dos bucles uno tras otro en una función, ni declares A como una variable global. Saldré a buscar cigarrillos, y tú lo intentas mientras, si fallas, llámame cuando vuelva, y lo resolveremos.


IS!!!! hubo un pequeño error... no fue Ticket sino LastClosetPoz() y Sec_LastClosetPoz() lo que debería haberse impreso.

Seguro que mi versión no es la más elegante... pero funciona... ¿Cómo poner dos bucles en una función... No sé... lo intenté... tengo errores... ¡al diablo! (si no es mucha molestia - muéstrame - me será útil, si no - bueno, no importa...) Gracias de todos modos.

Sin embargo, tengo la sensación de que si tengo que averiguar el ticket de la 35ª transacción cerrada... voy a tener problemas con mi planteamiento :)))) hahahah

bondad que aún no está en el horizonte... 3 como mucho...

 
rigonich:

Esta función utiliza variables locales, por lo que no la ejecutes dos veces como una función separada, ni hagas dos bucles uno tras otro en una función, ni declares A como una variable global. Iré a por unos cigarrillos y podrás probarlo, y si no funciona, llámame cuando vuelva y lo resolveremos.


funcionó hasta que inserté lo siguiente

if (OrderSelect( (LastClosetPoz (),SELECT_BY_TICKET)==true)) Print("Stop loss", OrderStopLoss();

jura

')' - recuento de parámetros erróneos G:\Program_Files_2\MT4-demo\\perts\000.mq4 (57, 60)

No entiendo qué es lo que quiere.

--------------------------------------------------------------------------------------------

LO HE DESCUBIERTO

==true....

lo cual es extraño, porque los ejemplos en el tutorial siempre lo dicen...

y también redondeó el valor de la parada... al cuarto dígito...

 
lottamer:


IS!!!! hubo un pequeño error... la impresión debería haber sido LastClosetPoz() y Sec_LastClosetPoz() en lugar de Ticket.

Estoy seguro de que mi versión no es la más elegante... Pero funciona... Cómo insertar dos bucles en una función... No sé... lo intenté... tengo errores... ¡al diablo! (si no es mucha molestia - muéstrame - me será útil, si no - bueno, no importa...) Gracias de todos modos.

Sin embargo, tengo la sensación de que si tengo que averiguar el ticket de la 35ª transacción cerrada... voy a tener problemas con mi planteamiento :)))) hahahah

bondad que aún no está en el horizonte... 3 como mucho...



int Billete1,Billete2;
//+------------------------------------------------------------------+
int fLastClosetPoz()
{
int Tot=Total de pedidos(),A,i;Ticket1=-1;Ticket2=-1;datetime time=0;
si(Tot>0)
{
for(i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
if(OrderSymbol()==Symbol())
{
if(OrderCloseTime()>time)
{
time=Hora de cierre del pedido();Ticket1=Ticket del pedido();
}
}
}
Si no, continúe;
}
}
Tot=Historia de pedidosTotal();A=Ticket1;time=0;
si(Tot>0)
{
for(i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
if(OrderTicket()==A)continue;
if(OrderSymbol()==Symbol())
{
if(OrderCloseTime()>time)
{
time=Hora de cierre del pedido();Ticket2=Ticket del pedido();
}
}
}
Si no, continúe;
}
}
return(0);
}
//+------------------------------------------------------------------+
P.D. Yes necesario utilizar un bucle anidado (es decir, un bucle dentro de otro) para determinarla 35ª operación cerrada.
 
rigonich:


int Billete1,Billete2;
//+------------------------------------------------------------------+
int fLastClosetPoz()
{
int Tot=Total de pedidos(),A,i;Ticket1=-1;Ticket2=-1;datetime time=0;
si(Tot>0)
{
for(i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
if(OrderSymbol()==Symbol())
{
if(OrderCloseTime()>time)
{
time=Hora de cierre del pedido();Ticket1=Ticket del pedido();
}
}
}
Si no, continúe;
}
}
Tot=Historia de pedidosTotal();A=Ticket1;time=0;
si(Tot>0)
{
for(i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
if(OrderTicket()==A)continue;
if(OrderSymbol()==Symbol())
{
if(OrderCloseTime()>time)
{
time=Hora de cierre del pedido();Ticket2=Ticket del pedido();
}
}
}
Si no, continúe;
}
}
return(0);
}
//+------------------------------------------------------------------+


imprime ceros...no funciona...no voy a indagar más, porque es obvio que los bucles son simplemente sustituidos uno por otro - el volumen claramente no se reduce..... y ya tenemos una versión que funciona. Puedo comparar los pedidos en la primera variante... y aquí ni siquiera puedo ver dónde está el segundo... y el primero es cero...

después de algunos retoques menores... que claramente desarrollan el cerebro, ¡este código también funcionó! :))) gracias

 
lottamer:


funcionó hasta que inserté lo siguiente

if ( Print("Stop loss", OrderStopLoss());) Print("Stop loss", OrderStopLoss();

jura

')' - recuento de parámetros erróneos G:\Program_Files_2\MT4-demo\\perts\000.mq4 (57, 60)

No entiendo qué es lo que quiere.


De nuevo 45, en esta formaOrderSelect(LastClosetPoz () ,SELECT_BY_TICKET ) selecciona entre las órdenes pendientes y abiertas por defecto y esta orden no está ahí. PonerOrderSelect(LastClosetPoz (),SELECT_BY_TICKET, MODE_HISTORY).
 
lottamer:


imprime ceros... no funciona... no hace falta escarbar, porque es obvio que los ciclos se sustituyen uno por otro - el volumen claramente no ha disminuido..... y ya tenemos una variante que funciona. Además, en la primera variante - puedo comparar órdenes ... y aquí ni siquiera puedo ver dónde está el segundo ... y el primero es cero ...

después de algunos retoques menores... que claramente desarrollan el cerebro, ¡este código también funcionó! :))) gracias


Sólo hay que imprimir las variables Ticket1 y Ticket2 después de la llamada a la función.
 

rigonich

¿Puede decirme en qué archivo se escriben las variables glob. Para que se pueda transferir rápidamente a otro terminal.