Что за чудеса с терминалом или с чем? - страница 3

 
Alexey Kozitsyn:
Код функции OnInit() и OnChartEvent() можете показать?

Да, без проблем

 --------------------------------

int OnInit()
  {
   start=0;
   //---
   //--- Инициализируем буферы
   //---
   Print("Init ",_Symbol);
   SetIndexBuffer(0,ZZ_u0_BufferHi,INDICATOR_DATA);
   SetIndexBuffer(1,ZZ_u0_BufferLo,INDICATOR_DATA);
   SetIndexBuffer(2,ZZ_u1_BufferHi,INDICATOR_DATA);
   SetIndexBuffer(3,ZZ_u1_BufferLo,INDICATOR_DATA);
   SetIndexBuffer(4,ZZ_u2_BufferHi,INDICATOR_DATA);
   SetIndexBuffer(5,ZZ_u2_BufferLo,INDICATOR_DATA);
   SetIndexBuffer(6,ZZ_u3_BufferHi,INDICATOR_DATA);
   SetIndexBuffer(7,ZZ_u3_BufferLo,INDICATOR_DATA);
   SetIndexBuffer(8,ZZ_u4_BufferHi,INDICATOR_DATA);
   SetIndexBuffer(9,ZZ_u4_BufferLo,INDICATOR_DATA);
   SetIndexBuffer(10,ZZ_u5_BufferHi,INDICATOR_DATA);
   SetIndexBuffer(11,ZZ_u5_BufferLo,INDICATOR_DATA);
  
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,0);
  
   PlotIndexSetString(0,PLOT_LABEL,"Level 0");
   PlotIndexSetString(1,PLOT_LABEL,"Level 1");
   PlotIndexSetString(2,PLOT_LABEL,"Level 2");
   PlotIndexSetString(3,PLOT_LABEL,"Level 3");
   PlotIndexSetString(4,PLOT_LABEL,"Level 4");
   PlotIndexSetString(5,PLOT_LABEL,"Level 5");
  
   PlotIndexSetInteger(1,PLOT_LINE_WIDTH,Width);
   PlotIndexSetInteger(2,PLOT_LINE_WIDTH,Width);
   PlotIndexSetInteger(3,PLOT_LINE_WIDTH,Width);
   PlotIndexSetInteger(4,PLOT_LINE_WIDTH,Width);
   PlotIndexSetInteger(5,PLOT_LINE_WIDTH,Width);
  
   PlotIndexSetInteger(1,PLOT_LINE_COLOR,Color1);
   PlotIndexSetInteger(2,PLOT_LINE_COLOR,Color2);
   PlotIndexSetInteger(3,PLOT_LINE_COLOR,Color3);
   PlotIndexSetInteger(4,PLOT_LINE_COLOR,Color4);
   PlotIndexSetInteger(5,PLOT_LINE_COLOR,Color5);
  
   PlotIndexSetInteger(1,PLOT_LINE_STYLE,L_Style);
   PlotIndexSetInteger(2,PLOT_LINE_STYLE,L_Style);
   PlotIndexSetInteger(3,PLOT_LINE_STYLE,L_Style);
   PlotIndexSetInteger(4,PLOT_LINE_STYLE,L_Style);
   PlotIndexSetInteger(5,PLOT_LINE_STYLE,L_Style);
  
   if(!Flag_Ris_0U) PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrNONE);
   else PlotIndexSetInteger(0,PLOT_LINE_COLOR,Color0);
  
   tLast_Signal_Ur1_Max=0;
   tLast_Signal_Ur1_Min=0;
   tLast_Signal_Ur2_Max=0;
   tLast_Signal_Ur2_Min=0;
   tLast_Signal_Ur3_Max=0;
   tLast_Signal_Ur3_Min=0;
   tLast_Signal_Ur4_Max=0;
   tLast_Signal_Ur4_Min=0;
   tLast_Signal_Ur5_Max=0;
   tLast_Signal_Ur5_Min=0;
  
  
   ArraySetAsSeries(ZZ_u0_BufferHi,true);
   ArraySetAsSeries(ZZ_u0_BufferLo,true);
   ArraySetAsSeries(ZZ_u1_BufferHi,true);
   ArraySetAsSeries(ZZ_u1_BufferLo,true);
   ArraySetAsSeries(ZZ_u2_BufferHi,true);
   ArraySetAsSeries(ZZ_u2_BufferLo,true);
   ArraySetAsSeries(ZZ_u3_BufferHi,true);
   ArraySetAsSeries(ZZ_u3_BufferLo,true);
   ArraySetAsSeries(ZZ_u4_BufferHi,true);
   ArraySetAsSeries(ZZ_u4_BufferLo,true);
   ArraySetAsSeries(ZZ_u5_BufferHi,true);
   ArraySetAsSeries(ZZ_u5_BufferLo,true);
  
   IndicatorSetString(INDICATOR_SHORTNAME,"s-extremumHL");
    
//---
   return(INIT_SUCCEEDED);
  }


int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
  
    //---
    //---
    if(rates_total==prev_calculated) return(rates_total); //Чтобы не работать на каждом тике
    //---
    //---
    //Print("Новый бар");
    
    if(CommentScreen)
    {
      //---
      //--- Нарисуем графику ---
      //---
      string s;
      s="\nAlertTerminal - "+(string)AlertTerminal+
        "\nСигнал Max 1у - "+(string)Flag_Ur1_Max+
        "\nСигнал Min 1у - "+(string)Flag_Ur1_Min+
        "\nСигнал Max 2у - "+(string)Flag_Ur2_Max+
        "\nСигнал Min 2у - "+(string)Flag_Ur2_Min+
        "\nСигнал Max 3у - "+(string)Flag_Ur3_Max+
        "\nСигнал Min 3у - "+(string)Flag_Ur3_Min+
        "\nСигнал Max 4у - "+(string)Flag_Ur4_Max+
        "\nСигнал Min 4у - "+(string)Flag_Ur4_Min+
        "\nСигнал Max 5у - "+(string)Flag_Ur5_Max+
        "\nСигнал Min 5у - "+(string)Flag_Ur5_Min+
        "\nPush - "+(string)Flag_Push+
        "\nEmail - "+(string)Flag_Mail;
      Comment(s)  ;
    }
    else Comment("")    ;
      
    
   if(ArraySize(ZZ_u0_BufferHi)<3) return(rates_total);
   if(ArraySize(ZZ_u0_BufferLo)<3) return(rates_total);
   if(ArraySize(ZZ_u1_BufferHi)<3) return(rates_total);
   if(ArraySize(ZZ_u1_BufferLo)<3) return(rates_total);
   if(ArraySize(ZZ_u2_BufferHi)<3) return(rates_total);
   if(ArraySize(ZZ_u2_BufferLo)<3) return(rates_total);
   if(ArraySize(ZZ_u3_BufferHi)<3) return(rates_total);
   if(ArraySize(ZZ_u3_BufferLo)<3) return(rates_total);
   if(ArraySize(ZZ_u4_BufferHi)<3) return(rates_total);
   if(ArraySize(ZZ_u4_BufferLo)<3) return(rates_total);
   if(ArraySize(ZZ_u5_BufferHi)<3) return(rates_total);
   if(ArraySize(ZZ_u5_BufferLo)<3) return(rates_total);
  
    //--- Развернем массивы
    ArraySetAsSeries(time,true);
    ArraySetAsSeries(high,true);
    ArraySetAsSeries(low,true);

и там дальше пошли вычисления 

 
Serhios:

Да, без проблем

А реализацию OnChartEvent()? И вставляйте код, пожалуйста, через кнопку SRC

 
Комбинатор:
Кто-то вроде где-то писал что стандартный зигзаг мерцает. Так что похоже на глюк терминала в определенном виде рисования. В СД.

Можно провести эксперимент - каждый загрузит стандартный зигзаг и понаблюдает... 

