초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1339

 
Kira27 # :
여기요!!! 어디가 잘못됐는지 말해줘 나도 따라잡을 수 없어)

275개의 도구 중 27개의 조각과 스틱을 처리하고 메모리를 차지하며 스크립트를 강제 종료하면 오류 행이 표시됩니다.

만약 이 배열이

   double bufer_MA [];   //Буфер для хендла

그런 다음 사용

         CopyBuffer (MA200, 0 , TimeCurrent (), 5 , bufer_MA ); // заполнение масива bufer_MA хендлом MA200 выбранного тайма

전혀 정확하지 않습니다.

아니면 내가 뭔가를 잘못 이해 했습니까?

 
Alexey Viktorov # :

만약 이 배열이

그런 다음 사용

전혀 정확하지 않습니다.

아니면 내가 뭔가를 잘못 이해 했습니까?

거기에는 잘못된 것이 많다.

 
Alexey Viktorov # :

이 배열의 경우

그런 다음 사용



Пример:



//+------------------------------------------------------------------+ 
//|                                              TestCopyBuffer3.mq5 | 
//|                        Copyright 2009, MetaQuotes Software Corp. | 
//|                                               https://www.mql5.com | 
//+------------------------------------------------------------------+ 
#property copyright "2009, MetaQuotes Software Corp." 
#property link        " https://www.mql5.com " 
#property version    "1.00"
 
#property indicator_separate_window 
#property indicator_buffers 1 
#property indicator_plots    1 
//---- plot MA 
#property indicator_label1    "MA" 
#property indicator_type1    DRAW_LINE 
#property indicator_color1    clrRed 
#property indicator_style1    STYLE_SOLID 
#property indicator_width1    1 
//--- input parameters 
input bool                AsSeries= true ; 
input int                 period= 15 ; 
input ENUM_MA_METHOD      smootMode= MODE_EMA ; 
input ENUM_APPLIED_PRICE price= PRICE_CLOSE ; 
input int                 shift= 0 ; 
//--- indicator buffers 
double                    MABuffer[]; 
int                       ma_handle; 
//+------------------------------------------------------------------+ 
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+ 
int OnInit () 
  { 
//--- indicator buffers mapping 
   SetIndexBuffer ( 0 ,MABuffer, INDICATOR_DATA ); 
   Print ( "Параметр AsSeries = " ,AsSeries); 
   Print ( "Индикаторный буфер после SetIndexBuffer() является таймсерией = " , 
         ArrayGetAsSeries (MABuffer)); 
//--- set short indicator name 
   IndicatorSetString ( INDICATOR_SHORTNAME , "MA(" +period+ ")" +AsSeries); 
//--- set AsSeries (depends on input parameter) 
   ArraySetAsSeries (MABuffer,AsSeries); 
   Print ( "Индикаторный буфер после ArraySetAsSeries(MABuffer,true); является таймсерией = " , 
         ArrayGetAsSeries (MABuffer)); 
//--- 
   ma_handle= iMA ( Symbol (), 0 ,period,shift,smootMode,price); 
   return ( INIT_SUCCEEDED ); 
  } 
//+------------------------------------------------------------------+ 
//| 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[]) 
  { 
//--- check if all data calculated 
   if ( BarsCalculated (ma_handle)<rates_total) return ( 0 ); 
//--- we can copy not all data 
   int to_copy; 
   if (prev_calculated>rates_total || prev_calculated<= 0 ) to_copy=rates_total; 
   else 
     { 
      to_copy=rates_total-prev_calculated; 
       //--- last value is always copied 
      to_copy++; 
     } 
//--- try to copy 
   if ( CopyBuffer (ma_handle, 0 , 0 ,to_copy, MABuffer )<= 0 ) return ( 0 ); 
//--- return value of prev_calculated for next call 
   return (rates_total); 
  } 
//+------------------------------------------------------------------+
 

전혀 옳지 않습니다.

아니면 내가 뭔가를 잘못 이해 했습니까?

왜 틀렸어? 결국 함수의 예에서


복사 버퍼

그래서 그들은 사용

 

Alexey Viktorov # :


아니면 내가 뭔가를 잘못 이해 했습니까?

스크립트의 의미는 MA200 이상의 가격을 결정하기 위해 1분에서 4H까지의 시간대에 시장 시계의 각 상품을 살펴보고 이 사실이 발견되면 가격이 더 높은 기호의 이름으로 경고를 발행하는 것입니다. 6개 기간 모두에서 MA보다 높습니다.

 
Artyom Trishkin # :

거기에는 잘못된 것이 많다.

좀 더 구체적으로, 당신이 상관하지 않는다면)

 
Kira27 # :

좀 더 구체적으로, 당신이 상관하지 않는다면)

배열 인덱싱은 일종의 공포입니다... 루프에서 동일한 데이터 복사 중... 루프에서 새 핸들 생성 - 단어 없음...

나머지도 병신같았어 미안

 
Artyom Trishkin # :

배열 인덱싱은 일종의 공포입니다... 루프에서 동일한 데이터 복사 중... 루프에서 새 핸들 생성 - 단어 없음...

나머지도 병신같았어 미안

배열 인덱싱에 대해 이해하지 못했습니다. 어떤 배열에서 인덱싱이 마음에 들지 않습니까? 43행의 데이터는 CopyBuffer 함수에 의해 1분부터 다른 시간 프레임에 복사됩니다. 4H까지. 처음 5개 막대에 대해 총 5개의 MA 표시기 가격이 복사되고 각 반복에서 핸들과 5개 막대가 있는 배열이 모두 0으로 재설정됩니다.

 ArrayFree (bufer_MA);


그리고 손잡이가 제거됩니다

 IndicatorRelease (MA200); //Удаление хендла

. 다른 방식으로 274개의 기기와 각각을 6개의 시간 프레임으로 처리하는 알고리즘을 제공할 수 있다면 기쁠 것입니다. 내가 프로였다면 아마 질문이 없었을 것이다.

 

다양한 상황에서 핸들을 만드는 것은 비용이 많이 들지 않는 것 같습니다. 사전 로드가 없는 포인터일까요? 주요 작업은 CopyBuffer와 함께 진행됩니다.

루프에서 핸들을 삭제할 필요가 없습니다. 확인할 수 있고 확인해야 합니다. 개인적으로 첫 번째 핸들을 생성할 때만 문제가 있습니다. 이 문제는 Sleep()에 의해 해결되므로 차트가 로드되거나 따옴표 미리 로드

개발자는 이것을 스스로 결정해야합니다. 속도는 OnInit에서 중요하지 않습니다. 우리는 7자를 검색하는 첫 번째 표시기에 대해 이야기하고 있습니다. 오류는 항상 다른 반복에서 나타납니다.

----------

핸들 생성은 어떻게 작동합니까? 특별히 트리거된 주기에서 존재 여부를 확인해야 합니까, 아니면 다른 생성으로 충분합니까(즉, 덮어쓰기)?

 
Fast235 # :

다양한 상황에서 핸들을 생성하는 것은 비용이 많이 들지 않는 것 같습니다. 사전 로드가 없는 포인터입니까? 주요 작업은 CopyBuffer와 함께 진행됩니다.

루프에서 핸들을 삭제할 필요가 없습니다. 확인할 수 있고 확인해야 합니다. 개인적으로 첫 번째 핸들을 생성할 때만 문제가 있습니다. 이 문제는 Sleep()에 의해 해결되므로 차트가 로드되거나 따옴표 미리 로드

개발자는 이것을 스스로 결정해야합니다. 속도는 OnInit에서 중요하지 않습니다. 우리는 7자를 검색하는 첫 번째 표시기에 대해 이야기하고 있습니다. 오류는 항상 다른 반복에서 나타납니다.

----------

핸들 생성은 어떻게 작동합니까? 특별히 트리거된 주기에서 존재 여부를 확인해야 합니까, 아니면 다른 생성으로 충분합니까(즉, 덮어쓰기)?

나와 대화하고 있니? 아니면 여기 전문가들에게 하는 질문입니까?)))

 
Kira27 # :

나와 대화하고 있니? 아니면 여기 전문가들에게 하는 질문입니까?)))

핸들 생성 및 삭제 정보,

작동합니다. 올바른 방법에 관심이 있습니다. 개발자가 말하기를 바랍니다.

사유: