Одновременный запуск более одного советника на одном инструменте - страница 2

 
Мой подход не очень нравится... Можно объединить 2, максимум 3, советника и то с большим геморроем...
Может есть идея более оптимального решения.
 
kharko писал(а) >>
неужели этот вопрос мало кого волнует...

извращенцев не так уж и много.

 
Запиши в файл кривые эквити. Прямо в советнике. Сделай отключаемую опцию. Чтобы использовать только при прогоне "избранных".
Потом черкани копеечный скрипт, который все эти кривые просуммирует и выведет в файл. Заодно засунь туда вывод статистики какой тебе нада.
Если интересует только статистика - можно даже сумму в файл не писать.
И псё.
 
kharko >>:
Мой подход не очень нравится... Можно объединить 2, максимум 3, советника и то с большим геморроем...
Может есть идея более оптимального решения.


  Можно объединить хоть 10. Но устанавливать флаги чья очередь работать. Соответственно работать они будут через число тиков равное числу советников.
 
kharko писал(а) >>
неужели этот вопрос мало кого волнует...
Меня волнует. Особенно в последнее время.


kharko >>:
Зачем нужно тестирование более одного советника?
  

Отвечаю тем кто этого пока не понимает:
Это необходимо для тестирования портфелей. Ситуация: есть два робота каждый из которых успешно торгует на восьми инструментах. => Существует 16 (!) систем торговли. Если максимальная просадка по каждой из системе приблизительно равна 10%, то 16 систем будут давать просадку вовсе не 160%, как кое-кто может подумать, а совсем другую величину. Какую можно узнать только при тестировании портфеля.

Далее, формулы управления капиталом изменяют системы кардинальным образом. При этом УК оперируют общей балансовой стоимостью. Какую лепту в баланс вносит каждая из систем можно рассчитать только при торговле портфелем. Полноценно сделать это в MQL4 невозможно, можно сделать только очень приблизительно и это очень геморойное занятие.

 
C-4 >>:
Меня волнует. Особенно в последнее время.
Отвечаю тем кто этого пока не понимает:

Это необходимо для тестирования портфелей. Ситуация: есть два робота каждый из которых успешно торгует на восьми инструментах. => Существует 16 (!) систем торговли. Если максимальная просадка по каждой из системе приблизительно равна 10%, то 16 систем будут давать просадку вовсе не 160%, как кое-кто может подумать, а совсем другую величину. Какую можно узнать только при тестировании портфеля.
Далее, формулы управления капиталом изменяют системы кардинальным образом. При этом УК оперируют общей балансовой стоимостью. Какую лепту в баланс вносит каждая из систем можно рассчитать только при торговле портфелем. Полноценно сделать это в MQL4 невозможно, можно сделать только очень приблизительно и это очень геморойное занятие.

Тебе на МТ5. У топикстартера всё гораздо проще.

 
Мое решение задачи...
extern int Counter      = 0;        // Счетчик прогонов
extern int Magic_№.count= 10;       // Количество одновременно тестируемых стратегий
string Filename       = "data.txt"; // Имя файла с параметрами

....
....

int FilePtr=0;             // Положение файлового указателя
int Parameters[][12];      // Запись параметров эксперта для одного прогона

int init ()
{
   ArrayResize(Parameters,Magic_№.count);
   ArrayInitialize(Parameters,0);
   
   if(IsOptimization() && Counter>0)
   {
      if (GlobalVariableCheck("FilePtr")==false || Counter == 1) 
      {
         FilePtr = 0; 
         GlobalVariableSet("FilePtr",0); 
      } 
      else 
      {
         FilePtr = GlobalVariableGet("FilePtr"); 
      }

      if(Filename!="")
      {
         int handle=FileOpen(Filename,FILE_CSV|FILE_READ,';');
         if(handle!=-1)
         {
            FileSeek(handle,FilePtr, SEEK_SET);
            for(int i=0;i<Magic_№.count;i++)
            {
               for(int j=0;j<12;j++)
                  Parameters[i][j]=StrToInteger(FileReadString(handle));
            }
            FilePtr = FileTell(handle); 
            GlobalVariableSet("FilePtr",FilePtr);
      
            FileClose(handle); 
         }
      }
   }
//---
   return(0);
}
//-----------------------------------------------------------------
int start ()
{
int start()
{
//----
   for(int i=0;i<Magic_№.count;i++)
   {
      Magic_№     = Parameters[i][0];
      Parameter1  = Parameters[i][1];
      Parameter2  = Parameters[i][1];
      Parameter3  = Parameters[i][1];
      Parameter4  = Parameters[i][1];
      Parameter5  = Parameters[i][1];
      Parameter6  = Parameters[i][1];
      Parameter7  = Parameters[i][1];
      Parameter8  = Parameters[i][1];
      Parameter9  = Parameters[i][1];
      Parameter10 = Parameters[i][1];
      Parameter11 = Parameters[i][1];

      if(Digits==3 || Digits==5)
      {
         Parameter1 *=10;
         Parameter2 *=10;
         ....
      }
      manager();
   }
//---
   return(0);
}
Какие Ваши варианты?
 
MetaDriver >>:

Тебе на МТ5. У топикстартера всё гораздо проще.

Пока фьючи не подключат я еще на четверке посижу. 

 
kharko >>:
Есть задача...
Имеется несколько советников или один советник с разными параметрами. Требуется проверить на истории их одновременную работу на одном инструменте, т.е. получить отчет о торговле...
Кто-то работал над этим?
Если "да", то какой алгоритм решения использовали?


создаешь заголовочные файлы (расширение *.mqh),например, Sovetnic_1.mqh, Sovetnic_2.mqh, ...,Sovetnic_n.mqh в них необходимо поместить алгоритмы советников, соответственно, в заголовочных файлах вызов советников будет происходить не через функция start(), а через пользовательскую функцию, например, void Sovetnic_1(),void Sovetnic_2(), ...,void Sovetnic_n() 
Затем создаешь новый эксперт:

extern int  Sovetnic_1=1;
extern int  Sovetnic_2=1;
...
extern int  Sovetnic_n=1;

#include < Sovetnic_1.mqh>
#include < Sovetnic_2.mqh>
...
#include < Sovetnic_n.mqh>

int start()
{

if (Sovetnic_1==1){
Sovetnic_1();
}
if (Sovetnic_2==1){
Sovetnic_2();
}
...
if (Sovetnic_n==1){
Sovetnic_n();
}
 return(0);
}
Условие корректной работы данной схемы:
  •  советники должны быть "разведены" по OrderMagicNumber();
  • Имена внешних переменных, пользовательских функций внутри советников не  должны совпадать (одинаковые не пропустит компилятор,легко исправить с помощью автозамены ) .
 
C-4 >>:

Пока фьючи не подключат я еще на четверке посижу.

А разве под MT5 у кого-то реал доступен?

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