Информационный индикатор позиций, сделок и ордеров. - страница 5

 

Советник, основной обработчик тиков (фрагмент кода).

//----- Блок для проверки обмена с индикатором
//1. Цикл проверки заданий и постановки на выполнение. Перебираем все команды от 1 до N. Для каждой:
//    //1.0. Если канал занят BuseInd_N=1, - не используем ибо используется в индикаторе, чтобы не выдавать новую команду до окончания обработки предыдущей.
//    1.1. Если обнаружена команда N: Command_N=N, то выполняем:
//       1.1.1. Если снят флаг завершения Ready_N=0, то выполняем:
//          1.1.1.1. Сбрасываем команду Command_N=0
//          1.1.1.2. Сбрасываем для советника внутренний флаг завершения команды N: ReadyExp_N=0; (изначально все эти флаги сброшены, но на всякий)
//          1.1.1.3. Запускаем команду на выполнение (после выполнения команды должен быть установлен внутренний флаг выполнения команды N: ReadyExp_N=1;
//          //В результате должно быть: Ready_N=0 (сброшено индикатором), Command_N=0 (сброшено советниом), ReadyExp_N=0??? (сброшено советником)
//          //Ситуация Ready_N=0 + Command_N=0, говорит о том, что команда запущена на выполнение, но ещё не выполнена.
   datetime TimeSet=0;
   ulong    CommandGet=0;
   ulong    ReadyGet=0;
   {for(int i=1;i<=2;i++)//Перебор типов Команд
   {
      {for(int j=0;j<=1;j++)//Перебор типов Позиций
      {
         {if(GlobalGetUlong("LIP_"+TheSymbol+"_Command_"+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)),CommandGet)
            &&(CommandGet==CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)))                                        //Если обнаружена команда N: Command_N=N
         {
            {if(GlobalGetUlong("LIP_"+TheSymbol+"_Ready_"+IntegerToString(CommandGet),ReadyGet)&&(ReadyGet==0))         //Если снят флаг завершения Ready_N=0
            {
               {if(GlobalSetUlong("LIP_"+TheSymbol+"_Command_"+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)),TimeSet,0))//Сбрасываем команду Command_N=0
               {
                  ReadyExp[(int)CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)]=0;               //Сбрасываем для советника внутренний флаг завершения команды N: ReadyExp_N=0
                  RunCommand[(int)CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)]=true;          //Имитация запуска команды
                  if(PrintDebug)Print("Сов запущена команда "+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j))+" ");
               }}//if(GlobalSetUlong("LIP_"+TheSymbol+"_Command_"+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)),TimeSet,0)
            }}//if(GlobalGetUlong("LIP_"+TheSymbol+"_Ready_"+IntegerToString(CommandGet),ReadyGet)&&(ReadyGet==0))
         }}//if(GlobalGetUlong("LIP_"+TheSymbol+"_Command_"+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)),CommandGet)
      }}//for(int j=0;i<=1;i++)
   }}//for(int i=1;i<=2;i++)
//2. Цикл проверки выполнения. Перебираем все команды от 1 до N. Для каждой:
//    2.1. Если установлен внутренний флаг завершения команды N: ReadyExp_N=1, то выполняем:
//       2.1.1. Устанавливается флаг завершения Ready_N=1 для переменной Ready_N (команда N выполнена)
//       2.1.2. Сбрасываем для советника внутренний флаг завершения команды N: ReadyExp_N=0; 
//       //В результате должно быть: Ready_N=1 (установлено советником), Command_N=0 (сброшено советниом), ReadyExp_N=0 (сброшено советником)
   {for(int i=1;i<=2;i++)//Перебор типов Команд
   {
      {for(int j=0;j<=1;j++)//Перебор типов Позиций
      {
         {if(ReadyExp[(int)CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)]==1)                   //Если установлен внутренний флаг завершения команды N: ReadyExp_N=1
         {
            {if(GlobalSetUlong("LIP_"+TheSymbol+"_Ready_"+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)),TimeSet,1))//Устанавливается флаг завершения Ready_N=1
            {
               ReadyExp[(int)CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)]=0;               //Сбрасываем для советника внутренний флаг завершения команды N: ReadyExp_N=0
               if(PrintDebug)Print("Сов завершена команда "+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j))+" ");
            }}//if(GlobalSetUlong("LIP_"+TheSymbol+"_Ready_"+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)),TimeSet,1)
         }}//if(ReadyExp[(int)CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)]==1)
      }}//for(int j=0;i<=1;i++)
   }}//for(int i=1;i<=2;i++)
//----- Цикл имитации выполнения.
   {for(int i=1;i<=4;i++)//Перебор Команд
   {
      {if(RunCommand[i])
      {
         if(PrintInfo)Print("Сов выполнена команда>>"+IntegerToString(i)+" gnTick="+IntegerToString(gnTick));
         ReadyExp[i]=1;               //Устанавливаем для советника внутренний флаг завершения команды N: ReadyExp_N=1
         RunCommand[i]=false;
      }}//if(RunCommand[i])
   }}//for(int i=1;i<=4;i++)

 

Состояние проекта на текущий момент.

Файлы:
LIP_v01.005.zip  44 kb
 

Работа по проекту будет продолжена.

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

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

Где живёт индикатор созданный в режиме тестирования без визуализации?

https://www.mql5.com/ru/forum/217719

демо пример для параллельной работы во вложении.

Где живёт индикатор созданный в режиме тестирования без визуализации?
Где живёт индикатор созданный в режиме тестирования без визуализации?
  • 2017.10.17
  • www.mql5.com
Если советником создается индикатор (например через iCustom()) в режиме тестирования с визуализацией или в режиме реальной работы, то индикатор жив...
Файлы:
Temp.zip  9 kb
 

По данной теме создан общедоступный проект LIP.

Текущая версия индикатора v1.006.

Проводится локализация на английский.

Вид экрана:

Lip_Screen_01

Окно настроек:

Lip_Screen_02

Конструктивная критика приветствуется.

Файлы:
LIP_v01.006.zip  25 kb
Причина обращения: