Код платформы многовалютного многотаймфреймового советника

 
Хочу предложить на обсуждение свой код платформы многовалютного многотаймфреймового советника. Цель - конструктивная критика, предложения по улучшению. Тема представляет интерес?
 
Может что нибудь по проще, не код платформы,а хотя бы индикатор с такими характеристиками (шаблон). Мне было бы интересно
 
Prival писал(а) >>
Может что нибудь по проще, не код платформы,а хотя бы индикатор с такими характеристиками (шаблон). Мне было бы интересно

Да, платформа это громко сказано (хотя верно по сути). Можно и шаблоном назвать. Т.к. этот кусок кода общий для всех. А блоки тактик каждый накапливает и вставляет свои.

 

давай посмотрим конешно

можно и без кода на словах принцип построения

 

Самый верхний модуль:

int init() { return(0); }
int deinit() { return(0); }

//=========================================================================================================================
int start()
{
startustanovki(); // начальные установки
while(!IsStopped()) // До тех пор, пока пользователь не прекратит исполнение программы
{
kontrol(); // контрольные функции
SymbolPeriod(); // фиксация появления нового бара по любой валютной паре и на любом таймфрейме
if (analiz1>60)
{
Print("======================================================");
Print("Превышение допустимого (60сек) времени обработки !!! ",analiz1,"сек Перезапуск цикла обработки.");
Print("======================================================");
break;
}

//====================== ежечасный перезапуск цикла ========
string text = TimeToStr(TimeCurrent(),TIME_MINUTES);
int index = StringFind(text, ":49", 0); // разрешение на очередной ежечастный однократный перезапуск эксперта (цикла)
if (index==2) {bool perezapusk=true;}
index = StringFind(text, ":50", 0); // профилактический перезапуск цикла делаю за 10 минут до начала нового часа ========
if ((index==2)&&(perezapusk==true))
{
Print("======================================================");
Print(" Профилактический, перезапуск цикла обработки ",TimeToStr(TimeCurrent(),TIME_MINUTES));
Print("======================================================"); perezapusk=false; break;
}
//====================== ежечасный перезапуск цикла ========

ProcSP(); // оперативная циклическая обработка
Sleep(100); // притормози! (замедлитель цикла обработки)
}
return(0); // Управление возвращается терминалу
}
//=========================================================================================================================

 

подскажите, как вставить на форуме текст модуля, чтоб он смотрелся, как в редакторе?

 
Это самый верхний модуль :

int init() { return(0); }
int deinit() { return(0); }

//=========================================================================================================================
int start()
{
startustanovki(); // начальные установки
while(!IsStopped()) // До тех пор, пока пользователь не прекратит исполнение программы
{
kontrol(); // контрольные функции
SymbolPeriod(); // фиксация появления нового бара по любой валютной паре и на любом таймфрейме
if (analiz1>60)
{
Print("======================================================");
Print("Превышение допустимого (60сек) времени обработки !!! ",analiz1,"сек Перезапуск цикла обработки.");
Print("======================================================");
break;
}

//====================== ежечасный перезапуск цикла ========
string text = TimeToStr(TimeCurrent(),TIME_MINUTES);
int index = StringFind(text, ":49", 0); // разрешение на очередной ежечастный однократный перезапуск эксперта (цикла)
if (index==2) {bool perezapusk=true;}
index = StringFind(text, ":50", 0); // профилактический перезапуск цикла делаю за 10 минут до начала нового часа ========
if ((index==2)&&(perezapusk==true))
{
Print("======================================================");
Print(" Профилактический, перезапуск цикла обработки ",TimeToStr(TimeCurrent(),TIME_MINUTES));
Print("======================================================"); perezapusk=false; break;
}
//====================== ежечасный перезапуск цикла ========

ProcSP(); // оперативная циклическая обработка
Sleep(100); // притормози! (замедлитель цикла обработки)
}
return(0); // Управление возвращается терминалу
}
//=========================================================================================================================

 

 
И еще один из основных модулей. Собственно эти два модуля и являются основой всей идеи.

