Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 970

 

 Здравствуйте. Прошу помощи наверное в элементарном вопросе. Хочу написать мультитаймфреймовый советник по 3-м окнам Элдера. Мне надо получить параметры свеч на разных таймфреймах. Посмотрел советники в кодобазе, но ничего подходящего не нашел. Решил написать сам. Написал, как мне предсавлялось правильным, но программа не работает.

Промучился пару дней и всё безрезультатно. Выставляю кусок  этой программы, подскажите пож., где ошибка и как правильно это место в сове оформить.

     //=============================================================================== 

     double  Close_buf[20], Open_buf[20], High_buf[20], Low_buf[20];  //базовые массивы для параметров свеч

    datetime Time_buf[20];  //базовый массив времени открытия баров

     double  close[2][20], open[2][20], high[2][20], low[2][20];  // массивы для параметров свеч: номер сторки - это номер таймфрейма,

                                                                                           //а столбцы - это значения параметра бара с номером столбца 

    datetime time[2][20];  // массив времени открытия баров

    int tf;  // переменная для обозначения номера таймфрейма

    int i;

 

    int OnInit()

  {

//---

//--

   return(INIT_SUCCEEDED);

  }


//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

    ArrayFree(Time_buf);

     ArrayFree(Close_buf);

//---  

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

//--- 

      ArraySetAsSeries(Close_buf, true);  //устанавливаем индексацию для массива Close_buf как в таймсерии

       ArraySetAsSeries(Time_buf, true);   //устанавливаем индексацию для массива Time_buf как в таймсерии 

 

   for( tf=0; tf<=1; tf++ )   // это цикл по таймфреймам М1, М5, 

        {

               if( tf==0 )

                 {   

                       CopyTime( "EURUSD",PERIOD_M1,0,20,Time_buf); // копируем в буфер исторические данные time для каждого бара 

                       CopyClose("EURUSD" , PERIOD_M1,0,20,Close_buf); // копируем в буфер исторические данные close для каждого бара

                  }

               if( tf==1 )

                 {   

                       CopyTime( "EURUSD",PERIOD_M5,0,20,Time_buf); // копируем в буфер исторические данные time для каждого бара 

                      CopyClose( "EURUSD", PERIOD_M5,0,20,Close_buf); // копируем в буфер исторические данные close для каждого бара

                  }

 

             for( i==0; i<=19; i++ ) //  это цикл по барам. Ведём перезагрузку данных

                 {

                     time[tf][i]= NormalizeDouble(Time_buf[i] , Digits )  ;

                     close[tf][i]= NormalizeDouble( Close_buf[i], Digits );

                } 

          } //  кнец цикла по таймфреймам 

  }  // конец функции  void OnTick()

      

 

Вопрос к программистам.

Снимается.

[Deleted]  
Подскажите, пожалуйста, как записывать алерты, которые выдаёт индикатор, в отдельный текстовый документ?
 
Alligator:

Вопрос к программистам.

Снимается.

 

 Извините, это мой вопрос снимается? Если это так, то почему?

 
boris.45:
)) Нет, это я про свой вопрос.
 

присоединения к окну финансового инструмента, скрипта того же вида,постоянно всплывает окно ,Вы действительно хотите удалить скрипт с "именем" ?

подскажите как можно избавиться, от этого всплывающего  окна.

 
korobok777:

присоединения к окну финансового инструмента, скрипта того же вида,постоянно всплывает окно ,Вы действительно хотите удалить скрипт с "именем" ?

подскажите как можно избавиться, от этого всплывающего  окна.

Одновременно может быть на графике только один скрипт или советник. Если нужно, откройте еще один график с таким же инструментом и запускайте там
 

Vinin:
Одновременно может быть на графике только один скрипт или советник.

Если нужно, откройте еще один график с таким же инструментом и запускайте там

 

 хотел сделать скрипт,который будет конвертировать все открытые окна в период указанный во внешней переменной,

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

раздражает  только сплывающее окно,Вы действительно хотите удалить скрипт с "именем" ?

если решения нет СПАСИБО!!!! 

 

 
korobok777:
Без кода ничего сказать нельзя
[Deleted]  

Добрый день. Вот написал простенький индикатор на выход RSI из зон перекуплености\перепроданости - работает

правильно, стрелки рисует там где надо. Но только в реальном времени.

Вопрос: как заставить его рисовать на истории на n-ное количество баров? 

 

 

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 LimeGreen
#property indicator_color2 LimeGreen

double rsi,rsi1,rsi2;
double CrossUp[];
double CrossDown[];
int FLAG = 0;
int FLAG1 = 2;
bool New_Bar=false; 
 
int init()
  {
//---- indicators
  SetIndexStyle(0, DRAW_ARROW,5,1);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, CrossUp);
   SetIndexStyle(1, DRAW_ARROW,5,1);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, CrossDown);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 

//----
   return(0);
  }
int start()
{  

rsi = iRSI(NULL,0,4,PRICE_CLOSE,0);
rsi1 = iRSI(NULL,0,4,PRICE_CLOSE,1);
rsi2 = iRSI(NULL,0,4,PRICE_CLOSE,2);



Fun_New_Bar(); 
  
   int limit, i, counter;
   double Range, AvgRange;
    for(i = 0; i <= limit; i++) {
   
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i ;counter<=i+9;counter++)
      {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
      }
      Range=AvgRange/10;
      if (FLAG<1 && rsi<rsi2 && rsi2>70 && rsi1<70)
      {Alert ("RSI DOWN!!! on ", Symbol());
      CrossDown[i] = High[i]+ Range*1.8;
          FLAG = 1;} 
      if(FLAG1>1 && rsi>rsi2 && rsi2<30 && rsi1>30)
      {Alert ("RSI UP!!! on ", Symbol());
      CrossUp[i] = Low[i]- Range*1.8;
         FLAG1 = 1; } 
   
       if( New_Bar==true)
       {FLAG=0;}
       if( New_Bar==true)
       {FLAG1=2;} 
   
   }
  return(0);
  } 
  
  void Fun_New_Bar()                              
  {                                             
   static datetime New_Time=0;                  
   New_Bar=false;                               
   if(New_Time!=Time[0])                        
     { 
      New_Time=Time[0];                         
      New_Bar=true;                            
     } 
  }