Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 321

 
C-4:

Ancora una volta (leggere attentamente):

In MetaTrader4 è possibile chiudere gli ordini solo in modo sequenziale: inviare un ordine per chiudere un ordine, attendere la sua esecuzione, passare all'ordine successivo, ecc. Per questo motivo il tempo per chiudere un batch di ordini in MetaTrader4 è sostanziale e non può essere ridotto con mezzi banali. Tuttavia, è possibile caricare diversi Expert Advisors sui propri grafici e farli scambiare informazioni tra loro e chiudere gli ordini con un comando comune. Ogni esperto chiude gli ordini solo al suo simbolo. Dato che ci sono diversi thread di trading in MetaTrader4, non si bloccherebbero a vicenda e non si invierebbero ordini l'un l'altro. Tuttavia, l'organizzazione di un tale pool di esperti è complicata, e a giudicare dal tuo livello di conoscenza, non ti consiglierei niente del genere.

Se pensate ancora che ho scritto troppe parole, ecco un breve riassunto:

1. La risposta alla tua domanda è no, non puoi eseguire uno script da un Expert Advisor.

2. Non è possibile aumentare la velocità di esecuzione degli ordini di trading in MetaTrader4 senza utilizzare metodi complessi.

L'unico modo per risolvere la tua domanda normalmente è la funzione OrderSendAsync, che non esiste in MetaTrader4.

Grazie mille per la tua risposta dettagliata! Se non ti dispiace, per favore condividi i tuoi pensieri su tale idea:

Aggiungere 2 parametri all'Expert Advisor che chiude tutti gli ordini al profitto totale, per ordinare gli ordini:
(1 parametro - 1-ordinamento per mag in ordine decrescente o 2 - ordine ascendente e 2 - 0-vendere e comprare, 1-ordini di vendita, 2-ordini di acquisto)
Aprire 4 terminali con 1 conto e 1 grafico congiunto della stessa coppia, in modo che i tick coincidano e impostare diversi parametri come 1-1, 1-2, 2-1, 2-2
che li dividerà in 4 flussi: minimo mago vendere, minimo mago comprare, massimo mago vendere, massimo mago comprare

O sono di nuovo stupido? E sì, hai ragione sul mio livello di conoscenza!

 
Novikov:

Grazie mille per la risposta dettagliata! Se non ti dispiace, per favore condividi i tuoi pensieri su questa idea:

Aggiungere 2 parametri all'Expert Advisor che chiude tutti gli ordini al profitto totale, per ordinare gli ordini:
(1 parametro - 1-ordinamento per mag in ordine decrescente o 2 - ordine ascendente e 2 - 0-vendere e comprare, 1-ordini di vendita, 2-ordini di acquisto)
Aprire 4 terminali con 1 conto e 1 grafico congiunto della stessa coppia, in modo che i tick coincidano e impostare diversi parametri come 1-1, 1-2, 2-1, 2-2
che li dividerà in 4 flussi: minimo mago vendere, minimo mago comprare, massimo mago vendere, massimo mago comprare

O sono di nuovo stupido? E sì, hai ragione sul mio livello di conoscenza!

Sì, si può fare così. Ma non c'è bisogno di eseguire diversi terminali. Esegui un terminale e ha 4 finestre. Metti un robot su ogni finestra. Usa i numeri come uno dei parametri di questo robot: 1-4. In altre parole, dovreste assegnare il robot con il parametro 1 alla prima finestra, con il parametro 2 alla seconda finestra e così via. Quando arriva il momento di chiudere gli ordini, ognuno dei robot confronta il numero magico dell'ordine selezionato con il numero magico del parametro e lo chiude. Gli ordini con altre majick saranno dati ad altri Expert Advisors per chiuderli.
 
C-4:
Sì, possiamo farlo. Ma non c'è bisogno di eseguire diversi terminali. È necessario lanciare un terminale, e ha 4 finestre. Metti un robot su ogni finestra. Usa i numeri come uno dei parametri di questo robot: 1-4. In altre parole, dovreste assegnare il robot con il parametro 1 alla prima finestra, con il parametro 2 alla seconda finestra e così via. Quando arriva il momento di chiudere gli ordini, ognuno dei robot confronta il numero magico dell'ordine selezionato con il numero magico del parametro e lo chiude. Gli ordini con altre majick saranno dati ad altri Expert Advisors per chiuderli.

Sul forum di mt5, quando inizialmente ho considerato 4 finestre, come suggerisci tu, un programmatore ha risposto: "Il terminale è uno. Significa che c'è solo un "buco", cioè c'è solo un piccolo "buco" nel terminale per l'accesso al server, della dimensione di una richiesta, che viene utilizzato da tutti gli EA e gli script, che sono in esecuzione nel terminale. Nessuno può accedere al server finché la singola richiesta non viene elaborata.

Quindi, cosa è meglio e più vero - 4 grafici in 1 terminale o 4 terminali?

 
Novikov:

Sul forum di mt5, quando inizialmente ho considerato 4 finestre, come suggerisci tu, un programmatore ha risposto: "Il terminale è uno. Significa che c'è solo un "buco", cioè c'è solo un piccolo "buco" nel terminale per l'accesso al server, della dimensione di una richiesta, che viene utilizzato da tutti gli EA e gli script, che sono in esecuzione nel terminale. Finché una richiesta non viene elaborata, nessun altro può accedere al server.

Quindi, cosa sarà meglio e più vero - 4 grafici in 1 terminale o 4 terminali?

Pensate voi stessi alla risposta di questo "programmatore". Se fosse così, sarebbe impossibile fare trading con diversi Expert Advisors in un solo terminale. Si occupano costantemente del contesto, cioè si bloccano a vicenda. Prima nelle versioni arruffate di MT4 c'era un tale errore e lo si poteva incontrare, ma ora è stato addirittura rimosso perché non è più rilevante. Il multithreading dell'esecuzione degli ordini in MT4 è stato notevolmente esteso ed esiste da molto tempo.

In ogni caso, dovresti seguire il mio consiglio e, se qualcosa va storto, non sarà difficile spostare alcuni EA su un altro terminale.

 
Novikov:

Sul forum di mt5, quando inizialmente ho considerato 4 finestre, come suggerisci tu, un programmatore ha risposto: "Il terminale è uno. Significa che c'è solo un "buco", cioè c'è solo un piccolo "buco" nel terminale per l'accesso al server, della dimensione di una richiesta, che viene utilizzato da tutti gli EA e gli script, che sono in esecuzione nel terminale. Nessuno può accedere al server finché la singola richiesta non viene elaborata.

Quindi, cosa è meglio e più vero - 4 grafici in 1 terminale o 4 terminali?

Dove si trovano questi "programmatori"?
 

Caro, un'altra domanda: la funzione OrderCloseBy aiuterebbe a velocizzare la chiusura di una grande pila di ordini?

Per esempio: quando si raggiunge un determinato profitto, aprire 1 altro ordine sulla coppia (o sulle coppie) per pareggiare la dimensione del lotto degli ordini di acquisto e di vendita, e poi eseguire "chiudere gli ordini sovrapposti".

Le citazioni sono a 5 cifre.

 

Ragazzi, potete consigliarmi su questa domanda, potrebbe essere di natura organizzativa. Non posso mostrarvi il codice dell'indicatore. È scritto con competenza, tutto è stato testato prima.

Ha iniziato la domanda da qui: https://www.mql5.com/ru/forum/6343/page323

Ho installato il terminale dal sito web di MQ - ha offerto un server demo Alp per impostazione predefinita. Ho finito per eseguire il test su eurobucks:

La mia comprensione è che sta aspettando i dati della sterlina-dollaro. Non si aprono scambi da nessuna parte.

Poi, quando si corre sui pound-bucks si dice:

dati in sospeso per USDJPY.

 

E solo quando funziona su USDJPY - non ci sono dati in attesa - ma ancora nessun trade aperto.

Non ho specificato esplicitamente una coppia per aprire trade nel codice, cioè per esempio

Tutti per qualsiasi simbolo _Symbol. E non è una questione di ordini di apertura... Quale potrebbe essere la ragione? Grazie.

 for(int i=0;i<10;i++)
     {
      volume=NormalizeDouble(volume,1);
      if(volume<=0) break;
      if(Type==POSITION_TYPE_SELL)
        {
         request.type=ORDER_TYPE_SELL;
         request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
         if(TP!=0) takeprofit = request.price-TP*_Point;
         if(SL!=0) stoploss = request.price+SL*_Point;
        }
      if(Type==POSITION_TYPE_BUY)
        {
         request.type=ORDER_TYPE_BUY;
         request.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
         if(TP!=0) takeprofit = request.price+TP*_Point;
         if(SL!=0) stoploss = request.price-SL*_Point;
        }
      request.action = TRADE_ACTION_DEAL;
      request.symbol = _Symbol;
      request.volume = MathMin(volume,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX));
      request.sl = stoploss;
      request.tp = takeprofit;
      request.deviation=SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
      request.type_filling=ORDER_FILLING_FOK;
      request.comment=" ";//DoubleToString(Money,2)+"$";
      if(!OrderCheck(request,check))
        {
         if(check.margin_level<100) volume-=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
 

L'indicatore assegna dei pesi ad ogni strumento, il che risulta in una specie di analisi a grappolo. Non vuole funzionare nel tester. Quale può essere la ragione? Vi ringrazio.

E gli agenti funzionano bene, tutto è carico e pronto a partire...


 
R0MAN:

L'indicatore assegna dei pesi ad ogni strumento, il che risulta in una specie di analisi a grappolo. Non vuole funzionare nel tester. Quale può essere la ragione? Vi ringrazio.

E gli agenti funzionano bene, tutto è carico e pronto a partire...


Scrivete a servicedesk. Dovranno darvi il codice, però.