Я не смогу - так как я очень часто переключаюсь терминал - сайт - метаэтидор - сайт - справка метаэтирора или в другой последовательности, но в итоге адский коктейль - поэтому качество наблюдений за терминалом от меня будет ноль целых ноль десятых :( 

 
Alexey Kozitsyn:

А реализацию OnChartEvent()? И вставляйте код, пожалуйста, через кнопку SRC

OnChartEvent()  выше там же, вставил через SRC
 
Serhios:
OnChartEvent()  выше там же, вставил через SRC
Не вижу, вижу OnCalculate()
 
Serhios:
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
  
    //---
    //---
    if(rates_total==prev_calculated) return(rates_total); //Чтобы не работать на каждом тике
    //---
    //---
    //Print("Новый бар");
    
    if(CommentScreen)
    {
      //---
      //--- Нарисуем графику ---
      //---
      string s;
      s="\nAlertTerminal - "+(string)AlertTerminal+
        "\nСигнал Max 1у - "+(string)Flag_Ur1_Max+
        "\nСигнал Min 1у - "+(string)Flag_Ur1_Min+
        "\nСигнал Max 2у - "+(string)Flag_Ur2_Max+
        "\nСигнал Min 2у - "+(string)Flag_Ur2_Min+
        "\nСигнал Max 3у - "+(string)Flag_Ur3_Max+
        "\nСигнал Min 3у - "+(string)Flag_Ur3_Min+
        "\nСигнал Max 4у - "+(string)Flag_Ur4_Max+
        "\nСигнал Min 4у - "+(string)Flag_Ur4_Min+
        "\nСигнал Max 5у - "+(string)Flag_Ur5_Max+
        "\nСигнал Min 5у - "+(string)Flag_Ur5_Min+
        "\nPush - "+(string)Flag_Push+
        "\nEmail - "+(string)Flag_Mail;
      Comment(s)  ;
    }
    else Comment("")    ;
      
    
   if(ArraySize(ZZ_u0_BufferHi)<3) return(rates_total);
   if(ArraySize(ZZ_u0_BufferLo)<3) return(rates_total);
   if(ArraySize(ZZ_u1_BufferHi)<3) return(rates_total);
   if(ArraySize(ZZ_u1_BufferLo)<3) return(rates_total);
   if(ArraySize(ZZ_u2_BufferHi)<3) return(rates_total);
   if(ArraySize(ZZ_u2_BufferLo)<3) return(rates_total);
   if(ArraySize(ZZ_u3_BufferHi)<3) return(rates_total);
   if(ArraySize(ZZ_u3_BufferLo)<3) return(rates_total);
   if(ArraySize(ZZ_u4_BufferHi)<3) return(rates_total);
   if(ArraySize(ZZ_u4_BufferLo)<3) return(rates_total);
   if(ArraySize(ZZ_u5_BufferHi)<3) return(rates_total);
   if(ArraySize(ZZ_u5_BufferLo)<3) return(rates_total);
  
    //--- Развернем массивы
    ArraySetAsSeries(time,true);
    ArraySetAsSeries(high,true);
    ArraySetAsSeries(low,true);
и там дальше пошли вычесления
Эм.. ок... но OnCalculate() я не просил. Нужна реализация OnChartEvent()!
 
Alexey Kozitsyn:
Эм.. ок... но OnCalculate() я не просил. Нужна реализация OnChartEvent()!

 

Извините, я немножечко не так прочитал, в общем  OnChartEvent()  не используется


вот все что есть 

 

 
Serhios:

Извините, я немножечко не так прочитал, в общем  OnChartEvent()  не используется

вот все что есть 

Тогда... да, пожалуй нужно писать в СД, чтобы там разбирались с типом построения DRAW_ZIGZAG.
 
Alexey Kozitsyn:
Тогда... да, пожалуй нужно писать в СД, чтобы там разбирались с типом построения DRAW_ZIGZAG.

 

Возможно еще нужно будет проверить что писал Alexey Viktorov -- "переменная prev_calculated обнуляется

 

Может у кого-то есть еще какие-то догадки? 

 
Serhios:

Да, без проблем

 --------------------------------

int OnInit(

и там дальше пошли вычисления 

по мелочам :

if
(ArraySize(ZZ_u0_BufferHi)<3) return(rates_total); // затыка на время отладки и не совсем корректая - во первых это таймсерия и разрабы божаться что размеры контроллируют, во вторых в массиве остался мусор

при prev_calcluted=0 стоит ещё исполнять ArrayFill(....) к таймсериям, иначе возникнут (могут возникнуть) визуальные глюки..или гарантировать явное заполнение массива при вычислениях.

и возможно (не знаю ваш алгоритм, но наверное так) стоит из OnCalculate возвращать номер бара с которого пересчёт точно не требуется (вершина зигзага зафиксировалась и не будет изменена.

PS/ веб-мастерам - разберитесь уже с юзабилити сайта ! такое ощущение, что цитирование/публикация кода это вещь тут чуждая и с ней целенаправленно борются :-)