Errori, bug, domande - pagina 720

 

Ciao a tutti!

Ho incontrato questo bug (o forse sto fraintendendo qualcosa)

Quando si guarda la storia di un mese, mostra dati adeguati, cioè ha guadagnato 740, swap -250

Allo stesso tempo, quando vedo l'intero periodo, 500 punti guadagnati e swap è quasi lo stesso

Per questo non capisco come possa essere così quando i guadagni dell'intero periodo sono inferiori al totale mensile.

Se avete bisogno, posso allegare i rapporti sulla storia

 
tol64:

Ecco perché se piazzate un ordine pendente Buy Stop con una posizione aperta di 3 lotti e 4 ordini Buy Stop esistenti di 3 lotti ciascuno (con un limite di 15 lotti), non dovreste avere successo.

In generale, sì - in termini di ciò che è descritto nell'aiuto.

Ma logicamente - non necessariamente. Nei mercati di scambio, ci sono solo ordini limite nello stack, mentre gli ordini stop sono memorizzati sul server del broker e hanno due parametri - il prezzo di attivazione ("Price" in MT) e il prezzo dell'ordine limite che viene piazzato (il prezzo peggiore a cui il commercio è disposto a eseguire). Questo è simile a BuyStopLimit e SellStopLimit in MT5, solo che il limite può essere uguale al prezzo di stop o superiore (per BuyStopLimit) o inferiore (per SellStopLimit). Nei mercati azionari, l'impostazione di un limite più alto (per l'acquisto) si traduce in un trade, mentre questo non può essere fatto in MT. Così, sui mercati di scambio, soprattutto non sviluppati (ad esempio, la borsa ucraina), molto spesso (e soprattutto il giorno della scadenza di un futures trimestrale dell'indice tra 16:30-16:35) le fermate non hanno tempo di lavorare e la tazza si riempie di ordini limite, che in condizioni normali, porterebbe immediatamente all'esecuzione.

Così - Limite nel mercato - impegno fermo a comprare / vendere (se il denaro improvvisamente diventano scarse, il broker può rimuovere l'ordine, ma prima che verrà a esecuzione), mentre STOP - semplicemente un record sul broker server, così al momento del raggiungimento del prezzo di attivazione il broker può stimare i fondi liberi e decidere - esporre limite o no. Ecco perché dico che per i limiti bisogna rispettare i limiti, ma per gli stop, in teoria, non è necessario.

 
Yedelkin:

Hai raggiunto DoubleToString? :)

Ah, guarda NormalizeDouble:

Dovete tenere a mente che un numero normalizzato quando viene emesso sul Journal usando Print() può contenere più cifre decimali di quanto vi aspettereste.

   double pi=M_PI;
   Print("pi=",DoubleToString(pi,16));
      
   double pi_3=NormalizeDouble(M_PI,3);
   Print("NormalizeDouble(pi,3) = ",DoubleToString(pi_3,16))
   ;
   double pi_8=NormalizeDouble(M_PI,8);
   Print("NormalizeDouble(pi,8) = ",DoubleToString(pi_8,16));
   
   double pi_0=NormalizeDouble(M_PI,0);
   Print("NormalizeDouble(pi,0) = ",DoubleToString(pi_0,16));
/*
   Результат:
   pi= 3.1415926535897931
   NormalizeDouble(pi,3)= 3.1419999999999999                          <-----------
   NormalizeDouble(pi,8)= 3.1415926499999998                          <-----------
   NormalizeDouble(pi,0)= 3.0000000000000000
*/

Niente di confuso?

 
victorg:

Ah, guarda NormalizeDouble:

C'è qualcosa di confuso?

No, niente di confuso. Nel tuo esempio

void OnStart()
  {
  double a=2000000.0/3.0;
  Print(DoubleToString(a,30));
  }
non c'era alcun riferimento all'uso della funzione NormalizeDouble() e ai numeri normalizzati. Corrispondentemente, la mia osservazione"Hai avuto a DoubleToString?:)" è stato accompagnato da una citazione della funzioneDoubleToString() senza un'ombra di imbarazzo.E nessuno ha ancora confutato la pertinenza di questa citazione.
 
Yedelkin:

No, niente è confuso. Nel suo esempio.

Non c'è mai stato alcun riferimento all'uso della funzione NormalizeDouble() e ai numeri normalizzati. Corrispondentemente, la mia osservazione"Hai avuto a DoubleToString?:)" è stato accompagnato da una citazione della funzioneDoubleToString() senza un'ombra di imbarazzo.E nessuno ha ancora confutato la pertinenza di questa citazione.

In realtà, non mi riferisco al tuo commento, ma al bacino su NormalizeDouble().

 
notused:

In generale, sì - in termini di ciò che è descritto nell'aiuto.

Ma logicamente - non necessariamente. Nei mercati di scambio, ci sono solo ordini limite nello stack, mentre gli ordini stop sono memorizzati sul server del broker e hanno due parametri - il prezzo di attivazione ("Price" in MT) e il prezzo dell'ordine limite che viene piazzato (il prezzo peggiore a cui il commercio è disposto a eseguire). Questo è simile a BuyStopLimit e SellStopLimit in MT5, solo che il limite può essere uguale al prezzo di stop o superiore (per BuyStopLimit) o inferiore (per SellStopLimit). Nei mercati azionari, l'impostazione di un limite più alto (per l'acquisto) si traduce in un trade, mentre questo non può essere fatto in MT. Così, nei mercati di scambio, soprattutto non sviluppati (ad esempio, la borsa ucraina), molto spesso (e soprattutto il giorno della scadenza di un futures indice trimestrale tra 16:30-16:35) si ferma non hanno tempo di lavorare e la tazza è riempita con ordini limite, che in condizioni normali, avrebbe portato immediatamente all'esecuzione.

Così - Limite nel mercato - impegno fermo a comprare / vendere (se il denaro improvvisamente diventano scarse, il broker può rimuovere l'ordine, ma prima che verrà a esecuzione), mentre STOP - semplicemente un record sul broker server, così al momento del raggiungimento del prezzo di attivazione il broker può stimare i fondi liberi e decidere - esporre limite o no. Ecco perché dico che per i limiti i limiti devono essere rispettati, mentre per le soste, in teoria, non devono esserlo.

Grazie per la spiegazione dettagliata.

Valery, hai provato a implementare una strategia automatica in MT5 Strategy Tumbler? Ho provato circa un mese fa e non ha funzionato, nessuno ha risposto sul forum. Non capisco se è un bug o un malinteso da parte mia. Fare un po' di luce. :)

 

Buon pomeriggio!

Per favore consigliatemi, ho un indicatore iCustom in un corpo di programma regolare, funziona bene e ottiene un handle, tutto funziona.

Se lo metto nella libreria EX5 ottengo indicatore handle=-1 e il programma principale non riesce a chiamare l'indicatore:

"caricamento di DZMACD EURGBP,M15 fallito"
"impossibile caricare l'indicatore personalizzato 'DZMACD' [4002]".

Allo stesso tempo gli indicatori standard, come iMA o iMACD, lavorano normalmente nella stessa libreria ex5, ottengono la maniglia.

Non so cosa sto sbagliando o è un bug?

Документация по MQL5: Технические индикаторы / iCustom
Документация по MQL5: Технические индикаторы / iCustom
  • www.mql5.com
Технические индикаторы / iCustom - Документация по MQL5
 
Nella strutturaMqlDateTime

intday;// giorno

significa il giorno del mese?
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура даты
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура даты
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура даты - Документация по MQL5
 
victorg:

In realtà, non mi riferivo al tuo commento, ma al documento NormalizeDouble().

In realtà, il messaggio era formulato in questo modo:

victorg:

Yedelkin:

Sei arrivato a DoubleToString? :)

Ah, guarda NormalizeDouble:

C'è qualcosa di confuso?

Cioè, c'era una citazione diretta del "mio commento" con il suggerimento "guarda qualcos'altro lassù" e la domanda "è confuso?".

Se si volesse presentare solo i risultati di una nuova ricerca in una forma "...su un molo di NormalizeDouble()" - lo si scriverebbe così, senza citare informazioni inutili. Credo di sì :/

Dal momento che, tuttavia, il tuo post ha usato un link nominato ed esattamente alla mia replica - ha dovuto chiarire che NormalizeDouble() non ha nulla a che fare con la mia replica o il tuo post originale, che mi sono preso la libertà di commentare.

 
Fia:

Buon pomeriggio!

Si prega di consigliare, ho iCustom indicatore nel solito corpo del programma funziona bene, si ottiene handel, tutto funziona.

Se lo metto nella libreria EX5 ottengo Handel= -1 e il programma principale non riesce a chiamare l'indicatore:

"caricamento di DZMACD EURGBP,M15 fallito"
"impossibile caricare l'indicatore personalizzato 'DZMACD' [4002]".

Allo stesso tempo, gli indicatori standard, come iMA o iMACD funzionano bene nella stessa libreria ex5, hanno la maniglia.

Non riesco a capire cosa sto sbagliando o è un bug?

Le impostazioni dell'indicatore personalizzato nella libreria sono a posto?

ERRATO_PARAMETRO_INTERNO_ERRATO

4002

Parametro errato in una chiamata di funzione interna al terminale client