Errori, bug, domande - pagina 367

 
Yedelkin:
Il problema è molto probabilmente in qualcos'altro. Ho la stessa identica dichiarazione di array in OnInit() ha funzionato bene e funziona ancora. Avete una lettera latina m omessa nel nome dell'array ArrSybols. Forse questo è un problema del programmatore?

Può mancare, ma fa qualche differenza?

E se lo scrivo in nativo (che non è vietato, come ho capito) l'intero terminale dovrebbe andare in crash?

Il codice funziona esattamente senza tale dichiarazione di array, anche se si specifica solo la dimensionalità tutto funziona.

//Вот так работает
string ArrSybols[10];

La dichiarazione originale dell'array era così

//List of symbols for trade on the Championship 2010
string ArrSymbolsChampionship2010[10] = {"EURUSD","GBPUSD","USDJPY","USDCHF","USDCAD",
                                        "AUDUSD","EURJPY","EURCHF","GBPJPY","GBPCHF"};
 

La domanda è ancora valida.

Sono riuscito a collegare l'indicatore in una finestra separata a OBJ_CHART, ma quando cambio la dimensione della finestra dell'indicatore, non è molto bello, perché se l'altezza di OBJ_CHART è 500, allora l'altezza della finestra dell'indicatore è stata impostata al massimo a 493. Come risultato, ti lascia una brutta cima. Come liberarsene?

Codice:

   if(ObjectFind(0,"MW_chart")!=0)
     {
      ObjectCreate(0,"MW_chart",OBJ_CHART,0,time[0],close[0]);
      ObjectSetString(0,"MW_chart",OBJPROP_SYMBOL,_Symbol);
      ObjectSetInteger(0,"MW_chart",OBJPROP_PERIOD,_Period);
      ObjectSetInteger(0,"MW_chart",OBJPROP_CORNER,CORNER_LEFT_UPPER);
      ObjectSetInteger(0,"MW_chart",OBJPROP_XSIZE,1000);

      ObjectSetInteger(0,"MW_chart",OBJPROP_DATE_SCALE,false);
      ObjectSetInteger(0,"MW_chart",OBJPROP_PRICE_SCALE,false);
      ObjectSetInteger(0,"MW_chart",OBJPROP_SELECTABLE,1);
      ObjectSetInteger(0,"MW_chart",OBJPROP_CHART_SCALE,2);
      ObjectSetInteger(0,"MW_chart",OBJPROP_YSIZE,500);
     }
   int h=iCCI(Symbol(),Period(),14,PRICE_TYPICAL);
   long id=ObjectGetInteger(0,"MW_chart",OBJPROP_CHART_ID);
   ChartIndicatorAdd(id,1,h);
   ChartSetInteger(id,CHART_HEIGHT_IN_PIXELS,1,493);
 
Interesting:

Può essere mancato, ma fa la differenza?

Certo che lo fa. Non devo spiegartelo :) Se un array è definito con un nome, ma gli elementi di questo array sono chiamati con un nome diverso, allora... :)

Se tutto funziona senza inizializzazione dell'array manualmente, dovresti guardare il codice, come tu stesso capisci. Dopotutto, l'assenza di inizializzazione esplicita della matrice di stringhe non impedisce al terminale client di inizializzare questa matrice da solo.

Ripeto: una tale stringa ha funzionato e funziona ancora "al meglio delle sue possibilità".

 
Yedelkin:

Certo che lo fa. Non devo spiegartelo :) Se un array è dichiarato con un nome, ma si accede agli elementi di questo array con un nome diverso, allora ... :)

Se tutto funziona senza inizializzazione dell'array manualmente, dovresti guardare il codice, come tu stesso capisci. Dopotutto, l'assenza di inizializzazione esplicita della matrice di stringhe non impedisce al terminale client di inizializzare questa matrice da solo.

Ripeto: una tale stringa ha funzionato e funziona ancora.

No, no, il problema non è nel nome, è che l'array è riempito con un'enumerazione durante la dichiarazione.

Funziona bene con tutti i tipi tranne che con le stringhe. Con le stringhe qualsiasi programma (esperto o script non importa) si blocca davvero.

Questo è un ovvio bug da scrivere a servicedesk.

Ecco come funziona:

// string a[2]={"a","b"};
long   b[2]={2,3};
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
  Print("Работает");   
  }
//+------------------------------------------------------------------+

ma se si decommenta la dichiarazione dell'array di stringhe, non funziona.

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Renat:
Controlla il numero massimo di barre nella finestra nelle impostazioni
Cambiato da 100000 a 1000000. Ha aiutato, ma solo dopo aver riavviato il terminale (l'aiuto dice dell'effetto delle modifiche dopo aver premuto OK).
 

Renat, un altro taffy selvaggio, sei sicuro di aver trovato l'errore?


 
Il problema del traffico è risolto, ma il fatto è che non abbiamo ancora rilasciato i componenti del server in liveupdate. Finora sono stati rilasciati gli aggiornamenti dei terminali client e i server saranno nel prossimo aggiornamento. Non sono ancora stati testati.
 
Renat:
Il problema del traffico è risolto, ma il fatto è che non abbiamo ancora rilasciato i componenti del server in liveupdate. Finora sono stati rilasciati gli aggiornamenti dei terminali client e i server saranno nel prossimo aggiornamento. Non sono ancora stati testati.
Capisco. Grazie per la vostra risposta. Da parte mia, vi terrò anche informati.
 

L'ultima build (430) quando si prova con periodo Forward e Custom Max - si blocca (sembra essere al momento di passare al test Forward). All'inizio ho dato la colpa al mio Expert Advisor, ma poi ho controllato il seguente codice:

input int a1;
input int a2;
input int a3;
int OnInit(){return(0);}
void OnDeinit(const int reason){}
void OnTick(){}
double OnTester() {
   return(rand());
}

Ho impostato i parametri per ottimizzare da 1 a 1000, tutti i tick, USDCAD, M4 dal 01.01.2011 a oggi (con Forward - qualsiasi periodo). Congelare. Disabilitato gli agenti remoti - ho riavviato il terminale - si blocca anche lui. Rimosso il periodo in avanti - funziona. Se Custom Max è da biasimare - non l'ha controllato. Prima di questa build - tutto funzionava.

 

Cosa significa?

2011.04.17 15:21:22 Tester tester agente fallito

Motivazione: