Errori, bug, domande - pagina 284

 
alexvd:

Come sono impostati gli stop e i TP?

Aprite prima una posizione e solo dopo la modificate, o specificate subito lo SL e il TP adeguati?

Prima si apre una posizione e poi la si modifica...
 
Voodoo_King:

build 384. sembra che abbia trovato un altro bug... Quando si visualizza la cronologia, gli ordini - i livelli di Stop Loss e Take Profit impostati non vengono visualizzati...


Vengono "visualizzati" quando si imposta un ordine. Non vengono visualizzati quando una posizione viene chiusa dal server usando uno stop, il che è naturale, dato che il server non imposta stop quando chiude una posizione.
















































































































 

Ho scoperto qualcosa del genere. Non so se è un bug o no, ma sembra che lo sia. Il seguente codice:

lot=NormalizeDouble(My_AccountInfo.MaxLotCheck(_Symbol,ORDER_TYPE_BUY,latest_price.ask)/10,2);
printf(lot);

Uscite nel registro del tester (con un deposito di 1000 dollari):

2011.01.28 20:06:48    Core 1    2010.01.04 00:56:00   0.07000000000000001

La funzione (NormalizeDouble) non dovrebbe rimuovere tutte le cifre non zero dopo il 7?

Pensavo di aver trovato una soluzione nel modulo: lot=floor((My_AccountInfo.MaxLotCheck(_Symbol,ORDER_TYPE_SELL,latest_price.ask)/10)*100)/100,

ma anche io ho ottenuto risultati simili. Cosa fare - quanto è critico nelle interrogazioni commerciali?

 

Buon pomeriggio!

Ho aggiunto la funzione Comment al corpo del ciclo, in modo da poter visualizzare la percentuale dello stato di esecuzione del ciclo e un paio di altri valori. Il semplice algoritmo ha impiegato 5 minuti (se non di più) per essere eseguito nel corpo del ciclo, ma ha ricalcolato solo 32000 valori di barre (Close,High,Low,Open). Mi sono lamentato che l'array aumenta dinamicamente mentre il ciclo è in esecuzione, ma non è vero. Dopo aver debuggato l'algoritmo, Comment è stato rimosso - il calcolo viene ora eseguito in una manna dal cielo.

La funzione Comment rallenta davvero l'esecuzione dei programmi? Sono francamente sorpreso.

Sistema: Windows XP, Terminale 5.00.384.

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
KffAlex:

Buon pomeriggio!

Ho aggiunto la funzione Comment al corpo del ciclo, in modo da poter visualizzare la percentuale dello stato di esecuzione del ciclo e un paio di altri valori. Il semplice algoritmo ha impiegato 5 minuti (se non di più) per essere eseguito nel corpo del ciclo, ma ha ricalcolato solo 32000 valori di barre (Close,High,Low,Open). Mi sono lamentato che l'array aumenta dinamicamente mentre il ciclo è in esecuzione, ma non è vero. Dopo aver debuggato l'algoritmo, Comment è stato rimosso - il calcolo viene ora eseguito in una manna dal cielo.

La funzione Comment rallenta davvero l'esecuzione dei programmi? Sono francamente sorpreso.

Sistema: Windows XP, Terminale 5.00.384.

Ho notato lo stesso effetto.
 

Eseguendo l'Expert Advisor sulla cronologia utilizzando solo i prezzi di apertura, le posizioni di vendita non vengono aperte ai prezzi di apertura, ma al massimo, e vengono chiuse al minimo.

Perché succede questo?

L'Expert Advisor cerca i segnali per aprire e chiudere le posizioni usando solo i prezzi di Open[0]. Viene usato EventSetTimer(1);

 
Valmars:

Vengono emessi quando viene effettuato un ordine. Non disponibile quando una posizione viene chiusa dal server usando uno stop, il che è naturale perché il server non imposta stop quando una posizione viene chiusa.

Cosa c'è?) dove appaiono quando gli ordini vengono effettuati

Sto parlando del rapporto "Storia", e non vedo nulla nelle colonne Stop Loss e Take Profit, anche se le posizioni hanno questi valori.

Come faccio a sapere se uno stop loss è stato impostato o no? Voglio dire, se è stato attivato, posso vederlo, ma non?

 

Ho la seguente domanda.

Il compito è quello di scrivere i valori di equità in un file specifico durante la fase di test, cancellando i valori precedenti.

Ma quello che succede qui è il seguente:

1. QuandoFileDelete() è assente in OnInit(), viene scritto in aggiunta a quelli esistenti.

2. Ma quando FileDelete() in OnInit() è presente, nonostante gli stessi record di equità in OnCalculatde(), il file risultante risulta essere vuoto.

Perché questo accade e come evitarlo?

Qui sotto c'è il codice:

#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
double   Values[];
string   Array[];
string   filename="equity FileWrite25.txt";
int      handle;
int      NumberCopyElements;
string   common_folder;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(){
   SetIndexBuffer(0,Values,INDICATOR_DATA);
   PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, 100);
   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE);
   ArraySetAsSeries(Values, false);
   //---
   common_folder=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
   FileDelete(filename,FILE_COMMON);
   return(0);
}
int OnCalculate(const int        rates_total,
                const int        prev_calculated,
                const datetime&  time[],
                const double&    open[],
                const double&    high[],
                const double&    low[],
                const double&    close[],
                const long&      tick_volume[],
                const long&      volume[],
                const int&       spread[])
{  
   uint written;
   handle=FileOpen(filename,FILE_WRITE|FILE_READ|FILE_COMMON|FILE_TXT);
   if(handle!=INVALID_HANDLE){
      FileSeek(handle,0,SEEK_END);
      written=FileWrite(handle,TimeToString(TimeCurrent())," ",AccountInfoDouble(ACCOUNT_EQUITY));//TimeToString(time[i]),
      PrintFormat("Equity FileWrite25 - OnCalculate(): Записано %d байт в общую папку всех терминалов - %s",written,common_folder);
   }
   else {
      Print("Equity FileWrite25 - OnCalculate(): Не удалось открыть файл ",filename,".  Ошибка ",GetLastError());     
   }
   FileClose(handle);
   return rates_total;
}
void OnDeinit(const int reason){
   FileClose(handle);
}
 
Voodoo_King:

come va :) dove vengono visualizzati quando viene effettuato un ordine

Sto parlando del rapporto "Storia", e non vedo nulla nelle colonne Stop Loss e Take Profit, anche se le posizioni hanno questi valori.

Come faccio a sapere se uno stop loss è stato impostato o no? Se ha funzionato, posso vederlo, ma se non lo è?

Viene visualizzato nella scheda 'History/Order', e a cosa pensi che siano uguali lo stop-loss e il take-profit nell'ordine, che il server usa per chiudere la posizione quando lo stop viene attivato? State guardando i parametri esatti degli ordini.
 
DV2010:

Ho la seguente domanda.

Il compito è quello di scrivere i valori di equità in un file specifico durante la fase di test, cancellando i valori precedenti.

Ma quello che succede qui è il seguente:

1. Quando FileDelete() è assente in OnInit(), viene scritto in aggiunta a quelli esistenti.

2. Ma quando FileDelete() in OnInit() è presente, nonostante gli stessi record di equità in OnCalculatde(), il file risultante risulta essere vuoto.

Perché questo accade e come evitarlo?

Il codice è riportato di seguito:

Ho la soluzione per il rilevamento della modalità test, ma c'è un po' di empirismo in essa che mi imbarazza

(Ho cercato di trovare un'opportunità per ottenere programmaticamente l'ora di inizio del tester, per impostare l'indentazione da esso alle profondità della storia e tagliare così il tempo reale,

ma purtroppo non l'ho trovato):

   if(rates_total - prev_calculated > 1 && rates_total - prev_calculated < 10000){
    FileDelete(filename,FILE_COMMON);
   }   
Ma c'è un problema di natura abbastanza diversa, che è che dopo aver cambiato il periodo di test gli indicatori secondo i risultati del test scompaiono per qualche motivo, ma se dopo si fa una compilazione per un nuovo periodo, allora l'esecuzione del tester li visualizza.

Bug?