Помощь в создании скринера - страница 2

 
diegotfcastro:

Без сомнения, продукт, который вы разработали, лучший на рынке, он очень быстрый. Очень круто, это самое лучшее! Но у меня нет денег, чтобы его купить, и я просто хочу часть этого решения, поэтому я пытаюсь создать его. Но пока что я делал очень медленно, очень плохо.

Если чем-то могу помочь, говорите

 
Dmitry Fedoseev:
Не обязательно делать это в индикаторе, можно в эксперте и не будет виснуть.

к тому индикаторы простые и взаимосвязанные, один по другому, можно без хендлов считать, в скользящем окне. 

для 1000 инструментов всё одно непросто, там засада не в числе хендлов или аллоцированных ресурсов, (их можно просто купить проц покруче, памяти побольше)

с синхронизацией и интерпретацией пропусков сложность - один и тот-же бар начинается в разное время и этого/такого бара на других инструментах может и не быть.

 
Maxim Kuznetsov:

к тому индикаторы простые и взаимосвязанные, один по другому, можно без хендлов считать, в скользящем окне. 

для 1000 инструментов всё одно непросто, там засада не в числе хендлов или аллоцированных ресурсов, (их можно просто купить проц покруче, памяти побольше)

с синхронизацией и интерпретацией пропусков сложность - один и тот-же бар начинается в разное время и этого/такого бара на других инструментах может и не быть.

Смотря какой таймфрем. Если H4, то 10 минут - не страшно. В любом случае, будут быстро понято, что в тысяче инструменов нет необходимости.

 
Andrey Khatimlianskii:

Se eu puder te ajudar, diga

Я просто хочу запустить скрипт, который просматривает все активы брокера и информирует меня о тех, у которых короткая скользящая средняя выше длинной скользящей средней. Мне не нужно ничего визуального, только сценарий. Затем я сгенерирую CSV-файл с результатом.

 
diegotfcastro:

Я просто хочу запустить скрипт, который просматривает все активы брокера и информирует меня о тех, у которых короткая скользящая средняя выше длинной скользящей средней. Мне не нужно ничего визуального, только сценарий. Затем я сгенерирую CSV-файл с результатом.

Покажите ваш код и опишите, где возникает проблема.

 
Andrey Khatimlianskii:

Покажите ваш код и опишите, где возникает проблема.

Мой код работает очень медленно, на анализ уходит несколько часов.


//+------------------------------------------------------------------+
//|                                               Escavador Demo.mq5 |
//|                                                            Brave |
//|                                     https://www.invistabrave.com |
//+------------------------------------------------------------------+

int                Periodo        = 2;           // Período
ENUM_APPLIED_PRICE Preco          = PRICE_CLOSE; // Preço Aplicado
double             LimiteSup      = 75;          // Limite Superior
double             LimiteInf      = 25;          // Limite Inferior

int handle,filehandle;
string   filename;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {

   filename = TimeToString(TimeLocal(),TIME_DATE)+"_IFR.csv";
   filehandle = FileOpen(filename,FILE_WRITE|FILE_CSV,'\t');

   if(filehandle!=INVALID_HANDLE)
     {
      FileWrite(filehandle,"Ativo",",","Resultado");
      Print("Início da exportação.");
     }
   else
      Print("Erro de gerenciamento de arquivo! Erro = ",GetLastError());

   int totalAtivoMercado = SymbolsTotal(true);
   Print("quantidade de ativo na observação do mercado = ",totalAtivoMercado);


   int totalAtivosCorretora = SymbolsTotal(false);
   Print("total de ativos na corretora= ",totalAtivosCorretora);

// array com nomes das opções
   string symbols[];

// loop nos ativos
   for(int i=0; i<totalAtivosCorretora; i++)
     {

      string symbolName = SymbolName(i,false);
      string symb = SymbolInfoString(symbolName, SYMBOL_PATH);

      // filtra pelo nome
      if(StringFind(symb,"BOVESPA") != -1)
        {
         //
         int size = ArraySize(symbols);
         ArrayResize(symbols,size+1);
         symbols[size] = symbolName;

        }
     }

//
   Print("Capturando informações...");
   Sleep(2000);

//
   int size2 = ArraySize(symbols);
   for(int i=0; i<size2; i++)
     {

      SymbolSelect(symbols[i],true);

      handle = iRSI(symbols[i], _Period, Periodo, Preco);

      int resultado = RSI();

      Print(symbols[i],
            ",",
            resultado);

      if(filehandle!=INVALID_HANDLE)
        {


         FileWrite(filehandle,
                   symbols[i],
                   ",",
                   resultado
                  );
        }
      else
         Print("Gravação de TXT falhou! Erro = ",GetLastError());

      // remover o ativo da Observação de mercado
      SymbolSelect(symbols[i],false);
      Sleep(1000);
     }
  }
//+------------------------------------------------------------------+
int RSI()
  {

   double ifr[];
   ArraySetAsSeries(ifr, true);
   CopyBuffer(handle, 0, 1, 2, ifr);

   if(ifr[1] >= LimiteInf  && ifr[0] < LimiteInf)
      return 1;
   if(ifr[1] < LimiteSup && ifr[0] > LimiteSup)
      return -1;

   return 0;
  }
//+------------------------------------------------------------------+
 
diegotfcastro:

Мой код работает очень медленно, на анализ уходит несколько часов.


Смотрите, что первое: Print пишет и может гигабайты использовать

Sleep тоже сами тормозите EA

Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Print - Общие функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
diegotfcastro:

Мой код работает очень медленно, на анализ уходит несколько часов.


1. Сколько инструментов вы анализируете?

2. Зачем каждый раз делаете SymbolSelect( true ) и SymbolSelect(false)?

3. Sleep(1000) добавляет задержку, равную "количество инструментов * секунду", его нужно  убрать.

4. Запустите свой скрипт в профилировщике, и посмотрите, что работает медленнее всего.

 
diegotfcastro:

Мой код работает очень медленно, на анализ уходит несколько часов.


уберите Sleep

массив со списком символов создайте один раз (можно в OnInit()), а не на каждом тике заново

Причина обращения: