Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 523

 
Indicador deEnvelopes na EA, a EA escreveu-se a si própria, em configurações coloquei um deslocamento (-7). Porque é que a EA não abre encomendas com um deslocamento negativo no indicadorEnvelopes?
 
Vagif Babaev:
Indicador deEnvelopes na EA, a EA escreveu-se a si própria, em configurações coloquei um deslocamento (-7). Porque é que a EA não abre encomendas com um deslocamento negativo no indicadorEnvelopes?
Em iEnvelopes o índice de um valor recebido do tampão indicador não deve ser inferior ao deslocamento, ou seja, o último valor não deve ser inferior a 7.
 
demonoid123000:
Caros programadores. Pode ajudar? Gostaria de anexar o número de encomendas em aberto a Consultores Especialistas. Não sei se vai ajudar. Coloco estas corujas em vários pares e apenas uma encomenda é aberta. Se eu abrir uma ordem num dos pares, os sinais no outro par não são ignorados. Não sei o que fazer com ele.

o problema é esta condição

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

É assim que deve 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:
Que parâmetro ou função ajudará a deslocar o indicador para cima ou para baixo por n pontos?
Adicionado parâmetro Deslocamento, número positivo desloca para cima, número negativo desloca para baixo.
Arquivos anexados:
 
Sergey Gritsay:

o problema é esta condição

É assim que deve funcionar

Não conheço de todo a linguagem de programação...em suma, não compreendo. Talvez possa alterar estes valores?
 
demonoid123000:
Não conheço de todo a linguagem de programação... Não a compreendo. Talvez possa alterar estes valores?
Então, onde obteve este código?
 
Sergey Gritsay:
acrescentou o parâmetro Shift, número positivo deslocado para cima, número negativo deslocado para baixo.
muito obrigado! vou testar agora!!!!
 

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

Muito obrigado!

 
Sergey Gritsay:

ele quer dizer algo como isto

A execução desta função elimina ordens? Se for chamado no início do código:" if(TimeCurrent()>=D'23:50')close_all();return;" então o programa não funciona mais, ou seja, as ordens não são abertas e o registo diz "stop button pressed". Se eu apagar esta única linha, tudo funciona e abre. Poderia explicar o que está errado? Não sei muito sobre detalhes, por isso apenas copiei o corpo da função.
 
toni_stark:
A execução desta função elimina ordens? Se for chamado no início do código:" if(TimeCurrent()>=D'23:50')close_all();return;" então o programa não funciona mais, ou seja, as ordens não são abertas e o registo diz "stop button pressed". Se eu apagar esta única linha, tudo funciona e abre. Poderia explicar o que está errado? Não sou bom em detalhes, por isso apenas copiei o corpo da função.
o seu código, por favor
Razão: