Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1013

 

Come posso controllare gli ordini in sospeso in MQL5?


Il problema è che ho bisogno delle seguenti funzioni: "Non confondere le posizioni e gli ordini pendenti".


Allora come posso ottenere informazioni su quegli ordini in sospeso?

 
Alexandr Sokolov:

Come posso controllare gli ordini in sospeso in MQL5?


Il problema è che ho bisogno delle seguenti funzioni: "Non confondere le posizioni e gli ordini pendenti".


Allora come posso ottenere informazioni su questi ordini in sospeso?

Ho solo bisogno di leggere gli ordini pendenti. Per esempio, questa funzione è solo per gli ordini stop in sospeso:

//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void CalculateAllPendingOrders(int &count_buy_stops,int &count_sell_stops)
  {
   count_buy_stops   = 0;
   count_sell_stops  = 0;

   for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==InpMagic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
               count_buy_stops++;
            else
               if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
                  count_sell_stops++;
           }
  }
 
Vladimir Karputov:

Basta leggere gli ordini pendenti. Per esempio, questa funzione è solo per gli ordini stop in sospeso:

Grazie mille!


Stavo guardando l'esempio ed è tutto attraverso la posizione...

 
Alexandr Sokolov:

Grazie mille!


È solo che ho guardato l'esempio ed è tutto attraverso la posizione...

Ecco un esempio che compila:

//+------------------------------------------------------------------+
//|                                    CalculateAllPendingOrders.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property script_show_inputs
//---
#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>
//---
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
COrderInfo     m_order;                      // object of COrderInfo class
//--- input parameters
input ulong    InpMagic             = 200;         // Magic number
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return;
     }
//---
   int count_buy_stops=0,count_sell_stops=0;
   CalculateAllPendingOrders(count_buy_stops,count_sell_stops);
  }
//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void CalculateAllPendingOrders(int &count_buy_stops,int &count_sell_stops)
  {
   count_buy_stops   = 0;
   count_sell_stops  = 0;

   for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==InpMagic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
               count_buy_stops++;
            else
               if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
                  count_sell_stops++;
           }
  }
//+------------------------------------------------------------------+
 
Alexandr Sokolov:

Come posso controllare gli ordini in sospeso in MQL5?


Il problema è che ho bisogno delle seguenti funzioni: "Non confondere le posizioni e gli ordini pendenti".


Allora come posso ottenere informazioni su quegli ordini in sospeso?

La differenza è che in mql4 la funzione OrdersTotal() restituisce il numero totale di ordini a mercato e pendenti. E in mql5 restituisce solo il numero di ordini pendenti. E per ottenere il numero di posizioni, in termini di ordini di mercato mql4, la funzione PositionsTotal()

 
Alexey Viktorov:

Non ho visto il thread sul forum, ma dopo aver guardato alcune istruzioni, trovo questa più comprensibile. L'ho provato, ha funzionato, ma non vedo ancora la necessità di applicarlo. Anche se penso che sarebbe una buona idea combinare la storia di tutti i terminali in una cartella.

Ho letto l'articolo al link. È brillante. Ed è una super soluzione, per chi ha molti terminali. Ora ci può essere una cartella mql4 per diversi terminali, senza dover costantemente copiare i file avanti e indietro.

grazie mille!!!

 
Sergey Likho:

Ho letto l'articolo al link. È brillante. Ed è una super soluzione, per chi ha molti terminali. Ora ci può essere una cartella mql4 per diversi terminali, senza dover costantemente copiare i file avanti e indietro.

grazie mille!!!

Non sono io quello da ringraziare. Ho prestato attenzione ai post di Sergei Tabolin e ho abbinato alcune delle parole in essi contenute al desiderio di Seric29, beh, l'ho cercato io stesso.

 

Salve.

Per favore aiutatemi a risolvere il codice.

Ho provato a mettere la griglia nel mercato e hanno iniziato a imprecare contro di me:2016.04.01 00:02:00 1111111113241135454356146 EURUSD,H1: importo lotti non valido per lafunzione FreeMarginCheck

file di Expert Advisor allegato.

Grazie in anticipo.

Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Expert tick function                                             | //| test1                                                            |...
File:
123.mq4  87 kb
 
Dmitriy Prigodich:

Salve.

Per favore aiutatemi a risolvere il codice.

Ho provato a mettere la griglia nel mercato e hanno iniziato a imprecare contro di me:2016.04.01 00:02:00 1111111113241135454356146 EURUSD,H1: importo lotti non valido per la funzione FreeMarginCheck

file di Expert Advisor allegato.

Grazie in anticipo.

Dice anche: quantità di lotti non validi

La funzione FreeMarginCheck non controlla gli argomenti di Expert Advisor e non aggiunge una dimensione del lotto normalizzata.

PS - bene, non mettere tutto in una riga nel mercato, la cosa più che essi stessi non utilizzare. Bisogno di valutazione, riempire meglio il codobase

 

Volevo fare un video, ma non ho una telecamera e ho un vecchio telefono dell'epoca dello Zar Pea. Così ho creato un esperto e l'ho chiamato 111.mq4

Ecco il suo codice primitivo.

#property strict
#import "111б.ex4"//111б.mq4
int Funi(string Soob);
#import

int OnInit(){Funi(Symbol());return(INIT_SUCCEEDED);}
void OnDeinit(const int reason){}
void OnTick(){Funi(Symbol());}


e poi ho creato una libreria e l'ho chiamata 111b.mq4 con il codice primitivo

#property library
#property strict
 string  st_mas[]; //export
 int Funi(string Soob)export
 {st_mas[(ArrayResize(st_mas,ArrayRange(st_mas,0)+1))-1]=Soob;
 Print("Размер массива = ",ArrayRange(st_mas,0));
 for(int i=0;i<ArrayRange(st_mas,0);++i)
 Print("Вывод массива ",st_mas[i]);
 return 2;}

. Ho dichiarato un array di stringhe all'interno della libreria, ma poi si è scoperto che gli sviluppatori non hanno fornito la possibilità di esportare e importare array e variabili. Si scopre che non c'è modo di ottenere un array globale che ricordi le informazioni. Ma non importa, ho preso un'altra strada. Ho creato la funzioneFuni(). Poi ho creato degli hard link per i terminali chiave H che sono impostati in questo modo

I file originali sono in Forex4you, e i link in Forex4you1 ho lanciato il robot originale e il link al grafico, i primi calcoli sono stati ottenuti, ma quando i tick sono andati solo originale Forex4you aggiornato le informazioni est_mas array aumentato di dimensioni, ma quando tick è andato a Forex4you1 non succede nulla solo quando il file manualmente arriva al grafico. Poi ho preso un'altra strada. Ho creato un Expert Advisor chiamato 333.mq4 e l'ho installato in MT4 Forex4you1 e ho collegato la libreria 111b.mq4 ad esso e ho lanciato il programma su un grafico. Il robot 333.mq4 è stato in grado di connettersi al link della libreria e questa cosa ha iniziato a funzionare online, ma come si è scoperto più tardi la libreria era un prototipo e l'array dichiarato in essa funziona all'interno di un singolo grafico

L'esempio mostra che anche se il robot è collegato a una libreria con un array globale, questo array funziona come un'immagine e ancora non può fornire comunicazione, abbiamo bisogno di creare variabili condivise che saranno disponibili da tutte le parti. Chissà se è possibile esportare array e variabili. Penso che la seconda opzione sia scrivere le informazioni su un file, perché il file non sarà un proxy e sarà letto da entrambe le parti e quindi i terminali e i robot saranno in grado di comunicare tra loro. Chi sa come lavorare con i file controlla questa teoria, dato che io non ho ancora questa esperienza.

Sapete se è possibile esportare array e variabili?