//====== фиксация появления нового бара по любой валютной паре и на любом таймфрейме ======================================
void SymbolPeriod()
{
int TT=0;
int TC1 = TimeCurrent(); //=== время начала обработки
bool NewBarS=false;
for(int i=0; i<countSymbol; i++) //=== перебор валютных пар
{
bool NewBar=false;
for(int j=0; j<countPeriod; j++) //=== перебор периодов
{
if (isNewBar(i,j)) //=== появился новый бар по текущей валютной паре по текущему таймфрейму
{
//Print("----- новый бар i=",i," ",Symbol_array[i]," j=",j," ",Period_array[j],"мин. ");
TT = 1; //=== появился новый бар, значит нужно замерить время последующей обработки
NewBar = true; NewBarS = true;
//=== появился новый бар на i инструменте на j таймфрейме, можно принимать решения основанные на анализе поведения i-го инструмента на j-ом таймфрейме
ProcSymbolPeriod(i,j); //=== процедуры тактик 101, 102, 103, ...
//Print("----- конец обработки нового бара ");
}
}
if (NewBar==true) //=== появился новый бар(бары) на i инструменте, можно принимать решения основанные на анализе поведения этого инструмента на всех таймфреймах
{
ProcSymbolPeriodS(i); //=== процедуры тактик 201, 202, 203, ...
}
}
if (NewBarS==true) //=== появился новый бар(бары), можно принимать решения основанные на анализе поведения всех инструментов на всех таймфреймах
{
ProcSymbolSPeriodS(); //=== процедуры тактик 301, 302, 303, ...
}

//====================== замер времени обработки процедур после появления нового бара или серии баров ==============
int TC2 = TimeCurrent();
analiz1 = TC2-TC1;
if ((TT==1)&&(analiz1>1)) //=== если нового бара или серии баров не было, то и процедур нет и время не замеряется
{
Print(" Время обработки ",analiz1,"сек.");
}
if (TT==1)
{
// Print("--------------------- конец цикла обработки бара(баров) ----------------");
}
//====================== замер времени обработки процедур после появления нового бара или серии баров ==============
}
//====== фиксация появления нового бара по любой валютной паре и на любом таймфрейме ======================================

 
//====== фиксация появления нового бара по любой валютной паре и на любом таймфрейме ======================================
void SymbolPeriod()   
   { 
      int TT=0;
      int TC1   = TimeCurrent();                   //=== время начала обработки 
      bool NewBarS=false;
      for(int i=0; i<countSymbol; i++)             //=== перебор валютных пар
         { 
            bool NewBar=false;
            for(int j=0; j<countPeriod; j++)       //=== перебор периодов
               {                
                  if (isNewBar(i,j))               //=== появился новый бар по текущей валютной паре по текущему таймфрейму
                     {  
                        //Print("----- новый бар      i=",i," ",Symbol_array[i],"   j=",j," ",Period_array[j],"мин.            ");
                        TT      = 1;               //=== появился новый бар, значит нужно замерить время последующей обработки
                        NewBar  = true; NewBarS = true;
                        //=== появился новый бар на i инструменте на j таймфрейме, можно принимать решения основанные на анализе поведения i-го инструмента на j-ом таймфрейме 
                        ProcSymbolPeriod(i,j);     //=== процедуры тактик 101, 102, 103, ...
                        //Print("----- конец обработки нового бара         ");
                     }                   
               } 
            if (NewBar==true)                      //=== появился новый бар(бары) на i инструменте, можно принимать решения основанные на анализе поведения этого инструмента на всех таймфреймах 
               {
                  ProcSymbolPeriodS(i);          //=== процедуры тактик 201, 202, 203, ... 
               }   
         } 
      if (NewBarS==true)                           //=== появился новый бар(бары), можно принимать решения основанные на анализе поведения всех инструментов на всех таймфреймах
         {
            ProcSymbolSPeriodS();                  //=== процедуры тактик 301, 302, 303, ...
         } 
         
      //====================== замер времени обработки процедур после появления нового бара или серии баров ==============       
      int TC2 = TimeCurrent();                     
      analiz1 = TC2-TC1;  
      if ((TT==1)&&(analiz1>1))   //=== если нового бара или серии баров не было, то и процедур нет и время не замеряется 
         {  
            Print("            Время обработки  ",analiz1,"сек.");
         }
      if (TT==1) 
         { 
            //  Print("--------------------- конец цикла обработки бара(баров) ----------------");
         }
      //====================== замер времени обработки процедур после появления нового бара или серии баров ==============       
   }      
//====== фиксация появления нового бара по любой валютной паре и на любом таймфрейме ======================================
  
 
Prival писал(а) >>

Prival
писал(а)
>>

спасибо, получилось :)

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