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

 
Artyom Trishkin :
바[]
가능하시면 코드를 보여주세요.
 
Vitaly Muzichenko :

Bars 라고 불리는 컴파일러는 세상이 의미하는 바를 꾸짖었습니다. 이 디자인을 테스트했습니까? 아니면 작동해야 한다고 가정했습니까? 아니면 제가 뭔가 잘못하고 있습니까?

네, 제 실수입니다. 이름 막대. 일반적으로 아이디어는 변수에 표현 가능한 이름을 부여하는 것이므로 추가 변수를 만들 필요가 없으며 그 존재가 항상 정당화되는 것은 아닙니다.
 
Vasiliy Sokolov :
네, 제 실수입니다. 이름 막대. 일반적으로 아이디어는 변수에 표현 가능한 이름을 부여하는 것이므로 추가 변수를 만들 필요가 없으며 그 존재가 항상 정당화되는 것은 아닙니다.

나는 무언가를 표현하기 위해 호출한 것이 아니라 작업할 때 코드를 단축하기 위해 호출했습니다.

if (open1<close1 && close2>close3 && close1>close2 &&

글쎄, 같은 맥락에서 더 나아가, 그렇지 않으면 - 선의 길이가 증가합니다

설명해주셔서 감사합니다!

 
Vitaly Muzichenko :

나는 무언가를 표현하기 위해 호출한 것이 아니라 작업할 때 코드를 단축하기 위해 호출했습니다.

if (open1<close1 && close2>close3 && close1>close2 &&

글쎄, 같은 맥락에서 더 나아가, 그렇지 않으면 - 선의 길이가 증가합니다

설명해주셔서 감사합니다!

코드를 최소한으로 유지하려면 데이터 배열을 직접 참조하십시오.

//+------------------------------------------------------------------+
//|                                                       test09.mq5 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link        "https://www.mql5.com/ru/users/sergey1294"
#property version    "1.00"

MqlRates bars[]; // массив для хранения данных цен OHLC
int start_bar= 0 ; // с какого бара копируем
int count_bar=4; // сколько баров копируем
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   ArraySetAsSeries (bars, true );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if ( CopyRates ( Symbol (), PERIOD_CURRENT , start_bar, count_bar, bars)<count_bar) return ;
  
   if (bars[ 1 ].open<bars[ 1 ].close && bars[ 2 ].close>bars[ 3 ].close && bars[ 1 ].close>bars[ 2 ].close)
   {
  
   }
  }
//+------------------------------------------------------------------+

...
 

안녕하세요!

Expert Advisor를 언로드(삭제)할 때 배치된 주문 및 열린 위치 를 삭제하는 위치와 방법은 무엇입니까? 쉬운 경우 예를 공유하십시오.

고맙습니다.

 

고문 중 한 명이 이상한 말을 하고 있습니다. 어드바이저는 정상적으로 테스트되며 "단일 테스트 시작"을 클릭하면 처음으로 하나의 단일 테스트만 실행됩니다. 또한 단일 테스트를 클릭하거나 최적화에서 라인을 클릭하면 로그에 다음이 표시됩니다.

2017.02.08 13:31:05.165 테스터는 합격에 대한 입력을 얻을 수 없습니다 4234087422336

2017.02.08 13:31:34.829 테스터는 합격에 대한 입력을 얻을 수 없습니다 4076312468706

2017.02.08 13:31:47.973 테스터가 1004506640527 합격에 대한 입력을 받을 수 없습니다.

나머지 어드바이저는 정상적으로 작동합니다. 뭐가 될수 있었는지?

 

여러분, 저는 10000 * 10000의 거대한 행렬을 쓰고 있습니다

       if (count== 0 )
        {
         //--- запишем файл
          ResetLastError ();
         int handle= FileOpen (path, FILE_READ | FILE_WRITE | FILE_BIN );
         //---
         if (handle!= INVALID_HANDLE )
           {
             for ( int z=ARRAY_SIZE_Y; z> 0 ; z--) // Перебор по барам, колонка Y
              {
               for ( int q= 0 ; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                 // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek (handle, 0 , SEEK_END );
               FileWriteArray (handle,arra);
              }
             FileClose (handle);
           }
         else
             Print ( "Failed to open the file, error " , GetLastError (), " handle " ,handle);
         //---
         count= 1 ;
        }

이 알고리즘이 속도 면에서 효율적이라고 생각하십니까?

1000 * 1000 행렬의 경우 속도가 몇 초이므로 10000 * 10000으로 증가하면 시스템이 시작됩니다.

 
Top2n :

여러분, 저는 10000 * 10000의 거대한 행렬을 쓰고 있습니다

       if (count== 0 )
        {
         //--- запишем файл
          ResetLastError ();
         int handle= FileOpen (path, FILE_READ | FILE_WRITE | FILE_BIN );
         //---
         if (handle!= INVALID_HANDLE )
           {
             for ( int z=ARRAY_SIZE_Y; z> 0 ; z--) // Перебор по барам, колонка Y
              {
               for ( int q= 0 ; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                 // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek (handle, 0 , SEEK_END );
               FileWriteArray (handle,arra);
              }
             FileClose (handle);
           }
         else
             Print ( "Failed to open the file, error " , GetLastError (), " handle " ,handle);
         //---
         count= 1 ;
        }

이 알고리즘이 속도 면에서 효율적이라고 생각하십니까?

1000 * 1000 행렬의 경우 속도가 몇 초이므로 10000 * 10000으로 증가하면 시스템이 시작됩니다.

4차원 배열 만 허용되는 경우 이러한 행렬을 얻을 수 있는 방법은 무엇입니까?
뭔가 헷갈리시죠?
Документация по MQL5: Операции с массивами
Документация по MQL5: Операции с массивами
  • www.mql5.com
Операции с массивами - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov :
4차원 배열 만 허용되는 경우 이러한 행렬을 얻을 수 있는 방법은 무엇입니까?
뭔가 헷갈리시죠?

10000 x 10000은 2차원 아닌가요?

double arr[ 10000 ][ 10000 ];

등...

 
Alexey Viktorov :
4차원 배열 만 허용되는 경우 이러한 행렬을 얻을 수 있는 방법은 무엇입니까?
뭔가 헷갈리시죠?
글쎄요, 그것은 2차원입니다. 어떻게 든 저는 그것을 그렇게 말하는 것이 아닙니다. 분명히 행렬이 아니라 배열입니다. 행렬이 다차원성을 의미합니까?
사유: