Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 523

 
L'indicatoreEnvelopes nell'EA, l'EA si è scritto da solo, nelle impostazioni ho messo uno spostamento (-7). Perché l'EA non apre gli ordini con uno spostamento negativo nell'indicatoreEnvelopes?
 
Vagif Babaev:
L'indicatoreEnvelopes nell'EA, l'EA si è scritto da solo, nelle impostazioni ho messo shift (-7). Perché l'EA non apre gli ordini con shift negativo nell'indicatoreEnvelopes?
In iEnvelopes l'indice di un valore ricevuto dal buffer dell'indicatore non deve essere inferiore allo shift, cioè l'ultimo valore non deve essere inferiore a 7.
 
demonoid123000:
Cari programmatori. Puoi aiutare? Vorrei allegare il numero di ordini aperti agli Expert Advisors. Non so se sarebbe utile. Ho messo questi gufi su diverse coppie e solo un ordine è stato aperto. Se apro un ordine su una delle coppie, i segnali sull'altra coppia non vengono ignorati. Non so cosa farne.

il problema è questa condizione

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

È così che dovrebbe funzionare.

//+------------------------------------------------------------------+
//|                                                    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:
Quale parametro o funzione aiuterà a spostare l'indicatore in alto o in basso di n punti?
Aggiunto il parametro Shift, il numero positivo si sposta verso l'alto, quello negativo verso il basso.
File:
 
Sergey Gritsay:

il problema è questa condizione

Ecco come dovrebbe funzionare

Non conosco affatto il linguaggio di programmazione... non capisco insomma. Forse puoi cambiare questi valori?
 
demonoid123000:
Non conosco affatto il linguaggio di programmazione... non lo capisco. Forse puoi cambiare questi valori?
Allora dove hai preso questo codice?
 
Sergey Gritsay:
ha aggiunto il parametro Shift, un numero positivo spostato verso l'alto, un numero negativo verso il basso.
Grazie mille! Ora farò dei test !!!!
 

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

Grazie mille!

 
Sergey Gritsay:

intende qualcosa del genere

L'esecuzione di questa funzione cancella gli ordini? Se è chiamato all'inizio del codice:" if(TimeCurrent()>=D'23:50')close_all();return;" allora il programma non funziona più, cioè gli ordini non vengono aperti e il log dice "stop button pressed". Se cancello questa linea, tutto funziona e si apre. Potresti spiegare cosa c'è che non va? Non so molto di dettagli, quindi ho solo copiato il corpo della funzione.
 
toni_stark:
L'esecuzione di questa funzione cancella gli ordini? Se è chiamato all'inizio del codice:" if(TimeCurrent()>=D'23:50')close_all();return;" allora il programma non funziona più, cioè gli ordini non vengono aperti e il log dice "stop button pressed". Se cancello questa linea, tutto funziona e si apre. Potresti spiegare cosa c'è che non va? Non sono bravo con i dettagli, quindi ho solo copiato il corpo della funzione.
il tuo codice per favore