Errori, bug, domande - pagina 1550

 

Ci sono logiche complesse che funzionano per ventiquattro ore, ma a un certo punto si bloccano. Questo succede a volte in EX5, il cui codice sorgente non può essere modificato. È possibile determinare dall'esterno che un indicatore o un Expert Advisor si blocca? Raccogliere statistiche sulla parte calcolata di un particolare indicatore?

Con gli indicatori, sembra possibile, perché sono in uno stato di sospensione che uccidono l'aggiornamento dei grafici sul loro simbolo. L'Expert Advisor può rintracciarlo, anche se senza specificare quale indicatore ha causato l'hover.

 
Stabilendo dei record per i divieti. Durante i divieti ricevo risposte sul forum, ma posso solo leggerle. E dopo un altro divieto è molto difficile ricordare chi e dove ha risposto per continuare. È possibile risolvere questo problema (senza consigli per non essere più bannati)? E in generale a volte si legge, ma non si ha il tempo di rispondere subito. È possibile impostare un flag di promemoria per "rispondere più tardi"?
 
comp:
Stabilendo dei record per i divieti. Durante i divieti ricevo risposte sul forum, ma posso solo leggerle. E dopo un altro divieto è molto difficile ricordare chi e dove ha risposto per continuare. È possibile risolvere questo problema (senza consigli per non essere più bannati)? E in generale a volte si legge, ma non si ha il tempo di rispondere subito. È possibile impostare un flag di promemoria per "rispondere più tardi"?
Prima bisogna pensare e poi fare. Non il contrario. Allora non ci saranno problemi di memoria.
 
Karputov Vladimir:
Bisogna prima pensare e poi fare. Non il contrario. Allora non ci saranno problemi di memoria.
Parole d'oro!!!
 
Vladimir Pastushak:
Parole d'oro!!!
Completamente supportato!!! È possibile rispondere alla domanda-suggerimento
comp:
A volte lo si legge e non si ha il tempo di rispondere subito. È possibile mettere una specie di flag di promemoria a se stessi per "rispondere più tardi"?
 
comp:
È possibile mettere un flag di promemoria a se stessi per "rispondere più tardi"?
Ti capisco in parte. Tutti vogliono una soluzione ai loro problemi immediati. Nel tuo caso, è troppo. Tu, anche seduto in un bagno, stai cercando di costruire gli sviluppatori.
 

Domanda su MathRound() in MQL4, che "restituisce un valore arrotondato all'intero più vicino di un valore numerico specificato".

Codice:

#property strict
void OnStart()
  {
   Print("1) MathRound(10.50001) = ",MathRound(10.50001));  // 11.0
   Print("2) MathRound(10.49999) = ",MathRound(10.49999));  // 10.0
  }

Risultato:


Potete spiegarmi perché questo è il caso? Se deve essere così, si prega di aggiungere nella documentazione che solo la prima cifra dopo il punto è presa in considerazione.

MathRound - Математические функции - Справочник MQL4
MathRound - Математические функции - Справочник MQL4
  • docs.mql4.com
MathRound - Математические функции - Справочник MQL4
 

Colleghi, per favore aiutatemi. Non ho abbastanza cervello per conto mio.

Il robot, che ha piazzato ordini Limit, ha bisogno di cancellare l'ordine rimanente quando chiude una posizione aperta (non importa se è allo stop o al profitto), ma non tutti gli ordini, ma quello il cui numero magico è uguale al ticket della posizione chiusa. Quindi, il trigger per la cancellazione deve essere l'evento di chiusura della posizione. Per me non importa in questo caso, come questa posizione ha chiuso (solo per condizione risulterà che se la chiusura da SL, allora non ci sono limiti, che devono essere rimossi). Ma se dettagli e lo facciamo bene, l'innesco è un TP.

Quindi, il robot cancella l'ordine, ma non dopo che la posizione è stata chiusa, ma non appena è stata aperta. E comincia a combattere se stesso piazzando ecancellando costantementegli ordini in sospeso. Si prega di vedere cosa c'è che non va.

input double   lot                  = 0.2;
input double   TakeProfitPips       = 50;
input double   StopLossPips         = 200;

int               bar=0;
int               shift=1;
int               tiket;
int               otkt;
double            price;
int               cnt;
double            TPp,SLp;
int               tkt;
int               n;
int               type;

    int _OrdersTotal = 0;
    // кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),
    // состоянием на текущий тик
    int now_OrdersTotal = 0;
    // кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),
    // состоянием на предыдущий тик
    static int pre_OrdersTotal = 0;
    // массив открытых позиций состоянием на текущий тик
    int now_OrdersArray[][2]; // [№ в списке][№ тикета, тип позиции]
    // текущий номер позиции в массиве now_OrdersArray (для перебора)
    int now_CurOrder = 0;
    // текущий номер позиции в массиве pre_OrdersArray (для перебора)
    int pre_CurOrder = 0;
    // массив для хранения количества закрытых позиций каждого типа
    int now_ClosedOrdersArray[6][3]; // [тип ордера][тип закрытия] 
 
    // временные флаги
    bool OrderClosed = true, PendingOrderOpened = false;
    // временные переменные
   

    int pre_OrdersArray[][2]; // [количество позиций][№ тикета, тип позиции]
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }


void OnTick()

  {

        if(OrdersTotal()== 0 && iTime(Symbol(),PERIOD_M1,1)==D'14.01.16 16:30')

        {
        
         price=Open[shift];

         tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot,price,3,price+StopLossPips*Point,price-TakeProfitPips*Point);
         if(tiket<0)
           {
            Print("Ошибка OrderSend № - ",GetLastError());
           }
        }

     

   if(OrdersTotal()!=0)
     {
      for(cnt=0; cnt<OrdersTotal(); cnt++)

         OrderSelect(cnt,SELECT_BY_POS); // Если есть следующий
        {                                    // Анализ ордеров:
         price=OrderOpenPrice();
         otkt = OrderTicket();
         n=otkt;
         //--------------------------------------------------------------

 
         if(OrderType()==OP_SELL && OrderMagicNumber()==0)

           {
            tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot*3,price+100*Point,1,price+StopLossPips*Point,price-TakeProfitPips*Point,"My order",n);
            tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot*9,price+200*Point,1,price+StopLossPips*Point,price-TakeProfitPips*Point,"My order",n);
           }
        }

     }

  
        _OrdersTotal = OrdersTotal(); // запоминаем общее количество позиций
        ArrayResize( now_OrdersArray, _OrdersTotal ); // изменяем размер массива открытых позиций под текущее кол-во
        ArrayInitialize( now_OrdersArray, 0.0 ); // обнуляем массив
        now_OrdersTotal = 0; // обнуляем количество позиций, соответствующих критериям
        ArrayInitialize( now_ClosedOrdersArray, 0.0 ); // обнуляем массивы закрытых позиций и сработавших ордеров
       
 
        //+------------------------------------------------------------------+
        //| Перебираем все позиции и записываем в массив 
        //+------------------------------------------------------------------+
        for ( int z = _OrdersTotal - 1; z >= 0; z -- )
        {
            if ( OrderSelect( z, SELECT_BY_POS ) )
           
            {
                now_OrdersArray[now_OrdersTotal][0] = OrderTicket();
                now_OrdersArray[now_OrdersTotal][1] = OrderType();
                now_OrdersTotal ++;
            }
        }
        
        ArrayResize( now_OrdersArray, now_OrdersTotal ); // изменяем размер массива открытых позиций под кол-во позиций, соответствующих критериям
 
        //+------------------------------------------------------------------+
        //| Перебираем список позиций предыдущего тика, и считаем сколько закрылось позиций и
        //| сработало отложенных ордеров
        //+------------------------------------------------------------------+
        for ( pre_CurOrder = 0; pre_CurOrder < pre_OrdersTotal; pre_CurOrder ++ )
        {
            tkt = pre_OrdersArray[pre_CurOrder][0]; // запоминаем тикет и тип ордера
            type   = pre_OrdersArray[pre_CurOrder][1];
            
            OrderClosed = true; // предпологаем, что если это позиция, то она закрылась
           
            for ( now_CurOrder = 0; now_CurOrder < now_OrdersTotal; now_CurOrder ++ ) // перебираем все позиции из текущего списка открытых позиций
            {
                if ( tkt == now_OrdersArray[now_CurOrder][0] ) // если позиция с таким тикетом есть в списке,
                {   OrderClosed = false; // значит позиция не была закрыта (ордер не был удалён)
                    break;
                }
            }
           
            if ( OrderClosed )  // если была закрыта позиция (удалён ордер),
            {
                
                if (OrderSelect( tkt, SELECT_BY_TICKET )) // выбиаем ее
               
                    n = tkt; // присваеваем n номер тикета
                
            }   
      }  
     
        //+------------------------------------------------------------------+
        //| Удаляем ордер с магическим номером = тикету закрытой ранее позиции 
        //+------------------------------------------------------------------+
     for ( int z = _OrdersTotal - 1; z >= 0; z -- )
        {
            if ( OrderSelect( z, SELECT_BY_POS ) )
            otkt = OrderTicket();
            if (n == OrderMagicNumber ())
             {OrderDelete( otkt );}
         }
         
         return;
      }
Помогите отредактировать код, пожалуйста
Помогите отредактировать код, пожалуйста
  • www.mql5.com
И начинает бороться сам с собой, постоянно выставляя и удаляя отложенные ордера. - - Категория: общее обсуждение
 
Puoi dirmi se c'è un meccanismo incorporato per determinare in quale mercato il robot di trading sta funzionando, è necessario identificare i mercati FOREX e FORTS.
 

Aiuto, ragazzi, non riesco a mettere la lingua russa su MT4 su Macbook, sembra essere presente, ma viene visualizzato in geroglifici, ma nel meta editor va bene. Ho costruito tutto tramite Play su mac,

Wine 1.9.4 sarebbe molto apprezzato.

Motivazione: