Ошибки, баги, вопросы - страница 1189

 

метаквоты, Вы меня в конец запутали (

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 после 30 ?

30 максимум?

 
sanyooooook:

метаквоты, Вы меня в конец запутали (

сначала N после 30 ?

30 максимум?

В справке указанно: 

Создает объект с указанным именем, типом и начальными координатами в указанном подокне графика. При создании можно указать до 30 координат.

Т.е. 30 - это максимум. Поэтому сначала идет неизвестное количество (N) параметров и самый последний параметр с индексом 30.

 
barabashkakvn:

В справке указанно: 

Создает объект с указанным именем, типом и начальными координатами в указанном подокне графика. При создании можно указать до 30 координат.

Т.е. 30 - это максимум. Поэтому сначала идет неизвестное количество (N) параметров и самый последний параметр с индексом 30.

обычно пишут N, а после указывают максимальное количество N, где N<=30

ЗЫ: они вообще мастера запутывать, одна только смена индексации, при копировании массива, чего стоит  )

или вот:

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

оказывается на пятёрке первая координата линии тренда это не первая. а нулевая, и ни где об этом не сказано, по крайней мере там где можно быстро найти эту инфу.

 
sanyooooook:
обычно пишут N, а после указывают максимальное количество N, где N<=30

Не в данном контексте. Здесь не описание условий, а наименование переменных. И в названии переменной нужно отразить максимально допустимый индекс. Поэтому последние переменные идут с индексом 30:

   datetime     time30=0,      // время 30-й точки привязки
   double       price30=0      // цена 30-точки привязки
 
paladin800:
Можно ли как-нибудь сделать так чтоб работая с файловыми операциями файлы записывались/считывались не на диске а в оперативной памяти RAM, чтоб быстрее и без дыр работалось?
Можно сделать RAM диск, можно создавать файл в памяти.
 
barabashkakvn:

Не в данном контексте. Здесь не описание условий, а наименование переменных. И в названии переменной нужно отразить максимально допустимый индекс. Поэтому последние переменные идут с индексом 30:

во всех учебниках по математике пишут так как я привёл выше, указывают N а после задают этому N значение не больше 30
 

вот же в справке в четвёрке у них нормально написано:

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:
Можно сделать RAM диск, можно создавать файл в памяти.
Понятно. Облом в том, что песочница терминалов находится на диске С и даже если создам RAM-диск (например диск Е), то туда уже не удастся перенаправить песочницу.
 
paladin800:
Понятно. Облом в том, что песочница терминалов находится на диске С и даже если создам RAM-диск (например диск Е), то туда уже не удастся перенаправить песочницу.

Во-первых перенаправить можно.

А если использовать WinAPI и перенаправлять не надо. Во-вторых создание файлов в памяти не имеет никакого отношения к RAM-дискам, правда WinAPIтоже надо.

 

Из справки Metaeditor взял пример работы со спредом. Запускал на GBPCHF, CADCHF, на которых спред не 1-2пункта. Подскажите, почему массив заполнен нулями? Так задумано?

#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);
  }
Причина обращения: