Nuovo terminale client MetaTrader 4 build 402 - pagina 6

 
dmmikl86:
Questo perché il valore del pip è diverso per le diverse coppie...

Penso che il valore di pip sia ridondante nella modalità di visualizzazione "profitto in pip".

 
olyakish:

Penso che il valore del punto sia ridondante nella modalità di visualizzazione "profitto in pip".

è un altro glitch eterno di MT )
 

Glitches....

1) Se si rimuovono gli strumenti non necessari da Market Watch e poi se ne aggiungono altri, si ottiene una cosa interessante.

Clicca con il tasto destro del mouse su uno strumento, seleziona "Chart Window" per aprire un grafico.

Questo aprirà un grafico di uno strumento diverso da quello selezionato!!!

Per questo errore, dovete selezionare uno strumento da quello che avete appena aggiunto. (vedere gli screenshot pic1, pic2, pic3)

2) nel mio screenshot puoi vedere che lo strumento USDCHF è segnato come selezionato nella finestra "Symbols", anche se in realtà non è nel "Market Watch". (pic4)

Forse il primo inconveniente è una conseguenza del secondo, perché la numerazione degli strumenti nel Market Watch è sbagliata.

Ho Internet molto male, ecco perché tutti gli screenshot sono in archivio.

Ecco il linkhttp://www.sendspace.com/file/tbav73

 
dimonsky:

Glitches....

1) Se si rimuovono gli strumenti non necessari da Market Watch e poi se ne aggiungono altri, si ottiene una cosa interessante.

Clicca con il tasto destro del mouse su uno strumento, seleziona "Chart Window" per aprire un grafico.

Questo aprirà un grafico di uno strumento diverso da quello selezionato!!!

Ho notato anche questo nella build 401.
 

Oggi (o meglio ieri) al mattino ho avuto uno strano inconveniente in MT4 - OrderSelect non ha trovato un ordine per numero di biglietto in un Expert Advisor.

Due ordini pendenti sono piazzati nell'EA - BUY_STOP e SELL_STOP, sui lati opposti del prezzo corrente. I biglietti di questi ordini sono memorizzati in t1 e t2. Il codice in cui si è verificato l'errore, come mostrato di seguito, fa quanto segue: quando uno di questi ordini pendenti viene aperto, il secondo viene cancellato e al suo posto viene inserito il prossimo ordine pendente con il numero t3. Se c'è stato un errore quando t1 e t2 sono stati originariamente inseriti, il biglietto errato non dovrebbe essere nella lista degli ordini. Questo è ciò che viene controllato con if (OrderSelect ...) e, in caso di errore, scriviamo un messaggio nel log e usciamo dalla serie usando restart().

Oggi il t1 ha aperto alle 6:30. L'ordine t2 è stato immediatamente cancellato dall'Expert Advisor (è stato cancellato dal mercato, ma è rimasto nella cronologia - "cancellato", ho controllato). Dopo di che, il t3 è stato collocato. Questi eventi sono tutti nei registri di MT e EA. Allora il controllo "OrderSelect(t2, SELECT_BY_TICKET)" restituisce FALSE e la serie si interrompe con l'errore "Unknown order t2". È strano, perché t2 è stato impostato e cancellato senza errori ed è rimasto nella cronologia. La modalità della storia in MT è "Tutta la storia". Come può OrderSelect non trovarlo?

Il computer è autonomo, usato solo per il trading, nient'altro. Nessuno lo tocca tranne me. Il carico della CPU è in media del 10%. La memoria, lo spazio su disco, ecc. è abbastanza grande.
La versione di MT4 è 402. Per diversi mesi l'Expert Advisor ha lavorato in diverse varianti in tempo reale su un conto demo in un MT parallelo a tre diverse coppie (su tre grafici). Non ci sono stati problemi con questa parte del codice fino a questa mattina. Dopo di che tutto è andato liscio nel pomeriggio e la sera per altre coppie sullo stesso EA. Cioè, l'errore non può essere riprodotto a piacimento.

Domanda: come è potuto succedere? È un difetto di MT o qualcosa di cui non ho tenuto conto nel codice?

Questo codice usa le funzioni OrderDeleteX e OrderSendX - wrapper per OrderDelete e OrderSend standard, che aggiungono il controllo di un thread commerciale per non essere occupato e registrano eventi come "Deleting order ..." e "Sending order ..." nel log dell'EA.
Ho rimosso il calcolo dei prezzi per rendere il codice più semplice e chiaro.

if (OrderSelect(t1, SELECT_BY_TICKET)) {
  if (OrderType() == OP_BUY) {
    Print("--------------------------------------------------");
    if (t2 > 0) OrderDeleteX(t2);
    // Расчёты цены, стоплосса и тейкпрофита
    // .....
    t3 = OrderSendX(Symbol(), OP_SELLSTOP, 0.02, Price1, slip, StopLoss, TakeProfit, "step 2", Magic, 0, ColorOrderSendSell);
  }   
} else {
  Print("ERROR: Unknown order t1 in step 1");
  restart(3);
}
 

if (OrderSelect(t2, SELECT_BY_TICKET)) {     
  if (OrderType() == OP_SELL) {
    Print("--------------------------------------------------");
    if (t1 > 0) OrderDeleteX(t1);
    // Расчёты цены, стоплосса и тейкпрофита
    // .....
    t3 = OrderSendX(Symbol(), OP_BUYSTOP, 0.02, Price1, slip, StopLoss, TakeProfit, "step 2", Magic, 0, ColorOrderSendBuy);
  }
} else {
  Print("ERROR: Unknown order t2 in step 1");
  restart(4);
}


Numeri d'ordine nelle variabili:
t2 = 119732180
t3 = 119733656

Лог эксперта:
06:30:43 CheMurom v3.4.real EURUSD,H1: --------------------------------------------------
06:30:43 CheMurom v3.4.real EURUSD,H1: Deleting order #119732180; attempt number: 1
06:30:43 CheMurom v3.4.real EURUSD,H1: delete #119732180 sell stop 0.01 EURUSD at 1.46432 sl: 1.47032 tp: 1.43432 ok
06:30:43 CheMurom v3.4.real EURUSD,H1: Sending order cmd=SELL_STOP, lot=0.02, price=1.46032, slip=3, sl=1.46932, tp=1.44082; attempt number: 1
06:30:44 CheMurom v3.4.real EURUSD,H1: open #119733656 sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082 ok
06:30:44 CheMurom v3.4.real EURUSD,H1: ERROR: Unknown t2 in step 1

Лог терминала:
06:30:43 '2871084': delete pending order #119732180 sell stop 0.01 EURUSD at 1.46432 sl: 1.47032 tp: 1.43432
06:30:44 '2871084': request was accepted by server
06:30:44 '2871084': request in process
06:30:44 '2871084': pending order #119732180 was deleted
06:30:44 '2871084': pending order sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082
06:30:44 '2871084': request was accepted by server
06:30:45 '2871084': request in process
06:30:45 '2871084': order was opened : #119733656 sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082
 

Non riesco a trovare nessun ordine. Possiamo vedere dal rapporto DC che l'ordine 67930924 era aperto...

Queste sono operazioni chiuse nella storia del conto dal 08.06.11. Come possiamo vedere questo ordine non è qui.

Quindi deve essere in scambi aperti. L'immagine qui sotto, le compravendite aperte.

Ma non è nemmeno qui. Mi chiedo quale rapporto sarà inviato domani da DC, ma voglio sentire la versione degli sviluppatori di software, come può essere.

E un'altra cosa, forse non è importante, ma la mia data non è salvata e non ho nessuna informazione su di essa.


 
voinG:

Non riesco a trovare nessun ordine. Possiamo vedere dal rapporto DC che l'ordine 67930924 era aperto...

Queste sono operazioni chiuse nella storia del conto dal 08.06.11. Come possiamo vedere questo ordine non è qui.

Quindi deve essere in scambi aperti. L'immagine qui sotto, le compravendite aperte.

Ma non è nemmeno qui. Mi chiedo quale rapporto sarà inviato domani da DC, ma voglio sentire la versione degli sviluppatori di software, come può essere.

E un'altra cosa, forse non è importante, ma la mia data non è salvata e non ho nessuna informazione al riguardo.



C'è. Ho aperto "tutta la storia" ed è visibile in questa versione.
 

Come continuazione del tema "OrderSelect non ha trovato un ordine per numero di biglietto".

Questa mattina lo stesso errore si è verificato nello stesso Expert Advisor su un'altra coppia. L'ordine pendente t2=#119899844 è stato piazzato con successo, poi è stato anche cancellato con successo, dopo di che l'ordine pendente t3=#119903758 è stato piazzato, e dopo che t2 non è stato trovato dalla funzione OrderSelect.

Tra l'errore di ieri e quello di oggi, il codice indicato nel mio messaggio precedente nell'Expert Advisor ha funzionato con successo diverse volte senza errori e gli ordini cancellati sono stati trovati senza problemi.

Per diversi mesi prima, l'Expert Advisor aveva funzionato nella versione MT4 229. Niente di simile è stato osservato prima. Nel fine settimana di 4 giorni fa sono passato alla versione 402. Non so se gli errori sono legati alla nuova versione. Non posso tornare alla vecchia versione, perché Alpari, dove questo Expert Advisor fa trading, ha cambiato il fuso orario delle quotazioni, e solo la versione 402 riflette correttamente questi cambiamenti (così sostiene Alpari).

Le domande sono rimaste aperte:
Come può succedere, perché OrderSelect non ha trovato l'ordine nella cronologia, mentre la cronologia è visualizzata nella sua interezza, l'ordine perso è visibile in essa? È un glitch di MT o mi manca qualcosa nel codice?

Лог эксперта:
10:15:33 CheMurom v3.4.real EURCHF,H1: --------------------------------------------------
10:15:33 CheMurom v3.4.real EURCHF,H1: Deleting order #119899844; attempt number: 1
10:15:34 CheMurom v3.4.real EURCHF,H1: delete #119899844 sell stop 0.01 EURCHF at 1.22245 sl: 1.22945 tp: 1.19735 ok
10:15:34 CheMurom v3.4.real EURCHF,H1: Sending order cmd=SELL_STOP, lot=0.02, price=1.21745, slip=3, sl=1.22845, tp=1.20015; attempt number: 1
10:15:36 CheMurom v3.4.real EURCHF,H1: open #119903758 sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015 ok
10:15:36 CheMurom v3.4.real EURCHF,H1: ERROR: Unknown t2 in step 1

Лог терминала:
10:15:35 '2871084': delete pending order #119899844 sell stop 0.01 EURCHF at 1.22245 sl: 1.22945 tp: 1.19735
10:15:35 '2871084': request was accepted by server
10:15:35 '2871084': request in process
10:15:36 '2871084': pending order #119899844 was deleted
10:15:36 '2871084': pending order sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015
10:15:36 '2871084': request was accepted by server
10:15:36 '2871084': request in process
10:15:37 '2871084': order was opened : #119903758 sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015
 
Ho descritto il problema a Renate con uno screenshot, nella build 399 l'hanno rimosso, ma nella 401 e 402 questo problema è apparso di nuovo, sono dovuto tornare alla build 399
 

C'è una DLL scritta in Delphi7. Ha solo una funzione: controllare se c'è un file nel percorso specificato.

Ecco il suo codice.

library FileGDV;

uses
  SysUtils,
  Classes;

//{$R *.res}

function FileExists(s:pchar):boolean; StdCall;
begin
   result:=sysutils.fileexists(s);
end;

exports FileExists;

begin
end.

Niente di complicato, niente di speciale, solo una funzione.

Ecco il codice dell'Expert Advisor che utilizza questa funzione:

if (FileExists(s))
      {
         handleM=FileOpen(fn,FILE_BIN|FILE_WRITE|FILE_READ);
         
      }
      else
      {
         Alert("File not found   "+s);         
         handleM=FileOpen(fn,FILE_BIN|FILE_WRITE);
         s="Time;;M1;M5;M15;M30;H1;H4;D1\n";
         FileWriteString(handleM,s,StringLen(s));
      } 

ed ecco il codice del file di intestazione

#import "FileGDV.dll"


bool FileExists(string s);

 
#import


Ecco il codice del file di intestazione. Se c'è solo un Expert Advisor nel terminale, tutto funziona come un orologio.

Se ne ho due nel terminale in finestre diverse e chiamano questa funzione, allora ogni poche ore, entrambi gli EA smettono di funzionare e nel diario appaiono dei messaggi

2011.06.09 14:33:57     gdv_e_MultiMACD_a_KSP_GBP_v082 GBPCHF,M5: expert stopped
2011.06.09 14:33:57     gdv_e_MultiMACD_a_KSP_GBP_v082 GBPCHF,M5: function 'FileExists' call from dll 'FileGDV.dll' critical error