Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 400

 
khorosh:


Gracias, Yuri.
Voy a tratar de utilizar su código, pero más tarde, ya que necesita ser desmontado y entender el principio de trabajo.
Por encima de paso descrito no es difícil, entonces voy a tener que desmontar cada función personalizada del Sr. "N", y esto tiene el más alto grado de complejidad, respectivamente, tomará mucho tiempo, de 3 a 10 horas (como se dice: - Un día. -).

Voy a finalizar mi código, es "mi hábitat" y no hay nada que estudiar en él.

Gracias de nuevo, Yuri.




borilunad:
1 - ¡No puede hacer nada! 2 - ¡Sólo quiere que le escriban! 3 - ¡Es inútil explicarlo! 4 - ¡Sin ninguna lógica! 5 - ¡Un perdedor incorregible!

1 - Relativamente, sí.
2 - Me ayudó a entender la situación.
3 - No es inútil en absoluto.
4 - Debido al hecho de que usted responde - sí.
5 - Terminó el semestre con cinco B's, todas las demás notas - A's.

Has roto las reglas del foro, al igual que yo.
Ahora su cuenta es digna de una advertencia, mi cuenta es digna de una prohibición.

Por favor, disculpe las acciones irracionales (respondiendo a las críticas).
 
Link_x:

Gracias, Yuri.
Intentaré usar tu código, pero más adelante, ya que necesito desmontarlo y entender el principio de funcionamiento.
Por encima de paso descrito no es difícil, entonces voy a tener que desmontar cada función personalizada del Sr. "N", y esto tiene el más alto grado de complejidad, respectivamente, tomará mucho tiempo, de 3 a 10 horas (como se dice: - Un día. -).

Voy a finalizar mi código, es "mi hábitat" y no hay nada que estudiar en él.

Gracias de nuevo, Yuri.






Para empezar, no es necesario entrar en el código de cada función. Basta con comprender los parámetros utilizados en la función, su finalidad y su uso. En realidad, no he entrado en las entrañas de cada función. Sólo me adentré en él cuando tuve que cambiarlo de alguna manera. Es decir, utilizas con éxito los teléfonos móviles, los ordenadores y los televisores, sin conocer sus esquemas exactos y su funcionamiento, pero eso no te impide utilizarlos para tus propios fines. En este caso, lo principal es saber cómo utilizar estas funciones. Aquí se describen todas las funciones y su funcionamiento. Aprenderá a utilizarlas gracias a las pruebas que se ofrecen para cada función. Te convertirás en un programador más rápido si sigues este camino. Pero reinventar tu propia bicicleta es un camino largo e improductivo. Construir un experto -según su versión- es como construir una casa sin materiales de construcción. Tienes que inventarlo todo tú. Es mucho más rápido construir una casa cuando hay bloques de construcción (funciones).
 

¡Buenas tardes!

¿Podría decirme, por favor, si la función AccountEquity() hace una petición al terminal o al broker?

La pregunta viene motivada por la suposición de que llamar a esta función en cada tick puede irritar al broker (especialmente cuando se ejecuta el EA en varios gráficos al mismo tiempo) y, en consecuencia, bloquear la cuenta?

 
yan720:

¡Buenas tardes!

¿Puedes decirme si la función AccountEquity() hace una petición al terminal o al broker?

La pregunta está causada por la suposición de que llamar a esta función en cada tick puede irritar al broker (especialmente cuando se ejecuta el EA en varios gráficos simultáneamente) y en consecuencia bloquear la cuenta?


Sí al corredor, por supuesto)))

El terminal no se preocupa.... Le dará los últimos datos conocidos...

 
vadynik:
La cuestión es si debemos pasar a Magic a la funcióno no.

Esto se puede entender si se sabe para qué sirve el asistente. Es necesario para que el EA pueda distinguir sus propias órdenes de las órdenes de otro EA o de las órdenes abiertas manualmente. Si tiene varias órdenes de compra-parada y entre ellas hay varios magos u órdenes manuales (sin mago), el mago es necesario para la función. En general, sería mejor establecer un magik como parámetro de una función para universalizar sus funciones. Por ejemplo, debería ser -1 por defecto.

