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

 
Alexander Antoshkin:

¿Qué puede...?

¿Calcular cuántos hobbits se necesitan para cambiar una bombilla?

¿Enviarlo a un freelance? ¿Escribir "leerlo allí"?

¿Cómo puedo encontrar la coordenada de cierre de series de órdenes en el historial como en el ejemplo (planeo dibujar una línea en este punto)

Ya he formulado esta pregunta en 151 páginas de este hilo, pero no se ha encontrado ninguna solución plausible .https://www.mql5.com/ru/forum/160683/page151



Debe buscar una serie de órdenes con la misma barra de cierre en el historial. La hora de este bar será la que busques.
 
Alexander Antoshkin:

¿Qué puede...?

¿Calcular cuántos hobbits se necesitan para cambiar una bombilla?

¿Enviarlo a un freelance? ¿Escribir "leerlo allí"?

Podemos hacer muchas cosas:)

El problema de los hobbits no tiene una solución única...

Por si no lo has entendido, mi respuesta es del mismo vídeo que ha citadoVitalie Postolache.

Pero en serio:

Cómo puedo encontrar la coordenada de un acuerdo que cierra una serie de órdenes en el historial como en el ejemplo (pienso dibujar una línea en este punto)

Ya hice esta pregunta en 151 páginas de este hilo, pero no se ha encontrado ninguna solución. https://www.mql5.com/ru/forum/160683/page151

No he leído la rama por el enlace. Pero sería así:

Determine el hecho del cierre de varias órdenes (de uno o diferentes tipos) dentro de X puntos (se necesita un rango de X porque en realidad todas las operaciones pueden no cerrar al mismo precio), determine el precio medio de cierre y trace una línea por él.

 
Artyom Trishkin:
Busca en el historial una serie de órdenes con la misma barra de cierre. La hora de este bar será la que busques.
Este es el mismo problema que mi método de solución: dependiendo del ping y del número de órdenes, todas las operaciones en la misma vela pueden no cerrarse...
 
Alexey Kozitsyn:
Este es el mismo problema que mi método de solución: dependiendo de los pings y del número de órdenes, todas las operaciones en la misma vela pueden no cerrarse...
Para la M1 estoy de acuerdo. Para otros es poco probable. A menos que una orden de cierre llegue antes de la apertura de la vela. Habrá dos grupos de pedidos. Toma el último de dos adyacentes.
 
Artyom Trishkin:
Para la M1 estoy de acuerdo. Para otros es poco probable. Si sólo antes de la apertura de una vela se ha recibido una orden de cierre. Habrá dos grupos de pedidos. Toma el último de dos adyacentes.

Aquí se dieron pocos datos para decidir: varios paquetes pueden cerrarse en la misma vela (si se comprueba, por ejemplo, en velas horarias o diarias).

 
Vitalie Postolache:


Quiero líneas rojas paralelas, pero que se crucen y que tres de ellas sean verdes y el resto moradas )))

Ah, sí, ¡y esa línea recta en forma de gatito!

¿Le parece que el problema está mal?

 
Alexey Kozitsyn:

No hay suficientes datos para decidir: varios paquetes pueden estar cerrados en la misma vela (si se comprueba, por ejemplo, en velas horarias o diarias).

En cualquier caso, cuanto más preciso sea, mejor...

las órdenes se cierran de acuerdo con la condición de trailing stop sin pérdidas

es decir

if(b+s>0)
{
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
punta = OrderType();
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OTP = NormalizeDouble(OrderTakeProfit(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
SL=OSL;
if(tip==OP_BUY)
{
SL=NormalizeDouble(Bid-TrailingStop*Point,Digits);
if(SL>OSL && SL>NLb)
{
¡si(!OrderModify(OrderTicket(),OOP,SL,0,0,White)) Print("Error de orden modificar ",GetLastError());
}
}
if(tip==OP_SELL )
{
SL=NormalizeDouble(Ask+TrailingStop*Point,Digits);
if((SL<OSL || OSL==0) && SL<NLs)
¡{
if(!OrderModify(OrderTicket(),OOP,SL,0,0,White)) Print("Error Order Modify ",GetLastError());
}

 
Alexey Kozitsyn:
Escriba su propio indicador MA, que incluiría un búfer adicional en el que se introducen los valores cuando se forma una nueva barra.

Me gustaría discutir un algoritmo para resolver la cuestión, incluso para diferentes métodos de promediación demedias móviles.

 
Alexey Kozitsyn:

Podemos hacer muchas cosas:)

Determine el hecho de cerrar varias órdenes (del mismo o diferente tipo) dentro de X puntos (se necesita un rango de X puntos porque en realidad todas las operaciones pueden no cerrar al mismo precio), determine el precio medio de cierre y trace una línea por él.

int TotalPos=-1;

void start()
{
  if(OrdersTotal()!=TotalPos) { // не мучаем каждый тик
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      History();
     }
  }}} TotalPos=OrdersTotal(); // запомним количество
//--
} 
 
 void History() {
  string Ticket=(string)OrderTicket();
  color col=Red;
  if(OrderType()==0)col=Blue;
  datetime a=OrderOpenTime();
  double b=OrderOpenPrice();
  datetime c=OrderCloseTime();
  double d=OrderClosePrice();
  double prSep=OrderProfit()+OrderCommission()+OrderSwap();
  double prAll=0;
  int    cn=0;
  string hTicket;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      datetime ct=OrderCloseTime();
      // 60 секунд разницы между закрытием первой и последней в сетке
      if(c<=ct+60 && c>=ct-60) {
        prAll+=OrderProfit()+OrderCommission()+OrderSwap();
        hTicket=(string)OrderTicket();
        cn++;
      }
   }}}
   ObjectCreate(Ticket+'Open',OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+'Open',OBJPROP_COLOR,col);
   ObjectSet(Ticket+'Open',OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+'Line',OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+'Line',OBJPROP_COLOR,col);
   ObjectSet(Ticket+'Line',OBJPROP_WIDTH,1);
   ObjectSet(Ticket+'Line',OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+'Line',OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+'Close',OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+'Close',OBJPROP_COLOR,Green);
   ObjectSet(Ticket+'Close',OBJPROP_ARROWCODE,3);
  
   Ticket=cn>1?hTicket:Ticket;
   ObjectCreate(Ticket+'Profit',OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+'Profit',OBJPROP_ANCHOR,0);
   ObjectSetText(Ticket+'Profit',DoubleToString(prAll,2),10,'Arial',White);
   ObjectSet(Ticket+'Profit',OBJPROP_PRICE1,d);
   ObjectSet(Ticket+'Profit',OBJPROP_TIME1,c+Period()*60*2);

esto debería añadirse al script ...

Teniendo en cuenta que si se cierra una serie de órdenes de venta

ObjectCreate(Ticket+'Deuda B',OBJ_HLINE,0,0,d);
ObjectSet(Billete+'Deuda B',OBJPROP_COLOR,Verde lima);
ObjectSet(Ticket+'Deuda B',OBJPROP_WIDTH,1);

si se cierra una serie de órdenes de compra

ObjectCreate(Ticket+'Deuda M',OBJ_HLINE,0,0,d);
ObjectSet(Ticket+'Deuda M',OBJPROP_COLOR,Red);
ObjectSet(Ticket+'Deuda M',OBJPROP_WIDTH,1);

¿Puede ayudar?
 
-Aleks-:

Me gustaría discutir un algoritmo para tratar el tema, incluso para diferentes métodos de promediación demedias móviles.

Echa un vistazo al archivo MovingAverages.mqh en la carpeta Include del terminal.