[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 223

 
solnce600:

Signori! Buona sera!

Potresti dirmi perché il compilatore pensa che nel codice seguente

la variabile int Ticket è indefinita.

Genera un errore

'Ticket' - variabile non definita C:\Program Files\Alpari NZ MT4(2)\experts\hhhh.mq4 (18, 6)

Ma la variabile Ticket è anche definita nell'istruzione di assegnazione nel codice sottostante e il codice si compila con successo

La variabile int Ticket è locale e sarà resettata al prossimo tick.
 
Vinin:


Probabilmente mancano solo le parentesi in un punto

Problema risolto, grazie mille.
 
TarasBY:
La variabile int Ticket è locale e sarà resettata al prossimo tick.
L'osservazione è presa in considerazione, grazie mille.
 

Ho incontrato questo problema.

Ho bisogno di inizializzare un array unidimensionale di tipo double con 3000 valori di prezzo di offerta, tutti i valori sono diversi e non sono in ordine.

Devo inserire manualmente ogni valore separato da virgola - non è realistico.

Ho provato con excel, ma se metto un punto al posto della virgola, excel non legge i numeri per mettere una virgola tra loro.

Si prega di suggerire l'opzione migliore.


 

Ho scritto un semplice Expert Advisor che restituisce 3 variabili e le passa a start().

Poi ad ogni tick questi dati (tipo di oggetto, prezzo1 e prezzo2) dovrebbero essere restituiti.

//+-------------------------------------------------------------------------------------+
//|                                                TradingByLine.mq4                    |
//|                                                              hoz                    |
//|                                                                                     |
//+-------------------------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

string objName;
int isObj,
    objType;
double price1,
       price2;

//+-------------------------------------------------------------------------------------+
//| Функция иницилизации                                                                |
//+-------------------------------------------------------------------------------------+
int init()
{

   

  return(0);
}
//+-------------------------------------------------------------------------------------+
//| Функция деиницилизации                                                              |
//+-------------------------------------------------------------------------------------+
int deinit()
{
//----
   
//----
  return(0);
}
//+-------------------------------------------------------------------------------------+
//| Блок поиска своих объектов                                                          |
//+-------------------------------------------------------------------------------------+
bool IsObjectFound(double& price1, double& price2, int& objType)
{
   for (int obj=0; obj<=ObjectsTotal()-1; obj++)
   {
      objName = ObjectName(obj);
      isObj = ObjectFind(objName);
      price1 = ObjectGet("objName", OBJPROP_PRICE1);
      price2 = ObjectGet("objName", OBJPROP_PRICE2);
      objType = ObjectType("objName");

      if (isObj != -1)
         return(true);
   }
   return(false);
}
//+-------------------------------------------------------------------------------------+
//| Функция start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
   if (!IsObjectFound(price1, price2, objType))
      return(0);
   Print("objType = ", objType);
   Print("price1 = ", price1, ", price2 = ", price2);

  return(0);
}

Poi eseguo questo Expert Advisor in modalità di visualizzazione nel tester e disegno a mano una linea nel grafico. I prezzi di disegno e il tipo di oggetto che ho ottenuto nella funzioneIsObjectFound() non ritornano corretti. Ecco l'output del log:

2013.03.16 20:12:46     2013.01.24 00:02  TradingByLine EURJPY,M1: objType = -1
2013.03.16 20:12:46     2013.01.24 00:02  TradingByLine EURJPY,M1: price1 = 0, price2 = 0
2013.03.16 20:12:46     2013.01.24 00:02  TradingByLine EURJPY,M1: objType = -1
2013.03.16 20:12:45     2013.01.24 00:01  TradingByLine EURJPY,M1: price1 = 0, price2 = 0
2013.03.16 20:12:45     2013.01.24 00:01  TradingByLine EURJPY,M1: objType = -1
2013.03.16 20:12:45     2013.01.24 00:01  TradingByLine EURJPY,M1: price1 = 0, price2 = 0
2013.03.16 20:12:45     2013.01.24 00:01  TradingByLine EURJPY,M1: objType = -1
2013.03.16 20:12:44     2013.01.24 00:01  TradingByLine EURJPY,M1: price1 = 0, price2 = 0

La linea è disegnata a mano, il che significa che ha un tipo e altri parametri:

La linea

Perché i parametri richiesti non vengono restituiti?

 
solnce600:

Ho incontrato questo problema.

Ho bisogno di inizializzare un array unidimensionale di tipo doppio per 3000 valori di prezzo di offerta, tutti i valori sono diversi e non sono in ordine.

Non è realistico inserire manualmente ogni valore separato da una virgola.

Ho provato con excel ma se metto un punto al posto di una virgola excel non legge i numeri per mettere una virgola tra loro.

Si prega di suggerire l'opzione migliore.


Excel può leggere, mostrami più dettagli di come hai fatto
 
hoz:

Ho scritto un semplice Expert Advisor che restituisce 3 variabili e le passa a start().

Poi ad ogni tick questi dati (tipo di oggetto, prezzo1 e prezzo2) dovrebbero essere restituiti.

Poi eseguo questo Expert Advisor in modalità visualizzazione nel tester e disegno una linea nel grafico a mano. I prezzi di disegno e il tipo di oggetto che ho ottenuto nella funzioneIsObjectFound() non tornano corretti. Ecco l'output del log:

La linea è disegnata a mano, il che significa che ha un tipo e altri parametri:

Perché non vengono restituiti i parametri richiesti?

Dobbiamo

price1 = ObjectGet("objName", OBJPROP_PRICE1);
      price2 = ObjectGet("objName", OBJPROP_PRICE2);
      objType = ObjectType("objName");

objName senza virgolette. Questo è il nome della variabile (identificatore nel testo del programma) che contiene il nome dell'oggetto (stringa)

 
alsu:

Dovrebbe essere

objName senza virgolette. Questo è il nome della variabile (identificatore nel testo del programma) che contiene il nome dell'oggetto (stringa)



A proposito, la documentazione la pensa diversamente. È qui che mi sono fatto prendere dalla confusione.

errore di documentazione

 
alsu:

Excel può leggerlo, mostrami più dettagli come farlo

Nella linea di 100 valori con una virgola dopo il primo segno (cioè, prezzo)

Evidenziare una linea

Home - trovare e sostituire

Cambiare tutte le virgole in punti - successo.

Ora dobbiamo mettere delle virgole tra i valori

Seleziono il formato delle celle

Tutti i formati

Nel campo attivo che visualizza il formato numerico della mia stringa - ho messo una virgola alla fine

Exel dice che non è in grado di elaborare il formato che ho inserito.

 
hoz:


A proposito, la documentazione la pensa diversamente. Quindi sono stato ingannato.

Le virgolette sono il VALORE della variabile stringa, non la variabile stessa!!!!