Erros, bugs, perguntas - página 1189

 

meta-cotações, confundem-me completamente (

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 após 30 primeiro ?

30 max?

 
sanyooooook:

meta-cotações, confundiu-me completamente (

N após 30 primeiro ?

30 max?

A ajuda especifica:

Cria um objecto com o nome, tipo e coordenadas iniciais especificados na sub-janela especificada do gráfico. É possível especificar até 30 coordenadas ao criá-lo.

Isto é, 30 é o máximo. Assim, primeiro vem um número desconhecido (N) de parâmetros e o último parâmetro com índice 30.

 
barabashkakvn:

A ajuda especifica:

Cria um objecto com o nome, tipo e coordenadas iniciais especificados na sub-janela especificada do gráfico. Podem ser especificadas até 30 coordenadas durante a criação.

Isto é, 30 é o máximo. Assim, primeiro vem um número desconhecido (N) de parâmetros e o último parâmetro com índice 30.

Normalmente escrevem N, e depois especificam o número máximo N onde N<=30

SZZ: são mestres da confusão: uma única alteração de indexação, quando se copia uma matriz, não custa nada )

ou isto:

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

acontece que a primeira coordenada da linha de tendência não é a primeira, mas zero, e em lado nenhum diz que, pelo menos onde se pode encontrar rapidamente esta informação.

 
sanyooooook:
normalmente escreve N, e depois disso especifica o N máximo onde N<=30

Não neste contexto. Isto não é uma descrição das condições, mas um nome variável. E o nome da variável deve reflectir o índice máximo admissível. Esta é a razão pela qual as últimas variáveis vão com o índice 30:

   datetime     time30=0,      // время 30-й точки привязки
   double       price30=0      // цена 30-точки привязки
 
paladin800:
Existe alguma forma de fazer operações de arquivo gravar/ler arquivos não em disco mas em RAM para trabalhar mais rápido e sem buracos?
Pode fazer um disco RAM, pode criar um ficheiro na memória.
 
barabashkakvn:

Não neste contexto. Isto não é uma descrição das condições, mas um nome variável. E o nome da variável deve reflectir o índice máximo admissível. Portanto, as últimas variáveis vão com um índice de 30:

Em todos os livros de matemática escrevem-no como mencionei acima, especificam N e depois dão a este N um valor não superior a 30.
 

Têm-no bem na referência no quad:

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:
Pode fazer um disco RAM, pode criar um ficheiro na memória.
Estou a ver. O problema é que a caixa de areia terminal está na unidade C e mesmo que eu crie uma unidade RAM (por exemplo, unidade E), não é possível redireccionar a caixa de areia para lá.
 
paladin800:
Estou a ver. O problema é que a caixa de areia dos terminais está localizada na unidade C e mesmo que eu crie uma unidade RAM (por exemplo, unidade E), não posso redireccionar a caixa de areia para lá.

Antes de mais, é possível redireccioná-lo.

E se utilizar WinAPI, também não precisa de redireccionar. Em segundo lugar, a criação de ficheiros em memória não tem nada a ver com discos RAM, embora o WinAPI também seja necessário.

 

Usei a ajuda do Metaeditor para dar um exemplo de como trabalhar com a propagação. Fi-lo em GBPCHF, CADCHF em que o spread não é de 1-2 pips. Pode dizer-me porque é que o conjunto está cheio de zeros? Está concebido dessa forma?

#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);
  }