Errori, bug, domande - pagina 1189

 

meta-citazioni, mi hai completamente confuso (

bool  ObjectCreate(
   long         chart_id,      // идентификатор графика
   string       name,          // имя объекта
   ENUM_OBJECT  type,          // тип объекта
   int          sub_window,    // индекс окна
   datetime     time1,         // время первой точки привязки
   double       price1,        // цена первой точки привязки
   ...
   datetime     timeN=0,       // время N-ой точки привязки
   double       priceN=0,      // цена N-ой точки привязки
   ...
   datetime     time30=0,      // время 30-й точки привязки
   double       price30=0      // цена 30-точки привязки
   );
 

N dopo 30 prima ?

30 massimo?

 
sanyooooook:

meta-citazioni, mi hai completamente confuso (

N dopo 30 prima ?

30 massimo?

La guida specifica:

Crea un oggetto con il nome specificato, il tipo e le coordinate iniziali nella sottofinestra specificata del grafico. Puoi specificare fino a 30 coordinate quando lo crei.

Cioè 30 è il massimo. Quindi prima viene un numero sconosciuto (N) di parametri e l'ultimo parametro con indice 30.

 
barabashkakvn:

La guida specifica:

Crea un oggetto con il nome specificato, il tipo e le coordinate iniziali nella sottofinestra specificata del grafico. Si possono specificare fino a 30 coordinate durante la creazione.

Cioè 30 è il massimo. Quindi prima viene un numero sconosciuto (N) di parametri e l'ultimo parametro con indice 30.

Di solito si scrive N, e dopo si specifica il numero massimo N dove N<=30

SZZ: sono maestri della confusione: un solo cambio di indicizzazione, quando si copia un array, non costa nulla )

o questo:

           ObjectSetInteger(0,iObjectName,OBJPROP_TIME,0,X1Time);

si scopre che la prima coordinata della linea di tendenza non è la prima. ma zero, e non lo dice da nessuna parte, almeno dove si può trovare rapidamente questa informazione.

 
sanyooooook:
di solito si scrive N, e dopo si specifica il massimo N dove N<=30

Non in questo contesto. Questa non è una descrizione di condizioni, ma un nome di variabile. E il nome della variabile dovrebbe riflettere l'indice massimo consentito. Ecco perché le ultime variabili vanno con l'indice 30:

   datetime     time30=0,      // время 30-й точки привязки
   double       price30=0      // цена 30-точки привязки
 
paladin800:
C'è un modo per fare in modo che le operazioni di scrittura/lettura dei file non siano su disco ma nella RAM per lavorare più velocemente e senza buchi?
Si può fare un disco RAM, si può creare un file in memoria.
 
barabashkakvn:

Non in questo contesto. Questa non è una descrizione di condizioni, ma un nome di variabile. E il nome della variabile dovrebbe riflettere l'indice massimo consentito. Pertanto, le ultime variabili vanno con un indice di 30:

In tutti i libri di testo di matematica lo scrivono come ho detto sopra, specificano N e poi danno a questo N un valore non superiore a 30.
 

Ce l'hanno proprio nel riferimento nel quadrato:

bool  ObjectCreate(
   long          chart_id,      // идентификатор графика
   string        object_name,   // имя объекта
   ENUM_OBJECT   object_type,   // тип объекта
   int           sub_window,    // индекс окна
   datetime      time1,         // время первой точки привязки
   double        price1,        // цена первой точки привязки
   ...
   datetime      timeN=0,       // время N-точки привязки
   double        priceN=0       // цена N-точки привязки
   );
 

 
TheXpert:
Si può fare un disco RAM, si può creare un file in memoria.
Capisco. Il problema è che la sandbox del terminale è sull'unità C e anche se creo un'unità RAM (ad esempio l'unità E), non è possibile reindirizzare la sandbox lì.
 
paladin800:
Capisco. Il problema è che la sandbox dei terminali si trova sul drive C e anche se creo un RAM-drive (per esempio il drive E), non posso reindirizzare la sandbox lì.

Prima di tutto, è possibile reindirizzarlo.

E se usate WinAPI, non avete nemmeno bisogno di reindirizzare. In secondo luogo, la creazione di file in memoria non ha nulla a che fare con i RAM-disk, sebbene anche WinAPI sia necessaria.

 

Ho usato l'aiuto di Metaeditor per prendere un esempio di come lavorare con lo spread. L'ho eseguito su GBPCHF, CADCHF dove lo spread non è di 1-2 pip. Puoi dirmi perché l'array è pieno di zeri? È progettato in questo modo?

#property indicator_separate_window
#property indicator_buffers 1
//---- plot Spread
#property  indicator_label1  "Spread"
#property  indicator_type1   DRAW_HISTOGRAM
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input int      bars=3000;
//--- indicator buffers
double         SpreadBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,SpreadBuffer,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,0);
//---
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   if(prev_calculated==0)
     {
      int spread_int[];
      ArraySetAsSeries(spread_int,true);
      int spreads=CopySpread(Symbol(),0,0,bars,spread_int);
      Print("Получено исторических значений спреда: ",spreads);
      for (int i=0;i<spreads;i++) 
      {
      SpreadBuffer[rates_total-1-i]=spread_int[i];
      if(i<=30) Print("spread["+i+"] =",spread_int[i]);
      }
     }
   else
     {
      double Ask,Bid;
      Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
      Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
      Comment("Ask = ",Ask,"  Bid = ",Bid);
      SpreadBuffer[rates_total-1]=(Ask-Bid)/Point();
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
Motivazione: