Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 173

 
Artyom Trishkin:

Nadie te ha llamado "mamón", eso no es cierto. Pero también 4-6 líneas de código, ya sabes, causan desconcierto - porque si una persona aprende algo, ya debe estar intentando algo, ya ha intentado escribir algo, y claramente ve que en 4-6 líneas no encaja.

Muéstranos lo que intentaste hacer, tratemos de entenderlo.

Puedo ofrecer una variante alternativa y simplificada - no buscar un cruce de nivel de precios por ticks, sino buscarlo por MA(1) - entonces la MA de la barra 1 y la MA de la barra 0 se utilizarán como indicador del cruce de nivel necesario.


Disculpe la larga demora en responder. Me alegro de que haya resultado ser un mero desconcierto, me he puesto nervioso. Y en cuanto a mi pregunta, conseguí escribir un código que abriera una orden normal al llegar al precio y que no se volviera a abrir después de cruzar ese precio. Pero lo hice así:
doble b = 5;
int inicio()
{
doble oferta = Oferta;
si (bid==0,7777 && b==5)
{
b=b+1;
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 0,0,0);
}

volver;

Ya he entendido que es un método "de parvulario" y que no se puede utilizar porque hay demasiados matices y no es nada práctico. ¿Puedes decir en qué situación este código no funcionará o cómo se puede cambiar para que funcione? P.s. "Búscalo en la MA(1) - entonces la MA de la barra 1 y la MA de la barra 0 te servirán de indicador para cruzar el nivel que quieras. "No sé realmente de qué se trata, así que puedo dejarlo de lado por ahora hasta que haya estudiado más material


 
maxon777:

Siento haber tardado tanto en contestar. Me alegro de que haya resultado ser sólo un desconcierto, me puse nervioso. Y en cuanto a mi pregunta, conseguí escribir un código que abriera una orden normal al llegar al precio y que no se volviera a abrir después de cruzar este precio. Pero lo hice así:
doble b = 5;
int inicio()
{
doble oferta = Oferta;
si (bid==0,7777 && b==5)
{
b=b+1;
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 0,0,0);
}

volver;

Ya he entendido que es un método "de parvulario" y que no se puede utilizar porque hay demasiados matices y no es nada práctico. ¿Puedes decir en qué situación este código no funcionará o cómo se puede cambiar para que funcione? P.s. "búsquelo en la MA(1) - entonces la MA de la barra 1 y la MA de la barra 0 le servirán como indicador de cruce del nivel que necesita. "No sé realmente de qué se trata, así que esto puede posponerse por ahora hasta que aprenda más material



Comparación sobre la igualdad de dos números, tipo double, esta no es una buena operación.

Como,NormalizeDouble(A - B , 5)==0, supongo.

 

Buenas noches a todos.

Por favor, ayuda, no puedo encontrar un error en el código.

Necesito determinar si tuve una ganancia en mi par y si lo hice, no debo continuar operando y cerrar el EA.

poner una orden pendiente.

El problema es que cuando ejecuto el EA, inmediatamente lo borra, es decir, se disparaExpertRemove(), aunque todavía no he tenido ganancias.

A continuación se muestra algo de código:

void OnTick()

{

si (TakeProfit ()>0)

{

ExpertRemove();

}

si (TakeProfit ()<=0)

{

Aquí ponemos una pausa

}

}

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

¡¡¡¡¡¡¡¡////////Buscando ver si hubo alguna operación cerrada aquí con ganancia!!!!!!!!

int Toma de beneficios ()

{

int cuenta = 0;

for(int i=Total de Pedidos()-1; i>=0; i--)

{

if (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY) == true && OrderMagicNumber() == Magic && OrderSymbol () == Symbol () && OrderProfit()>0.0)

{

cuenta ++;

}

}

devolver (contar);




 
yaaarik777:

Buenas noches a todos.

Por favor, ayuda, no puedo encontrar un error en el código.

Necesito determinar si tuve una ganancia en mi par y si lo hice, no debo continuar operando y cerrar el EA.

poner una orden pendiente.

El problema es que cuando ejecuto el EA, inmediatamente lo borra, es decir, se dispara ExpertRemove(), aunque todavía no he tenido ganancias.

A continuación se muestra una parte del código:

////////Buscando si había ... ¡¡¡¡¡¡¡¡cerrado con beneficio!!!!!!!!

int Toma de beneficios ()

{

int cuenta = 0;

for(int i=Total de Pedidos()-1; i>=0; i--)

{

if (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY) == true && OrderMagicNumber() == Magic && OrderSymbol () == Symbol () && OrderProfit()>0.0)

{

cuenta ++;

}

}

devolver (contar);

¿Qué busca con este código?

Se mira el beneficio de todo el historial, no exactamente de una posición cerrada, y si todo el historial es positivo, entonces se obtiene OrderProfit()>0 en cualquier caso

 
Vitaly Muzichenko:

¿Qué busca con este código?

Busca un beneficio en todo el historial, no específicamente en una posición cerrada, y si todo el historial es positivo, entonces obtendrá OrderProfit()>0 en la salida en cualquier escenario


¿Cómo puedo hacer que se busque no por todo el historial, sino por posiciones cerradas desde el momento del trabajo del asesor?

No lo entiendo.

No lo entiendo.

 
yaaarik777:


¿Cómo puedo hacer que no busque en todo el EA, sino en los cerrados desde el momento en que funciona el EA?

No lo entiendo.

Gracias por la ayuda.

Encuentre la última posición cerrada, que se cerró más tarde de la hora de inicio del EA, o la última cerrada en este día, y vea su beneficio: OrderProfit()+OrderComission()+OrderSwap()
 
yaaarik777:


¿Cómo hago para que no busque en todo el EA, sino en los cerrados desde el momento del trabajo del EA?

No lo entiendo.

Gracias por su ayuda.


¿Cómo se determina cuándo funciona el EA?

Esta es mi sugerencia;

double TakeProfit ()
{
 datetime момент работы советника=0;
 double p=0;
  for(int i=OrdersHistoryTotal()-1; i>=0; i--){
    if (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)){
       if (OrderMagicNumber() == Magic){
          if(OrderSymbol () == Symbol ()){
            if(момент работы советника<OrderCloseTime()){
               p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
 return(p);
}
   
 
Artyom Trishkin:
Encuentre la última posición cerrada, que se cerró más tarde de la hora de inicio del EA, o la última cerrada en este día, y mire su beneficio: OrderProfit()+OrderComission()+OrderSwap()


¿Por qué necesito que se busquen todas las posiciones cerradas posteriores a la hora de inicio del EA?

Quiero que busque desde el inicio del EA, no antes.

 
yaaarik777:


¿Por qué más tarde de la hora de inicio del EA? Ya lo tengo buscando todas las posiciones cerradas.

necesitas que busque desde el principio del EA, no antes.


Si lo piensas bien, "desde el principio y más allá" es posterior a la hora de inicio del EA ;)

No tengas pereza de usar el órgano interaural.

 

Hola.

Por favor, ayúdenme a mostrar los datos de un archivo como un histograma.

En el archivo "file.txt" una fecha corresponde a un número.

Recibo los datos del archivo y los imprimo,