[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 256

 
hoz:


Ayer tenía prisa, tenía que ir. La pregunta que escribí en ese momento no era la que quería.

En realidad, me refería a los Asesores Expertos que, bajo una determinada condición, envían un montón de órdenes (una parrilla). No he visto en dichos Asesores Expertos que se compruebe ni el spread, ni el stop-loss, ni la posición del precio por encima (por debajo de Asc o Bid), ni nada. Voy a escribirlo yo mismo y a enseñárselo a todo el mundo.


¿Por qué tomar como ejemplo a algunos expertos en gore? Como mínimo son exclusivamente para el probador, como máximo se escriben con las manos torcidas, como ya se ha dicho...
 
alsu:

¿Por qué tomar como ejemplo a algunos expertos en desdichas? Como mínimo son únicamente para el probador, como máximo se escriben con las manos torcidas, como ya se ha dicho...

Entendí cómo implementarlo, pero decidí ver cómo lo hacen los demás.
 

Chicos, ¡tengo un problema realmente horrible! Mi gráfico no se desplaza hacia la izquierda cuando guardo el dibujo. La función "gráfico de desplazamiento" está activada. ¿Cómo lo arreglo?


 

¡Hola!

Quiero que mi Asesor Experto no abra más de una operación al día. ¿Puede decirme cómo hacerlo?

 

Hola, hace tiempo que estoy buscando en mql4, quizás alguno de los programadores experimentados pueda ayudar. Quiero saber cómo hacer que se bloquee cuando la orden llegue a -30 o -40. Tengo que añadir algunas propiedades para que este script bloquee las órdenes en cuanto entren en menos.

¡void start()
{
double StopLoss;
double Lots=0;
for(int i=0;i<OrdersTotal();i++)
{
if(! ¡OrderSelect(i,SELECT_BY_POS))
continue;
if(OrderSymbol()!=Símbolo())
continue;
if(OrderType()==OP_BUY)
Lots+=OrderLots();
if(OrderType()==OP_SELL)
Lots-=OrderLots();
}
if(Lots>0)
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,0,NULL,Red);
if(Lots<0)
OrderSend(Symbol(),OP_BUY,-(Lots),Ask,3,Bid-StopLoss*Point,0,NULL,Blue);

 
protey7:

¡Hola!

Quiero que mi Asesor Experto no abra más de una operación al día. ¿Puede decirme cómo hacerlo?

extern int MagicNumber=555;
//---
if (OrdersTotal()>0) // Есть ли отложенные ордера или открытые позиции
{  for (i=OrdersTotal()-1; i>=0; i--) // Перебираем ордера
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // Oрдер выбирается среди открытых и отложенных ордеров
      {  if (OrderSymbol()!=Symbol()) continue; // Если торговый символ не тот, на котором работает эксперт - игнорируется
         if (OrderMagicNumber()!=MagicNumber) continue; // Если магик номер не тот, что надо - игнорируется
         if (OrderOpenTime()>=iTime(NULL,PERIOD_D1,0)) // Если время открытия ордера больше или равен началу открытия данной свечи,
                                                       // то дальший код эксперта не работает. Вместо PERIOD_D1 можно вставить любой другой период.
            return(0);
}  }  }
 
Wild_Wolf:

Chicos, ¡tengo un problema realmente horrible! Mi gráfico no se desplaza hacia la izquierda cuando guardo el dibujo. La función "gráfico de desplazamiento" está activada. ¿Cómo lo arreglo?

Nota: en el gráfico de la parte superior derecha hay un pequeño triángulo como éste. Al pasar el cursor por encima de él, aparece una información sobre la herramientaque dice "Cambio de gráfico". Engánchalo y muévelo hacia la izquierda todo lo que necesites para hacer espacio a la derecha.
 
hoz:

Entendí cómo implementarlo, pero decidí ver cómo lo hacen los demás.
¿Y si los demás empiezan a saltar por las ventanas?
 
paladin80:


Gracias por el consejo.

Sólo en la variante sugerida el experto no trabaja)))) Aquí está una variante de trabajo que tengo :

if (OrdersTotal()==0) // Si no hay posiciones abiertas

{ for (int i=OrdersHistoryTotal()-1; i>=0; i--) // Buscar pedidos de la lista del historial de cuentas

{ si (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) // la orden se selecciona entre las órdenes cerradas

{

if (OrderCloseTime()>=iTime(NULL,PERIOD_D1,0)) // Si la hora de cierre de la orden es mayor o igual al inicio de la apertura de la vela actual

// El Asesor Experto no funciona. Se puede insertar cualquier otro punto en lugar de PERIOD_D1.

return(-1);

} } }

 
alsu:

¿Por qué tomas como ejemplo a algunos expertos en desdichas? Como mínimo están diseñados exclusivamente para el probador, como máximo se escriben con las manos torcidas, como se decía más arriba...


Lo escribí a mi manera. No he optimizado especialmente el código, sólo lo he escrito para que funcione y mostrar la lógica.

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend(Symbol(), OP_BUYSTOP,0.1,NormalizeDouble(Ask + (step*i) * pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
   
   if (ticket > 0)
       return (true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell(double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend(Symbol(), OP_SELLSTOP,0.1,NormalizeDouble(Bid - (step*i)*pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
   
   if (ticket > 0)
       return (true);
}
//+-------------------------------------------------------------------------------------+
//| Посылаем пачку ордеров на сервер                                                    |
//+-------------------------------------------------------------------------------------+
bool SendPackOfOrders(int lastPosTicket, int lastPosType, double initialOOP)
{
   if (lastPosTicket == -1)                        // Если нет рыночных ордеров, значит..
       return(false);                              //..сетку отложек не кидаем
       
  // if (lastPosType != g_lastPosType)               // Если тикет изменился, значит..
   {
      lastPosType = g_lastPosType;
      
      for (int i=1; i<=5; i++)
      {
         if (!OpenBuy(initialOOP, i))
             return(false);
         if (!OpenSell(initialOOP, i))
             return(false);
      }
   }
}

El paso es la separación de la rejilla de orden.

Mi pregunta es la siguiente. ¿Es correcta mi lógica? ¿Hay alguna forma de mejorar el código para que funcione más rápido? Desde el punto de vista del rendimiento...

También tengo la idea de que tal vez haya que hacer pausas después de cada mensaje. Bueno, en general estos puntos me parecen muy interesantes.

Razón de la queja: