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

 

Chicos, necesito que las órdenes pendientes actualicen su valor cada minuto, la modificación de algo estaba torcida, decidí borrar y poner cada minuto en ambas direcciones, en el tester funciona bien, pero en la vida real, de alguna manera no cumple. Corregir o ayudar en vez de borrar, modificar para hacer.


      if(TimeCurrent()>TimeCheck_sn && TimeCurrent()<TimeCheck_en && Ogranichitel > 0)
        {

         if(IsNewCandle())
           {

            if(OrderOfSymbol>0 && OrderType() ==  OP_BUYSTOP)
               ticket2 =  OrderDelete(OrderTicket(),Violet);

            if(OrderOfSymbol>0 && OrderType() ==  OP_SELLSTOP)
               ticket2 =  OrderDelete(OrderTicket(),Violet);


            if(Close[1]>Open[1] && CountOrders()==0)
               if(NewsSellAllow == true)
                  ticket2 = OrderSend(Symbol(),OP_SELLSTOP, LotSk, Bid-(Skachok*Point), Slippage, 0, Bid-((Skachok+TPsk)*Point), "открыт ордер на продажу", Magic, 0, Red);
                  Print("OpenOrderSuccess");
                  
            if(Close[1]>Open[1] && CountOrders()==0)
               if(NewsBuyAllow == true)
                  ticket2 = OrderSend(Symbol(),OP_BUYSTOP, LotSk, Ask+(Skachok*Point), Slippage, 0, Ask+((Skachok+TPsk)*Point), "открыт ордер на покупку", Magic, 0, Blue);
                  Print("OpenOrderSuccess");


            if(OrderType() ==  OP_BUYSTOP && OrderOfSymbol>0)
               ticket2 = OrderModify(OrderTicket(), (Ask+(Skachok*Point)), 0, (Ask+((Skachok+TPsk)*Point)), 0);

            if(OrderType() ==  OP_SELLSTOP && OrderOfSymbol>0)
               ticket2 = OrderModify(OrderTicket()+1, (Bid-(Skachok*Point)), 0, (Bid-((Skachok+TPsk)*Point)), 0);
           }
        }


      if(TimeCurrent() == TimeCheck_en)
        {


         if(IsNewCandle())
           {
            if(OrderOfSymbol>0 && OrderType() ==  OP_BUYSTOP)
               ticket2 =  OrderDelete(OrderTicket(),Violet);

            if(OrderOfSymbol>0 && OrderType() ==  OP_SELLSTOP)
               ticket2 =  OrderDelete(OrderTicket(),Violet);
           }


        }
 
Порт-моне тв las órdenes pendientes actualicen su valor cada minuto, la modificación de algo estaba torcida, decidí borrar y poner cada minuto en ambas direcciones, en el tester funciona bien, pero en la vida real, de alguna manera no cumple. Corregir o ayudar en vez de borrar, modificar para hacer.


Mejor volver a la modificación, explicar lo que se necesita
 
Tretyakov Rostyslav #:
Mejor volver a la modificación, explicar lo que se necesita

La orden debe ser modificada cada vez en una nueva vela en ambas direcciones con una sangría establecida en puntos y en takeprofit (como un clásico), si penetra (una ruptura en las noticias), entonces la orden se abre (la segunda orden puede ser cerrada automáticamente), pero hasta que se abra, entonces modificar de nuevo y otra vez; y todo esto dentro de un marco de tiempo determinado especificado en los parámetros del asesor.

 
Порт-моне тв #:

La orden debe ser modificada cada vez en una nueva vela en ambas direcciones con una sangría especificada en puntos y en takeprofit (como un clásico), si penetra (una ruptura en las noticias), entonces la orden se abre (la segunda orden puede ser cerrada automáticamente), pero hasta que se abra, entonces modificar de nuevo y de nuevo; y todo esto dentro de un marco de tiempo determinado especificado en los parámetros de la EA.

¿Y cómo se hacen los primeros pedidos?
 
Tretyakov Rostyslav #:
¿Cómo se hacen los primeros pedidos?
if(Close[1]>Open[1] && CountOrders()==0)
               if(NewsSellAllow == true)
                  ticket2 = OrderSend(Symbol(),OP_SELLSTOP, LotSk, Bid-(Skachok*Point), Slippage, 0, Bid-((Skachok+TPsk)*Point), "открыт ордер на продажу", Magic, 0, Red);
                  Print("OpenOrderSuccess");
                  
            if(Close[1]>Open[1] && CountOrders()==0)
               if(NewsBuyAllow == true)
                  ticket2 = OrderSend(Symbol(),OP_BUYSTOP, LotSk, Ask+(Skachok*Point), Slippage, 0, Ask+((Skachok+TPsk)*Point), "открыт ордер на покупку", Magic, 0, Blue);
                  Print("OpenOrderSuccess");
 
Порт-моне тв #:
Déjame ver.
 
Порт-моне тв #:
Tiene la misma condición para ambos tipos de pedidos
if(Close[1]>Open[1] && CountOrders()==0)
 
Tretyakov Rostyslav #:
Tiene la misma condición para ambos tipos de pedidos

¿es así como lo quiero, en ambos sentidos, o tengo que añadir algo?

 
Порт-моне тв #:

¿es así como lo quiero, en ambos sentidos, o tengo que añadir algo?

Aquí... modificación una vez en la apertura del bar

En cuanto a la apertura, si usted opera en las noticias, entonces "Close[1]>Open[1]" no es necesario en absoluto.

en un lado "Cerrar[1]>Abrir[1]", y en el otro lado "Cerrar[1]<Abrir[1]".

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(Close[1]>Open[1] && CountOrders()==0)
     {
      if(NewsSellAllow == true)
        {
         ticket2 = OrderSend(Symbol(),OP_SELLSTOP, LotSk, Bid-(Skachok*Point), Slippage, 0, Bid-((Skachok+TPsk)*Point), "открыт ордер на продажу", Magic, 0, Red);
         Print("OpenOrderSuccess");
        }
     }
   if(Close[1]>Open[1] && CountOrders()==0)
     {
      if(NewsBuyAllow == true)
        {
         ticket2 = OrderSend(Symbol(),OP_BUYSTOP, LotSk, Ask+(Skachok*Point), Slippage, 0, Ask+((Skachok+TPsk)*Point), "открыт ордер на покупку", Magic, 0, Blue);
         Print("OpenOrderSuccess");
        }
     }
   if(newbar!=Time[0])
     {
      ModifyOrder();
      newbar=Time[0];
     }
  }
//+------------------------------------------------------------------+
//| Подсчет открытых ордеров                                         |
//+------------------------------------------------------------------+
int CountOrders(int ot=-1) 
  {
   int cnt=0;
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol&&OrderMagicNumber()==Magic)
           {
            if(OrderType()==ot||ot==-1) cnt++;
           }
        }
     }
   return(cnt);
  }
//+------------------------------------------------------------------+
//| Модификация ордера                                               |
//+------------------------------------------------------------------+
void ModifyOrder()
  {
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol&&OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUYSTOP&&OrderOpenPrice()!=Ask+(Skachok*Point))
              {
               if(OrderModify(OrderTicket(), Ask+(Skachok*Point), 0, Ask+((Skachok+TPsk)*Point)))
                 {Print("Ордер модифицирован");}
               else
                 {Print("Ошибка модификации ордера:", GetLastError());}
              }
            if(OrderType()==OP_SELLSTOP&&OrderOpenPrice()!=Bid-(Skachok*Point))
              {
               if(OrderModify(OrderTicket(), Bid-(Skachok*Point), 0, Bid-((Skachok+TPsk)*Point)))
                 {Print("Ордер модифицирован");}
               else
                 {Print("Ошибка модификации ордера:", GetLastError());}
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
 
Tretyakov Rostyslav #:

Aquí... modificación una vez en la apertura del bar

En cuanto a la apertura, si usted opera en las noticias, entonces "Close[1]>Open[1]" no es necesario en absoluto, y si la vela tiene un valor, entonces

en un lado "Cerrar[1]>Abrir[1]", y en el otro lado "Cerrar[1]<Abrir[1]".

Gracias, lo probaré mañana por la mañana.