Errores, fallos, preguntas - página 1189

 

meta-citas, me tienes completamente confundido (

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 después de los 30 primeros?

¿30 como máximo?

 
sanyooooook:

methaquotas, me tienes completamente confundido (

¿N después de los 30 primeros?

¿30 como máximo?

La ayuda especifica:

Crea un objeto con el nombre, el tipo y las coordenadas iniciales especificadas en la subventana especificada del gráfico. Puede especificar hasta 30 coordenadas al crearlo.

Es decir, 30 es el máximo. Así que primero viene un número desconocido (N) de parámetros y el último parámetro con índice 30.

 
barabashkakvn:

La ayuda especifica:

Crea un objeto con el nombre, el tipo y las coordenadas iniciales especificadas en la subventana especificada del gráfico. Se pueden especificar hasta 30 coordenadas durante la creación.

Es decir, 30 es el máximo. Así que primero viene un número desconocido (N) de parámetros y el último parámetro con índice 30.

Normalmente se escribe N, y después se especifica el número máximo N donde N<=30

SZZ: son maestros de la confusión: un solo cambio de indexación, al copiar un array, no cuesta nada )

o esto:

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

resulta que la primera coordenada de la línea de tendencia no es la primera. sino el cero, y en ningún sitio lo dice, al menos donde se pueda encontrar rápidamente esta información.

 
sanyooooook:
normalmente se escribe N, y después se especifica el máximo N donde N<=30

No en este contexto. No se trata de una descripción de condiciones, sino de un nombre de variable. Y el nombre de la variable debe reflejar el índice máximo permitido. Por eso las últimas variables van con el índice 30:

   datetime     time30=0,      // время 30-й точки привязки
   double       price30=0      // цена 30-точки привязки
 
paladin800:
¿Hay alguna manera de hacer que las operaciones de archivo escriban/lean archivos no en el disco sino en la RAM para que funcionen más rápido y sin agujeros?
Puedes hacer un disco RAM, puedes crear un archivo en la memoria.
 
barabashkakvn:

No en este contexto. No se trata de una descripción de condiciones, sino de un nombre de variable. Y el nombre de la variable debe reflejar el índice máximo permitido. Por lo tanto, las últimas variables van con un índice de 30:

En todos los libros de texto de matemáticas lo escriben como he mencionado anteriormente, especifican N y luego le dan a este N un valor no superior a 30.
 

Lo tienen como referencia en el cuadrante:

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:
Puedes hacer un disco RAM, puedes crear un archivo en la memoria.
Ya veo. El problema es que el sandbox del terminal está en la unidad C y aunque cree una unidad RAM (por ejemplo, la unidad E), no es posible redirigir el sandbox allí.
 
paladin800:
Ya veo. El problema es que el sandbox de los terminales se encuentra en la unidad C y aunque cree una unidad RAM (por ejemplo, la unidad E), no puedo redirigir el sandbox allí.

En primer lugar, es posible redirigirlo.

Y si usas WinAPI, tampoco necesitas redireccionar. En segundo lugar, la creación de archivos en memoria no tiene nada que ver con los discos RAM, aunque WinAPI también es necesario.

 

Utilicé la ayuda de Metaeditor para tomar un ejemplo de cómo trabajar con la extensión. Lo ejecuté en GBPCHF, CADCHF en los que el spread no es de 1-2 pips. ¿Puedes decirme por qué la matriz se llena de ceros? ¿Está diseñado así?

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