double BuystopPrice(int Magic = -1)
{
double Price=0;
  for (int i=OrdersTotal()-1; i>=0; i--) 
     {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
          if(OrderMagicNumber()==Magic && OrderType()==OP_BUYSTOP)
          {
           Price = OrderOpenPrice();
          break;
          }
        }
     }
    return(Price);
}

En realidad, como el código de su función determina el precio de ajuste de la primera orden en el bucle para una parada de compra, el bucle en sí no es necesario en principio.

 
khorosh:
Para empezar, no es necesario entrar en el código de cada función. Basta con entender los parámetros que se utilizan en la función, su finalidad y su uso. En realidad, no he entrado en las entrañas de cada función. Sólo me he adentrado en él cuando he tenido que cambiarlo de alguna manera. Creo que usted utiliza con éxito los teléfonos móviles, los ordenadores y los televisores, sin conocer sus esquemas exactos y su funcionamiento, pero eso no le impide utilizarlos para sus propios fines. En este caso, lo principal es saber cómo utilizar estas funciones. Aquí se describen todas las funciones y su funcionamiento. Aprenderá a utilizarlas gracias a las pruebas que se ofrecen para cada función. Te convertirás en un programador más rápido si sigues este camino. Pero reinventar tu propia bicicleta es un camino largo e improductivo. Construir un experto -según su versión- es como construir una casa sin materiales de construcción. Tienes que inventarlo todo tú. Es mucho más rápido construir una casa cuando hay bloques de construcción (funciones).


Eres un hombre sabio, capaz de explicarte y cambiar de opinión si es necesario. :)
Dicho esto, le doy las gracias de nuevo.

En ese caso, dejo la construcción de una casa a partir de organoides de células eucariotas y utilizo materiales de construcción ordinarios para su construcción.
 

Por favor, compruebe si hay errores en dos funciones.

La esencia de la primera: debe calcular un lote necesario para salir de la reducción después de cerrar una red de órdenes (abierto en el margen), si el precio pasa un cierto número de puntos (TP-puntos) en la dirección correcta.

La esencia del segundo: debe cerrar la mitad de las órdenes de la parrilla, empezando por la más antigua.

double FindRightLot (int otype) // функция поиска лота, необходимого для выхода из просадки после 
                               //закрытия сетки ордеров
{
  double Lot=0; double TotalLot=0;
  for (int i = OrdersTotal()-1; i>0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
       {
         if (otype == OP_BUY)
         {
           Lot = NormalizeDouble ((OrderOpenPrice()-Bid)*OrderLots()/TP,2); 
           if (Lot>0)
           {
              TotalLot= NormalizeDouble (TotalLot+Lot,2);
           }
         }
           
       
         else if (otype == OP_SELL)
         {
           Lot = NormalizeDouble ((Ask-OrderOpenPrice())*OrderLots()/TP,2);
           if (Lot>0)
           {
            TotalLot= NormalizeDouble (TotalLot+Lot,2);
           }
           
         }
       }
     }
   }
   return (TotalLot);
   
 }
//+------------------------------------------------------------------+

void CloseHalfOrders (int otype)// ф-ция закрытия половины ордеров сетки
{
  int count = 0;
  for (int i = 0; i<= OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
       {
         if (otype == OP_BUY)
         { 
           if (count<CountTrades(OP_BUY)/2 && CountTrades(OP_BUY)>3 )
           
             OrderClose(OrderTicket(),OrderLots(),Bid,0,Black);
             count++;
           
         }
       
       
         else if (otype == OP_SELL)
         {
           if (count<CountTrades(OP_SELL)/2 && CountTrades(OP_SELL)>3)
           
           OrderClose(OrderTicket(),OrderLots(),Ask,0,Black);
           count++;
           
         }
       }
     }
   }
   
 }
 
Chicos, no se puede hacer eso... Se puede pasar directamente a MQL5, pero se abre toda la POSICIÓN allí....
 
yan720:


¿Puede decirme si AccountEquity() consulta el terminal o el corredor?

a la terminal
 
vadynik:


Puede que no esté preguntando exactamente, me refiero a si la función verá un magik que se establece en una variable global

o debe pasarse a una función, aunque sospecho que no debería ya que es global

Si está en una variable global, sí, lo hará. Pero la función debe tener versatilidad y trabajar con más de un asistente, y para ello es mejor pasarlo como parámetro de la función.
Razón de la queja: