Mt4 지원 종료. - 페이지 32

 
Vitaly Muzichenko :

설치, 확인, 작동하지 않음

항상 거짓을 준다
당신은 아직 성공했습니까?
 
Реter Konow :
코드를 읽는 방법을 잊어 버린 것을 볼 수 있습니다. )) 그녀는 그것을 어디에서 먹나요?

카라간다에서

 
Dmitry Fedoseev :

카라간다에서

뭔가 헷갈리시죠? 아마도 울란우데에서?
 
George Merts :

정말 그만한 가치가 있는 사람이 있는지 궁금합니다.

나는 16을 가지고 있습니다. 그리고 나는 짐이 너무 큰지 벌써 생각하고 있습니까?

사실, 나는 M15의 최소 시간 프레임을 가지고 있습니다 ... 그러나 여전히 터미널의 부하가 언제 중요해지기 시작하는지 궁금합니다.

고객이 매 틱마다 서버의 모든 기호를 확인하고 스캔하도록 요청합니다. 그리고 많지는 않지만 적지는 않지만 10,230 ... 매복이있는 곳입니다 ...

 
Artyom Trishkin :

고객이 매 틱마다 서버의 모든 기호를 확인하고 스캔하도록 요청합니다. 그리고 많지는 않지만 적지는 않지만 10,230 ... 매복이있는 곳입니다 ...

Market Watch 창의 최대 종목 수 제한이 1024로 제한되었던 걸로 기억합니다. 그런데 지금 뭐, 거기에 있지 않습니까? 10만원 가능할까요?
 
Alexey Viktorov :
뭔가 헷갈리세요? 아마도 울란우데에서?

한 사람이 시장 리뷰에서 실제로 600개의 상품을 가지고 있고 각 상품에 대한 새 막대의 도착과 각 틱 의 각 시간대를 확인하면 비용이 많이 들 수 있다고 생각했습니다...

나 자신은 거래를 하지 않기 때문에 실제로 이 함수를 몇 번이나 호출해야 하는지 정확히 모릅니다.

함수의 인스트루먼트 및 타임프레임에 대한 이중 주기는 심볼 및 타임프레임의 수가 매우 많고 수백 인스트루먼트의 매 틱마다 함수가 호출되는 경우에만 새 막대를 로드할 수 있습니다. 아마도 드미트리가 옳을 것입니다.

함수에서 하나의 루프를 줄였습니다.

 
Vladimir :
Market Watch 창의 최대 종목 수 제한이 1024로 제한되었던 걸로 기억합니다. 그런데 지금 뭐, 거기에 있지 않습니까? 10만원 가능한가요?

매 틱마다 서버의 모든 기호를 확인하고 스캔하도록 요청합니다. 그리고 많지는 않지만 적지는 않지만 10,230 ... 매복이있는 곳입니다 ...

주의... ;)
 

여기에 새로운 옵션이 있습니다. 최종이 아닙니다.

 //+------------------------------------------------------------------+
//|                                                  Новый бар 2.mq4 |
//|                                                      Peter Konow |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Peter Konow"
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
datetime Время_последнего_бара;

int Частота_таймера = 25 ;
int Всех_символов;

string Символы[];
int     Таймфреймы[ 7 ] = { PERIOD_M1 , PERIOD_M5 , PERIOD_M15 , PERIOD_M30 , PERIOD_H1 , PERIOD_H4 , PERIOD_D1 };
int     Всех_таймфреймов = 7 ;


int     Количество_баров[][ 7 ];
bool    События_нового_бара[][ 7 ];

//+------------------------------------------------------------------+
#define M1     0
#define M5     1
#define M15   2
#define M30   3
#define H1     4
#define H4     5
#define D1     6
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  { Alert ( "!!!" );
//--- create timer
   EventSetMillisecondTimer ( 25 );
   //-------------------------------------------------------------
   //Записываем время последнего бара на момент загрузки эксперта.  
   //Для корректного начала работы, робота нужно запустить на М1. 
   //-------------------------------------------------------------
   Время_последнего_бара = Time [ 0 ];
   //-------------------------------------------------------------   
   //Узнаем сколько символов есть в обзоре рынка.
   //---------------------------------------------------------
   Всех_символов = SymbolsTotal ( true );
   //---------------------------------------------------------   
   //Устанавливаем размер массива Символы. Внутри него будут записаны
   //имена всех символов, которые есть в окне обзоре рынка.
   //---------------------------------------------------------
   ArrayResize (Символы,Всех_символов);
   //---------------------------------------------------------
   //Устанавливаем размеры массивов "Количество_баров[]" и "События_нового_бара[]".
   //В массиве "Количество_баров[]" будет записыватся текущее количество баров каждого символа
   //и каждого таймфрейма. А в массиве "События_нового_бара[]" устанавливаться флаги
   //события нового бара для каждого символа и каждого таймфрейма. 
   //---------------------------------------------------------
   ArrayResize (Количество_баров,Всех_символов);
   ArrayResize (События_нового_бара,Всех_символов);
   //---------------------------------------------------------
   //Записываем наименования символов обзора рынка в массив "Символы[]".
   //---------------------------------------------------------
   for ( int a1 = 0 ; a1 < Всех_символов; a1++)
     {
      Символы[a1] = SymbolName (a1 + 1 , true ); 
       //Возможно, нумерация символов в обзора рынка идет с нуля.
       //Тогда: Символы[a1] = SymbolName(a1,true);
     }
   //---------------------------------------------------------
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- destroy timer
   EventKillTimer ();
      
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
{
 static bool Начало_отсчета;
 static int   Минута;
 //---------------------------
 //Нам нужен корректный старт отсчета. Это должно быть время начала бара.
 //---------------------------
 if (!Начало_отсчета && Время_последнего_бара != Time [ 0 ])Начало_отсчета = true ; 
 //--------------------------- 
 if (Начало_отсчета)Минута++;
 //--------------------------- 
 //В следующем цикле, мы будем обращатся к функции iBars для получения количества баров на 
 //каждом из символов и таймфреймов, которые будем проходить в цикле.
 //Далее, будем сравнивать записанное количество баров с текущим и при 
 //наличии разницы установим флаг события нового бара в массив "События_нового_бара[]".
 //---------------------------
 if (Минута*Частота_таймера >= 60000 )
   {
     for ( int a1 = 0 ; a1 < Всех_символов; a1++)
      {
       string Этот_символ = Символы[a1];
       //---------------------------------
       for ( int a2 = 0 ; a2 < Всех_таймфреймов; a2++)
         {
           int Этот_таймфрейм = Таймфреймы[a2];
           //------------------------------------------
           int Текущее_количество_баров = iBars (Этот_символ,Этот_таймфрейм);
           //------------------------------------------
           if (Текущее_количество_баров > Количество_баров[a1][a2])
            {
             //------------------------------------------------------------
             //Если это не самая первая запись в массив Количества баров,
             //то фиксируем событие нового бара.
             //------------------------------------------------------------
             if (Количество_баров[a1][a2])
               {
                События_нового_бара[a1][a2]  = true ;
               } 
             //------------------------------------------------------------
             //Устанавливаем новое значение текущего количества баров.
             //------------------------------------------------------------
             Количество_баров   [a1][a2]  = Текущее_количество_баров;
            }
           //------------------------------------------
         }
      }
     //---------
    Минута = 0 ;
   }
 //-----------------------------------------------
    
}
//+------------------------------------------------------------------+






//---------------------------------------------------------------------
//Функция Новый_бар() принимает наименование символа и таймфрейм.
//Она делает цикл по массиву символов, находит совпадение наименований и 
//с запрашиваемым символом, и далее ищет нужный таймфрейм для получения
//индекса ячейки массива в которой он находится. 
//Найдя индекс ячейки имени нужного символа и индекс ячейки нужного
//таймфрейма, функция обращается к массиву "События_нового_бара" и 
//возвращает факт события нового бара или его отсутствие.
//После возврата флага события, функция снимает этот флаг.
//Следовательно, флаг события можно получить только один раз за бар.
//---------------------------------------------------------------------
bool Новый_бар( string Символ, int Таймфрейм)
{
 bool Новый_бар;
 //-----------------------
 for ( int a1 = 0 ; a1 < Всех_символов; a1++)
   {
     if (Символы[a1] == Символ)
      {
       Новый_бар  = События_нового_бара[a1][Таймфрейм];
       if (Новый_бар)События_нового_бара[a1][Таймфрейм] = 0 ;
       return (Новый_бар);  
      }
   }
 //-----------------------
 return ( false );
}
//--------------------------
//+------------------------------------------------------------------+
 
Реter Konow :
당신은 아직 성공했습니까?

피터, 그건 나도 안 돼. 알고리즘은 매우 빠르지 만 배럴을 헛되이 구동합니다. 실제로 아직 작동하지 않습니다. 이해할 시간이 없습니다.
당신은 이상한 프로그래밍 스타일을 가지고 있습니다. 그리고 OnInit 및 OnTimer의 모든 변수와 주기가 포함된 이 모든 경제를 하나의 프로시저로 밀어넣을 수 있습니다. 누군가가 그것을 사용하고 싶다면이 바디 키트가 발 아래에 방해가 될 것입니다. 그리고 같은 바디킷으로 20가지 비슷한 시술이 있다면? 결국 , 여기에서 구현됩니다.

 
Реter Konow :

한 사람이 시장 리뷰에서 실제로 600개의 상품을 가지고 있고 각 상품에 대한 새 막대의 도착과 각 틱 의 각 시간대를 확인하면 비용이 많이 들 수 있다고 생각했습니다...

나 자신은 거래를 하지 않기 때문에 실제로 이 함수를 몇 번이나 호출해야 하는지 정확히 모릅니다.

함수의 인스트루먼트 및 타임프레임에 대한 이중 주기는 심볼 및 타임프레임의 수가 매우 많고 수백 인스트루먼트의 매 틱마다 함수가 호출되는 경우에만 새 막대를 로드할 수 있습니다. 아마도 드미트리가 옳을 것입니다.

함수에서 하나의 루프를 줄였습니다.

Galina의 코드 를 보면 코드에서 개선할 수 있는 점에 대해 생각할 수 있습니다.

감사합니다.