Errori, bug, domande - pagina 529

 

La mia domanda è già volata via). Lo dirò di nuovo.

tol64:
Почему то между 2001 и 2006 годом не тестируются эксперты. Смотрел по евро и фунту. Закрыл терминал, удалил историю. Закачалась заново. Всё равно. До 2001 сделки открываются. А начиная с 2001 по 2006 при наличии сигналов пропуск. Почему?

---
Дополнительная информация. Это происходит только, если в настройках тестера выбран таймфрейм D1. Если выбрать таймфрейм D1 в настройках эксперта, а в настройках тестера меньший ТФ, то пропуска нет. Это баг или есть какое-то этому объяснение? 

Qualcuno ha incontrato un problema simile?
 
Yedelkin:
Bene, date un'occhiata al codice dato dall'autore. E in quale caso si chiama PositionGetDouble :)

Beh, sì, otteniamo i dati dopo aver determinato che non ci sono posizioni in linea di principio e la selezione di una particolare posizione è fallita...

Questo è in qualche modo strano.

 
papaklass:

A Vedelkin.

Ancora una volta. Il riferimento dice che per garantire dati di posizione freschi, si raccomanda di chiamare la funzione PositionSelect( Symbol() ) appena prima di chiamarli. Il codice che ho fornito qui smentisce questa affermazione. Logicamente, il codice stesso è assurdo, ma sottolinea la scorrettezza dell'affermazione nella guida.

Ora:

E il bug è che la funzione PositionGetDouble(POSITION_VOLUME) dovrebbe restituire zero se non c'è nessuna posizione. Questo è tutto. IMHO.

No,ti sbagli ....

Restituisce zero se c'è(PositionSelect() ) posizione con volume=0.

Opensate che se non c'è nessuna posizione, si dovrebbe restituire zero e il prezzo di apertura =0 ?!?

 
papaklass:

E il bug è che la funzione PositionGetDouble(POSITION_VOLUME) dovrebbe restituire zero se non c'è nessuna posizione.

:) Il "difetto" è che in assenza di una posizione aperta non ha senso richiedere i suoi dati e fare ulteriori calcoli basati su questi dati.

Beh, diciamo che si sa con certezza che non c'è nessuna posizione. Quindi perché richiedere i suoi dati (per fare dei passi in più), se si sa già che non c'è nessuna posizione? È più facile riscrivere un po' il codice.

cartapesta:

Ancora una volta. Il riferimento dice che per garantire l'acquisizione garantita di dati di posizione freschi, si raccomanda di chiamare la funzione PositionSelect( Symbol() ) poco prima di chiamarla. Il codice che ho fornito qui smentisce questa affermazione. Logicamente, il codice stesso è assurdo, ma sottolinea la scorrettezza dell'affermazione nella guida.

Il codice sopra dice solo che l'autore "per garantire dati freschi" chiama la funzione PositionSelect(), la funzione riporta il suo fallimento, ma l'autore richiede ancora dati di posizione freschi. È corretto?

Ma poi otteniamo quanto segue:

  • (a) il fallimento della funzione PositionSelect significa che i dati di posizione freschi non sono stati copiati nell'ambiente software (come vorrebbe l'autore);
  • e (b) le chiamate successive a PositionGetDouble, PositionGetInteger e PositionGetString restituiranno dati copiati una volta prima quando la funzione PositionSelect ha avuto successo
  • .

In altre parole, gli sviluppatori raccomandano di chiamare la funzione per continuare a lavorare con dati di posizione freschi quando la funzione termina con successo, e non promettono nulla se la funzione restituisce false. ...Quando riceve false, gli sviluppatori raccomandano procedure un po' diverse :)

2. Inoltre, consideriamo una nuova versione del codice:

if(PositionSelect(Symbol()))
   {//---еще одно непосредственное обращение
      //---например, расчитываем объем позиции при доливки
   } 
else 
   {
      //---например, расчитываем объем позиции при отсутствии позиции
   }

Qui, se la funzione PositionSelect() fallisce, ci chiede di "calcolare la quantità di posizione quando non c'è posizione". Ma chi dice che il fallimento della funzione PositionSelect() significa automaticamente che non c'è una posizione? Le ragioni del fallimento della funzione PositionSelect() possono essere diverse.

 

Vorrei tormentare gli sviluppatori ancora una volta...

Voglio dire con il disegno che è di vitale importanza poter cancellare gliordini pendenti quando si raggiunge un certo prezzo. Come trader MT4, sono molto più interessato senza una tale opzione. Per favore, ditemi quali sono i vostri piani futuri in questa direzione. Grazie.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
File:
zhq04b2p01.png  16 kb
 

Il terminale si blocca molto spesso quando si lavora con il tester.

 
tol64:

Il terminale si blocca molto spesso quando si lavora con il tester.

I crash del terminale sono segnalati regolarmente agli sviluppatori in modalità automatica. Ma se vuoi, puoi fare una domanda al CD con tutti i dettagli e allegare i registri.
 
tol64:

Il terminale si blocca molto spesso quando si lavora con il tester.

Descrivete la vostra situazione in dettaglio al Service Desk, specificando

  • Parametri di ingresso dell'Expert Advisor durante il test
  • attaccare l'indicatore (l'indicatore sarà rimosso dopo il fissaggio).
 
Interesting:
I rapporti di crash del terminale sembrano arrivare automaticamente agli sviluppatori su base regolare. Ma se vuoi, puoi fare una richiesta alla CA, dove specifichi tutti i dettagli e alleghi i log.
Quindi, l'informazione che si trova in Details>> viene automaticamente inviata agli sviluppatori se Internet? Se è così, è fantastico. Tutto dovrebbe essere automatizzato)))
 
ALozovoy:

Descrivete la vostra situazione in dettaglio al Service Desk, specificando

  • Parametri di ingresso dell'Expert Advisor durante il test
  • attaccare l'indicatore (l'indicatore sarà rimosso dopo il fissaggio).

Ok, lo farò più tardi.