Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 523

 
El indicadorEnvelopes en el EA, el EA se escribió solo, en los ajustes puse un desplazamiento (-7). ¿Por qué el EA no abre las órdenes con un desplazamiento negativo en el indicadorEnvelopes?
 
Vagif Babaev:
El indicadorEnvelopes en el EA, el EA se escribió solo, en los ajustes puse shift (-7). ¿Por qué el EA no abre órdenes con shift negativo en el indicadorEnvelopes?
En los iEnvelopes el índice de un valor recibido del buffer de indicadores no debe ser menor que el desplazamiento, es decir, el último valor no debe ser inferior a 7.
 
demonoid123000:
Estimados programadores. ¿Puede ayudar? Me gustaría adjuntar el número de órdenes abiertas a los Asesores Expertos. No sé si servirá de algo. Puse estos búhos en varias parejas y sólo se abre un pedido. Si abro una orden en uno de los pares, las señales del otro par no se ignoran. No sé qué hacer con él.

el problema es esta condición

if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)

Así es como debería funcionar.

//+------------------------------------------------------------------+
//|                                                    Hippo_Buy.mq4 |
//|                                                        ut_Kanada |
//|                                            albertgod1972@mail.ru |
//+------------------------------------------------------------------+
#property copyright "ut_Kanada"
#property link      "albertgod1972@mail.ru"
#property version   "1.00"
#property strict
//===================================================================+
//                          ЗАДАНЫЕ ЗНАЧЕНИЯ                         |
//===================================================================+

extern double Lot= 0.1;
extern bool Stop = true;
extern int SL = 250;
extern int TP = 500;

extern bool BU=false;        // Переменная для включения Безубытка.

extern bool Tral = true;       // Переменная для выключения трала.
extern int putr = 100;         // Включение трала при прохождении цены putr пунктов.
extern int TrailingStop = 150; // Непосредственно сам трал.

                               //*****************************************************************************************************************
//==================================================================+
//                  Переменные для программы                        |
//==================================================================+

int TekBar = -1;             // Текущий бар.
int Or;                      // Номер ордера.
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//==================================================================+

int start()
  {

//==================================================================+
//                           Индикаторы                             |
//==================================================================+

   double TA1=NormalizeDouble(iCustom(NULL,0,"Trendsignal_Alert_Buy",3,300,true,true,0,0,false,1,0,1),Digits);

//==================================================================+
//                     Условия модификации Ордеров.                 |
//==================================================================+
   if(Tral==true)
     {
      int cnt;
      for(cnt=OrdersTotal(); cnt>=0; cnt--)
        {
         Or=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

         if(OrderType()==OP_SELL)
           {
            if(OrderOpenPrice()-Ask>=putr*Point)
               if(OrderStopLoss()>(Ask+Point*(TrailingStop+MarketInfo(Symbol(),MODE_SPREAD))))
                  Or=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,0);
           }

         if(OrderType()==OP_BUY)
           {
            if(Bid-OrderOpenPrice()>=putr*Point)
               if(OrderStopLoss()<(Bid-Point*(TrailingStop+MarketInfo(Symbol(),MODE_SPREAD))))
                  Or=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,0);
           }
        }
     }

//==================================================================+
//                    Условия перевода в Безубыток.                 |
//==================================================================+  

   if(BU==true)
     {
      int cnt;
      for(cnt=OrdersTotal(); cnt>=0; cnt--)
        {
         Or=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

         if(OrderType()==OP_SELL && OrderStopLoss()>=OrderOpenPrice())
           {
            if(OrderOpenPrice()-Ask>=putr*Point)
               if(OrderStopLoss()>(Ask+Point*(TrailingStop+MarketInfo(Symbol(),MODE_SPREAD))))
                  Or=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,0);
           }

         if(OrderType()==OP_BUY)
           {
            if(Bid-OrderOpenPrice()>=putr*Point && OrderStopLoss()<=OrderOpenPrice())
               if(OrderStopLoss()<(Bid-Point*(TrailingStop+MarketInfo(Symbol(),MODE_SPREAD))))
                  Or=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,0);
           }
        }
     }

