오류, 버그, 질문 - 페이지 1189

 

metaquote, 당신은 나를 끝까지 혼란스럽게했습니다 (

 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-точки привязки
   );
 

30 이후 첫 번째 N ?

최대 30개?

 
sanyooooook :

metaquote, 당신은 나를 끝까지 혼란스럽게했습니다 (

30 이후 첫 번째 N ?

최대 30개?

도움말은 다음과 같이 말합니다.

지정된 플롯 하위 창에서 지정된 이름, 유형 및 초기 좌표를 사용하여 객체를 생성합니다. 생성 시 최대 30개의 좌표를 지정할 수 있습니다.

저것들. 30이 최대입니다. 따라서 알 수 없는 수(N)의 매개변수가 먼저 오고 인덱스가 30인 가장 최근의 매개변수가 옵니다.

 
barabashkakvn :

도움말은 다음과 같이 말합니다.

지정된 플롯 하위 창에서 지정된 이름, 유형 및 초기 좌표를 사용하여 객체를 생성합니다. 생성 시 최대 30개의 좌표를 지정할 수 있습니다.

저것들. 30이 최대입니다. 따라서 알 수 없는 수(N)의 매개변수가 먼저 오고 인덱스가 30인 가장 최근의 매개변수가 옵니다.

일반적으로 N을 쓴 다음 N의 최대 수를 나타냅니다. 여기서 N<=30

추신: 그들은 일반적으로 혼란스러운 대가이며 , 배열을 복사할 때 인덱싱을 한 번만 변경하면 가치가 있습니다.)

또는 여기:

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

상위 5위 안에 있으면 추세선의 첫 번째 좌표가 첫 번째가 아닙니다. 그러나 0이고 적어도 이 정보를 빠르게 찾을 수 있는 곳에서는 이에 대해 언급되지 않습니다.

 
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 디스크를 만들 수 있고 메모리에 파일을 만들 수 있습니다.
분명한. 문제는 터미널 샌드박스가 C 드라이브에 있고 RAM 디스크(예: 드라이브 E)를 생성하더라도 더 이상 샌드박스를 그곳으로 리디렉션할 수 없다는 것입니다.
 
paladin800 :
분명한. 문제는 터미널 샌드박스가 C 드라이브에 있고 RAM 디스크(예: 드라이브 E)를 생성하더라도 더 이상 샌드박스를 그곳으로 리디렉션할 수 없다는 것입니다.

먼저 리디렉션할 수 있습니다.

그리고 WinAPI를 사용하고 리디렉션할 필요가 없는 경우. 둘째, 메모리에 파일을 생성하는 것은 RAM 디스크와 아무 관련이 없지만 WinAPI도 필요합니다.

 

Metaeditor 도움말에서 스프레드 작업의 예를 들었습니다. 스프레드가 1-2 포인트가 아닌 GBPCHF, CADCHF에서 출시되었습니다. 배열이 0으로 채워진 이유를 알려주십시오. 그래서 의도?

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