//==================================================================+    
/*
  int q;                                             
  for(q = 1; q <= Bars; q++)
  {
   double TAq = NormalizeDouble(iCustom(NULL,0,"Trendsignal_Alert_Buy",3,300,true,true,0,0,false,1,0,q),Digits);
   if(TAq != 0)
   {
    Comment("TAq = ",TAq);
    break;
   }
  }*/
//==================================================================+
//                    Условия и Открытие Ордеров.                   |
//==================================================================+

   if(Stop==true)
     {
      if(Total_orders(_Symbol)==0)
        {
         if(TekBar==Bars)return(0);
         TekBar=Bars;
           {
            if(TA1>High[1] && TA1!=0) // Условия продажи.
               Or=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+SL*Point,Bid-TP*Point,"000",0,0,Tomato);        // Продажа.               

            if(TA1<Low[1] && TA1!=0)
               Or=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-SL*Point,Ask+TP*Point,"000",0,0,RoyalBlue);      // Покупка.     ;

           }
        }
     }

   if(Stop==false)
     {
      if(Total_orders(_Symbol)==0)
        {
         if(TekBar==Bars)return(0);
         TekBar=Bars;
           {
            if(TA1>High[1] && TA1!=0) // Условия продажи.
               Or=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"000",0,0,Tomato);        // Продажа.                

            if(TA1<Low[1] && TA1!=0)
               Or=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0,"000",0,0,RoyalBlue);      // Покупка.     
           }
        }
     }
//----   
   return(0);
  }
//+------------------------------------------------------------------+
int Total_orders(string symbol
                 //int type
                 )
  {
   int n=0;
   int total=OrdersTotal();

   for(int i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         //if(OrderType()!=type)continue;
         //if(OrderMagicNumber()!=Magic)continue;
         if(OrderSymbol()!=symbol)continue;
         n++;
        }
     }
   return(n);
  }
//+------------------------------------------------------------------+
 
angel341:
¿Qué parámetro o función ayudará a desplazar el indicador hacia arriba o hacia abajo en n puntos?
Añadido el parámetro Shift, el número positivo se desplaza hacia arriba, el número negativo se desplaza hacia abajo.
Archivos adjuntos:
 
Sergey Gritsay:

el problema es esta condición

Así es como debería funcionar

No conozco para nada el lenguaje de programación... no entiendo en definitiva. ¿Tal vez pueda cambiar estos valores?
 
demonoid123000:
No conozco el lenguaje de programación en absoluto... no lo entiendo. ¿Tal vez pueda cambiar estos valores?
Entonces, ¿de dónde has sacado este código?
 
Sergey Gritsay:
se ha añadido el parámetro Shift, número positivo desplazado hacia arriba, número negativo desplazado hacia abajo.
muchas gracias! voy a probar ahora!!!!
 

Sergey Gritsay:
добавил параметр Shift, положительное число смещение вверх, отрицательное вниз.

¡Muchas gracias!

 
Sergey Gritsay:

se refiere a algo así

¿La ejecución de esta función elimina los pedidos? Si se llama al principio del código:" if(TimeCurrent()>=D'23:50')close_all();return;" entonces el programa no funciona más, es decir, las órdenes no se abren y el registro dice "botón de parada pulsado". Si borro esta línea, todo funciona y se abre. ¿Podría explicar qué es lo que está mal? No sé mucho sobre los detalles, así que sólo he copiado el cuerpo de la función.
 
toni_stark:
¿La ejecución de esta función elimina los pedidos? Si se llama al principio del código:" if(TimeCurrent()>=D'23:50')close_all();return;" entonces el programa no funciona más, es decir, las órdenes no se abren y el registro dice "botón de parada pulsado". Si borro esta línea, todo funciona y se abre. ¿Podría explicar qué es lo que está mal? No soy bueno con los detalles, así que sólo he copiado el cuerpo de la función.
su código por favor
Razón de la queja: