Ваши вопросы по языку MQL4

Leva20

Новичок форума
Добрый день

В индикаторе 2 уровня. Один отображается при сигнале в шорт, второй отображается при сигнале в лонг.
На скрине нашел место на графике где 2 встречных сигнала.
Красный уровень по коду первый и на нем подсвечиваются бары которые отбились от уровня.
Синий уровень по коду второй и на нем уже не чего не подсвечивается. Если я коментю красный уровень и делаю синий нулевым массивом то он тоже отображается. Подскажите как исправить? И тоже не могу найти как заменить зеленый хрестик на другой значок.

double Buf_0[];// Открытие индикаторных массивов (хай)
double Buf_1[];// Открытие индикаторных массивов (лоу)


int OnInit()
{
//--- indicator buffers mapping DRAW_ARROW
IndicatorBuffers(4);
SetIndexBuffer(0,Buf_0); // Назначение массива буферу
SetIndexBuffer(1,Buf_1); // Назначение массива буферу


SetIndexStyle (0, DRAW_ARROW , EMPTY, 1, clrGreen );
SetIndexStyle (1, DRAW_ARROW , EMPTY, 1, clrGreen );
//---
return(INIT_SUCCEEDED);
}


2020-11-29_203211.png
 

Vazemiller

Прохожий
Всем привет, зарегистрировался на форуме совсем недавно. Опыта программирования на mql4 очень мало. Написал сеточный советник. Писал не с нуля за основу был взят исходник трио денсер 4.2. При тестировании на реальном счете были выявлены три проблемы которые я не знаю как исправить. Одна из них это нет тейк профита у сетки ордеров или у единственного ордера в сетке. Попытался отследить проблему в журнале событий и обнаружил то что ордер был открыт в пт 27.11.2020 и тейк профит был установлен. А сегодня 30.11.2020 обнаружил что ордер весит без тейка. Может быть кто не будь знает в чем проблема и как такое может быть? Буду очень благодарен если кто нибудь поможет разобраться. На всякий случай прикрепил скрин из журнала событий.
 

Вложения

  • 3.jpg
    3.jpg
    262,2 КБ · Просмотры: 13

Ugar

Гуру форума
Ордер открывается без тейка. Сразу модифицируется добавляя тейк. А кто сказал что советник не может потом модифицировать удалив тейк?
Правда грустно, когда советник делает не то что хочется? А ведь, наверняка, по мнению автора, так и должен работать.
Лучше писать свой советник, тогда в нём можно запрограммировать то что нужно.
 

Leva20

Новичок форума
Скитаюсь по форумам но не кто не может мне помочь.
Может вы сможете подсказать. Вопрос вроде бы не сложный. Просто я с массивами не особо дружу, а в учебнике по mql4 этот вопрос плохо раскрыт.

Хочу применить 2 массива. Которые будут подсвечивать 2 типа баров.
Но подсвечивается только нулевой массив, а первый почему то нет.
Также в массиве на новом баре не стираются данные, насколько я понимаю нужно применить функцию ArrayFree(), но не пойму как ее правильно вставить.
Как исправить данные ошибки?

Masiv:
//+------------------------------------------------------------------+
//|                                                        Masiv.mq4 |
//|                                                               -- |
//|                                                               -- |
//+------------------------------------------------------------------+
#property copyright "--"
#property link      "--"
#property version   "1.00"
#property strict
#property indicator_chart_window

double Buf_0[];// Открытие индикаторных массивов (хай)
double Buf_1[];// Открытие индикаторных массивов (лоу)

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
[B]IndicatorBuffers(2);
SetIndexBuffer(0,Buf_0); [/B]// Назначение массива буферу
[B]SetIndexBuffer(1,Buf_1); [/B]// Назначение массива буферу
[B]
SetIndexStyle (0, DRAW_ARROW , EMPTY, 3, clrGreen );
SetIndexStyle (1, DRAW_ARROW , EMPTY, 3, clrRed ); [/B]


//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
string  Symb=Symbol();         // Имя графика   
datetime Time_S = TimeCurrent();
datetime B_Time = iTime(Symb,0,0);
int Period_1 = Period();

//Alert("Time_S  - ",Time_S);
//Alert("B_Time  - ",B_Time);
//Alert("Period_1  - ",Period_1);


if(B_Time-1+Period_1*60<=Time_S)
  {
 
[B]//ArrayFree(Buf_0);          [/B] //Освобождает буфер любого динамического массива и устанавливает размер нулевого измерения в 0.
[B]//ArrayFree(Buf_1);           [/B]//Освобождает буфер любого динамического массива и устанавливает размер нулевого измерения в 0.
  }


int i=1;
while (i<10)
   {
  
   if(i==2)
     {
     Buf_0[i]=High[i];
     }
  
   if(i==4)
     {
     Buf_0[i]=Low[i];
     }
    
   if(i==6)
     {
     Buf_0[i]=High[i];
     } 
 
 
  if(i==3)
     {
     Buf_1[i]=Low[i];
     }
  
   if(i==7)
     {
     Buf_1[i]=High[i];
     }
    
   if(i==8)
     {
     Buf_1[i]=High[i];
     } 
 
    
  // Alert("Buf_1[i]  - ",Buf_1[i]);
  // Alert("Buf_0[i]  - ",Buf_0[i]);
  // Alert("i  - ",i);
   i++;
   }



  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+




2020-12-01_090903.png2020-12-01_090920.png
 

Вложения

  • Masiv.mq4
    5,9 КБ · Просмотры: 26

AlexeNP

Гуру форума
Скитаюсь по форумам но не кто не может мне помочь.
Может вы сможете подсказать. Вопрос вроде бы не сложный. Просто я с массивами не особо дружу, а в учебнике по mql4 этот вопрос плохо раскрыт.

Хочу применить 2 массива. Которые будут подсвечивать 2 типа баров.
Но подсвечивается только нулевой массив, а первый почему то нет.
Также в массиве на новом баре не стираются данные, насколько я понимаю нужно применить функцию ArrayFree(), но не пойму как ее правильно вставить.
Как исправить данные ошибки?

Masiv:
//+------------------------------------------------------------------+
//|                                                        Masiv.mq4 |
//|                                                               -- |
//|                                                               -- |
//+------------------------------------------------------------------+
#property copyright "--"
#property link      "--"
#property version   "1.00"
#property strict
#property indicator_chart_window

double Buf_0[];// Открытие индикаторных массивов (хай)
double Buf_1[];// Открытие индикаторных массивов (лоу)

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
[B]IndicatorBuffers(2);
SetIndexBuffer(0,Buf_0); [/B]// Назначение массива буферу
[B]SetIndexBuffer(1,Buf_1); [/B]// Назначение массива буферу
[B]
SetIndexStyle (0, DRAW_ARROW , EMPTY, 3, clrGreen );
SetIndexStyle (1, DRAW_ARROW , EMPTY, 3, clrRed ); [/B]


//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
string  Symb=Symbol();         // Имя графика  
datetime Time_S = TimeCurrent();
datetime B_Time = iTime(Symb,0,0);
int Period_1 = Period();

//Alert("Time_S  - ",Time_S);
//Alert("B_Time  - ",B_Time);
//Alert("Period_1  - ",Period_1);


if(B_Time-1+Period_1*60<=Time_S)
  {

[B]//ArrayFree(Buf_0);          [/B] //Освобождает буфер любого динамического массива и устанавливает размер нулевого измерения в 0.
[B]//ArrayFree(Buf_1);           [/B]//Освобождает буфер любого динамического массива и устанавливает размер нулевого измерения в 0.
  }


int i=1;
while (i<10)
   {
 
   if(i==2)
     {
     Buf_0[i]=High[i];
     }
 
   if(i==4)
     {
     Buf_0[i]=Low[i];
     }
   
   if(i==6)
     {
     Buf_0[i]=High[i];
     }


  if(i==3)
     {
     Buf_1[i]=Low[i];
     }
 
   if(i==7)
     {
     Buf_1[i]=High[i];
     }
   
   if(i==8)
     {
     Buf_1[i]=High[i];
     }

   
  // Alert("Buf_1[i]  - ",Buf_1[i]);
  // Alert("Buf_0[i]  - ",Buf_0[i]);
  // Alert("i  - ",i);
   i++;
   }



 
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+




Посмотреть вложение 409585Посмотреть вложение 409586
да уж...
 

Вложения

  • Masiv.mq4
    7,3 КБ · Просмотры: 25

AlexeNP

Гуру форума
Не судите строго. :)
Алгоритм составить могу, а вот с языком проблема, только осваиваю.
Большое спасибо за исправление ошибок.

Еще не подскажете с помощью какой функции очищать буфер памяти массива? На каждом новом баре подсветка другая.



И какие новые функции вы имели в виду? Я просто про них не знаю.
если ты используешь OnCalculate, то и продолжай в том же духе)
не B_Time = iTime(Symb,0,0), а B_Time = time[0] и т.д.
 

Вложения

  • Masiv.mq4
    7,5 КБ · Просмотры: 38

gravity

Местный знаток
👋 Как исправить такую ошибку, не подскажете?

Screenshot_1.jpg
 

Вложения

  • fibo_bar.mq4
    14,9 КБ · Просмотры: 10

AlexeNP

Гуру форума

gravity

Местный знаток
Хотел тут по простенькому переделать индикатор, но что-то не срастается.

Если после RSIperiod добавить 0 через запятую, то ошибка исчезает, но ничего не отображается, ошибок в журнал не выдает.
На 3м скрине, как выглядит изначальный инд и моя попытка ниже.
C++:
//+------------------------------------------------------------------+
//|                                                      All RSI.mq4 |
//|                                                 made by : mladen |
//+------------------------------------------------------------------+
#property copyright   "this is public domain software"
#property link        "www.forex-tsd.com"
#define indicatorName "All RSI"

//
//
//
//
//

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 1
#property indicator_color1 Gold
#property indicator_level1 10
#property indicator_level2 90
#property indicator_levelcolor DimGray

//---- input parameters
//
//
//
//
//

extern int    RSIperiod            = 5;
//extern int    AppliedPrice       = 0;
extern string __                   = "Chose timeframes";
extern string timeFrames           = "M1;M5;M15;M30;H1;H4;D1;W1;MN";
extern int    barsPerTimeFrame     = 35;
extern bool   shiftRight           = False;
extern bool   currentFirst         = False;
extern color  txtColor             = Silver;
extern color  separatorColor       = DimGray;

//---- buffers
//
//
//
//
//

double ExtMapBuffer1[];

//
//
//
//
//

string shortName;
string labels[];
int    periods[];
int    Shift;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int init()
{
      if (shiftRight) Shift = 1;
      else            Shift = 0;
         barsPerTimeFrame = MathMax(barsPerTimeFrame,15);
         shortName = indicatorName+" ("+RSIperiod+")";
                     IndicatorShortName(shortName);
 
      //
      //
      //
      //
      //

      SetIndexStyle(0,DRAW_LINE);
      SetIndexBuffer(0,ExtMapBuffer1);
      SetIndexShift(0,Shift*(barsPerTimeFrame+1));
      SetIndexLabel(0,"RSI");
 
      //
      //
      //
      //
      //
     
      timeFrames = StringTrimLeft(StringTrimRight(timeFrames));
      if (StringSubstr(timeFrames,StringLen(timeFrames),1) != ";")
                       timeFrames = StringConcatenate(timeFrames,";");

         //
         //
         //
         //
         //                                  
           
         int s = 0;
         int i = StringFind(timeFrames,";",s);
         int time;
         string current;
            while (i > 0)
            {
               current = StringSubstr(timeFrames,s,i-s);
               time    = stringToTimeFrame(current);
               if (time > 0) {
                     ArrayResize(labels ,ArraySize(labels)+1);
                     ArrayResize(periods,ArraySize(periods)+1);
                                 labels[ArraySize(labels)-1] = TimeFrameToString(time);
                                 periods[ArraySize(periods)-1] = time; }
                                 s = i + 1;
                                     i = StringFind(timeFrames,";",s);
            }
     
      //
      //
      //
      //
      //

      if(currentFirst)
         for (i=1;i<ArraySize(periods);i++)
         if (Period()==periods[i])
            {
               string tmpLbl = labels[i];
               int    tmpPer = periods[i];
             
               //
               //
               //
               //
               //
             
               for (int k=i ;k>0; k--)
                     {
                        labels[k]  = labels[k-1];
                        periods[k] = periods[k-1];
                     }                    
               labels[0]  = tmpLbl;
               periods[0] = tmpPer;
            }
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
   for(int l=0;l<ArraySize(periods);l++) {
         ObjectDelete(indicatorName+l);
         ObjectDelete(indicatorName+l+"label");
      }        
   return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

int start()
{
     string separator;
     int    window=WindowFind(shortName);
     int    k=0;


     //
     //
     //
     //
     //
             
            for(int p=0; p<ArraySize(periods);p++)
                  {
                     for(int i=0; i<barsPerTimeFrame;i++,k++)
                           ExtMapBuffer1[k] = iCustom(NULL,periods[p],"TC\\Turbo_JRSX2",RSIperiod);//iRSI(NULL,periods[p],RSIperiod,AppliedPrice,i);
                           ExtMapBuffer1[k] = EMPTY_VALUE;  k += 1;
                         
                           //
                           //
                           //
                           //
                           //
                         
                           separator = indicatorName+p;
                           if(ObjectFind(separator)==-1)
                              ObjectCreate(separator,OBJ_TREND,window,0,0);
                              ObjectSet(separator,OBJPROP_TIME1,barTime(k-Shift*(barsPerTimeFrame+1)-1));
                              ObjectSet(separator,OBJPROP_TIME2,barTime(k-Shift*(barsPerTimeFrame+1)-1));
                              ObjectSet(separator,OBJPROP_PRICE1,  0);
                              ObjectSet(separator,OBJPROP_PRICE2,100);
                              ObjectSet(separator,OBJPROP_COLOR ,separatorColor);
                              ObjectSet(separator,OBJPROP_WIDTH ,2);
                           separator = indicatorName+p+"label";
                           if(ObjectFind(separator)==-1)
                              ObjectCreate(separator,OBJ_TEXT,window,0,0);
                              ObjectSet(separator,OBJPROP_TIME1,barTime(k-Shift*(barsPerTimeFrame+1)-5));
                              ObjectSet(separator,OBJPROP_PRICE1,100);          
                              ObjectSetText(separator,labels[p],9,"Arial",txtColor);
                  }

      //
      //
      //
      //
      //
     
      SetIndexDrawBegin(0,Bars-k);
   return(0);
}

//+------------------------------------------------------------------+
//+ Custom functions and procedures                                  +
//+------------------------------------------------------------------+

int barTime(int a)
{
   if(a<0)
         return(Time[0]+Period()*60*MathAbs(a));
   else  return(Time[a]);  
}

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

int stringToTimeFrame(string tfs)
{
   int tf=0;
       tfs = StringUpperCase(tfs);
     
         if (tfs=="M1" || tfs=="1")     tf=PERIOD_M1;
         if (tfs=="M5" || tfs=="5")     tf=PERIOD_M5;
         if (tfs=="M15"|| tfs=="15")    tf=PERIOD_M15;
         if (tfs=="M30"|| tfs=="30")    tf=PERIOD_M30;
         if (tfs=="H1" || tfs=="60")    tf=PERIOD_H1;
         if (tfs=="H4" || tfs=="240")   tf=PERIOD_H4;
         if (tfs=="D1" || tfs=="1440")  tf=PERIOD_D1;
         if (tfs=="W1" || tfs=="10080") tf=PERIOD_W1;
         if (tfs=="MN" || tfs=="43200") tf=PERIOD_MN1;
       
   return(tf);
}
string TimeFrameToString(int tf)
{
   string tfs="Current time frame";
   switch(tf) {
      case PERIOD_M1:  tfs="M1"  ; break;
      case PERIOD_M5:  tfs="M5"  ; break;
      case PERIOD_M15: tfs="M15" ; break;
      case PERIOD_M30: tfs="M30" ; break;
      case PERIOD_H1:  tfs="H1"  ; break;
      case PERIOD_H4:  tfs="H4"  ; break;
      case PERIOD_D1:  tfs="D1"  ; break;
      case PERIOD_W1:  tfs="W1"  ; break;
      case PERIOD_MN1: tfs="MN1";
   }
   return(tfs);
}

//
//
//
//
//

string StringUpperCase(string str)
{
   string   s = str;
   int      lenght = StringLen(str) - 1;
   int      char_code;
 
   while(lenght >= 0)
      {
         char_code = StringGetChar(s, lenght);
       
         //
         //
         //
         //
         //
       
         if((char_code > 96 && char_code < 123) || (char_code > 223 && char_code < 256))
                  s = StringSetChar(s, lenght, char_code - 32);
          else
              if(char_code > -33 && char_code < 0)
                  s = StringSetChar(s, lenght, char_code + 224);
                 
         //
         //
         //
         //
         //
                               
         lenght--;
   }
 
   //
   //
   //
   //
   //
 
   return(s);
}

Правки внесены только в строки 20, 21. 31, 32. 178
 

Вложения

  • Screenshot_1.jpg
    Screenshot_1.jpg
    48 КБ · Просмотры: 12
  • Screenshot_2.jpg
    Screenshot_2.jpg
    16,9 КБ · Просмотры: 12
  • Screenshot_3.jpg
    Screenshot_3.jpg
    34,7 КБ · Просмотры: 12

AlexeNP

Гуру форума
Хотел тут по простенькому переделать индикатор, но что-то не срастается.

Если после RSIperiod добавить 0 через запятую, то ошибка исчезает, но ничего не отображается, ошибок в журнал не выдает.
На 3м скрине, как выглядит изначальный инд и моя попытка ниже.
C++:
//+------------------------------------------------------------------+
//|                                                      All RSI.mq4 |
//|                                                 made by : mladen |
//+------------------------------------------------------------------+
#property copyright   "this is public domain software"
#property link        "www.forex-tsd.com"
#define indicatorName "All RSI"

//
//
//
//
//

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 1
#property indicator_color1 Gold
#property indicator_level1 10
#property indicator_level2 90
#property indicator_levelcolor DimGray

//---- input parameters
//
//
//
//
//

extern int    RSIperiod            = 5;
//extern int    AppliedPrice       = 0;
extern string __                   = "Chose timeframes";
extern string timeFrames           = "M1;M5;M15;M30;H1;H4;D1;W1;MN";
extern int    barsPerTimeFrame     = 35;
extern bool   shiftRight           = False;
extern bool   currentFirst         = False;
extern color  txtColor             = Silver;
extern color  separatorColor       = DimGray;

//---- buffers
//
//
//
//
//

double ExtMapBuffer1[];

//
//
//
//
//

string shortName;
string labels[];
int    periods[];
int    Shift;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int init()
{
      if (shiftRight) Shift = 1;
      else            Shift = 0;
         barsPerTimeFrame = MathMax(barsPerTimeFrame,15);
         shortName = indicatorName+" ("+RSIperiod+")";
                     IndicatorShortName(shortName);

      //
      //
      //
      //
      //

      SetIndexStyle(0,DRAW_LINE);
      SetIndexBuffer(0,ExtMapBuffer1);
      SetIndexShift(0,Shift*(barsPerTimeFrame+1));
      SetIndexLabel(0,"RSI");

      //
      //
      //
      //
      //
   
      timeFrames = StringTrimLeft(StringTrimRight(timeFrames));
      if (StringSubstr(timeFrames,StringLen(timeFrames),1) != ";")
                       timeFrames = StringConcatenate(timeFrames,";");

         //
         //
         //
         //
         //                                
         
         int s = 0;
         int i = StringFind(timeFrames,";",s);
         int time;
         string current;
            while (i > 0)
            {
               current = StringSubstr(timeFrames,s,i-s);
               time    = stringToTimeFrame(current);
               if (time > 0) {
                     ArrayResize(labels ,ArraySize(labels)+1);
                     ArrayResize(periods,ArraySize(periods)+1);
                                 labels[ArraySize(labels)-1] = TimeFrameToString(time);
                                 periods[ArraySize(periods)-1] = time; }
                                 s = i + 1;
                                     i = StringFind(timeFrames,";",s);
            }
   
      //
      //
      //
      //
      //

      if(currentFirst)
         for (i=1;i<ArraySize(periods);i++)
         if (Period()==periods[i])
            {
               string tmpLbl = labels[i];
               int    tmpPer = periods[i];
           
               //
               //
               //
               //
               //
           
               for (int k=i ;k>0; k--)
                     {
                        labels[k]  = labels[k-1];
                        periods[k] = periods[k-1];
                     }                  
               labels[0]  = tmpLbl;
               periods[0] = tmpPer;
            }
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
   for(int l=0;l<ArraySize(periods);l++) {
         ObjectDelete(indicatorName+l);
         ObjectDelete(indicatorName+l+"label");
      }      
   return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

int start()
{
     string separator;
     int    window=WindowFind(shortName);
     int    k=0;


     //
     //
     //
     //
     //
           
            for(int p=0; p<ArraySize(periods);p++)
                  {
                     for(int i=0; i<barsPerTimeFrame;i++,k++)
                           ExtMapBuffer1[k] = iCustom(NULL,periods[p],"TC\\Turbo_JRSX2",RSIperiod);//iRSI(NULL,periods[p],RSIperiod,AppliedPrice,i);
                           ExtMapBuffer1[k] = EMPTY_VALUE;  k += 1;
                       
                           //
                           //
                           //
                           //
                           //
                       
                           separator = indicatorName+p;
                           if(ObjectFind(separator)==-1)
                              ObjectCreate(separator,OBJ_TREND,window,0,0);
                              ObjectSet(separator,OBJPROP_TIME1,barTime(k-Shift*(barsPerTimeFrame+1)-1));
                              ObjectSet(separator,OBJPROP_TIME2,barTime(k-Shift*(barsPerTimeFrame+1)-1));
                              ObjectSet(separator,OBJPROP_PRICE1,  0);
                              ObjectSet(separator,OBJPROP_PRICE2,100);
                              ObjectSet(separator,OBJPROP_COLOR ,separatorColor);
                              ObjectSet(separator,OBJPROP_WIDTH ,2);
                           separator = indicatorName+p+"label";
                           if(ObjectFind(separator)==-1)
                              ObjectCreate(separator,OBJ_TEXT,window,0,0);
                              ObjectSet(separator,OBJPROP_TIME1,barTime(k-Shift*(barsPerTimeFrame+1)-5));
                              ObjectSet(separator,OBJPROP_PRICE1,100);        
                              ObjectSetText(separator,labels[p],9,"Arial",txtColor);
                  }

      //
      //
      //
      //
      //
   
      SetIndexDrawBegin(0,Bars-k);
   return(0);
}

//+------------------------------------------------------------------+
//+ Custom functions and procedures                                  +
//+------------------------------------------------------------------+

int barTime(int a)
{
   if(a<0)
         return(Time[0]+Period()*60*MathAbs(a));
   else  return(Time[a]);
}

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

int stringToTimeFrame(string tfs)
{
   int tf=0;
       tfs = StringUpperCase(tfs);
   
         if (tfs=="M1" || tfs=="1")     tf=PERIOD_M1;
         if (tfs=="M5" || tfs=="5")     tf=PERIOD_M5;
         if (tfs=="M15"|| tfs=="15")    tf=PERIOD_M15;
         if (tfs=="M30"|| tfs=="30")    tf=PERIOD_M30;
         if (tfs=="H1" || tfs=="60")    tf=PERIOD_H1;
         if (tfs=="H4" || tfs=="240")   tf=PERIOD_H4;
         if (tfs=="D1" || tfs=="1440")  tf=PERIOD_D1;
         if (tfs=="W1" || tfs=="10080") tf=PERIOD_W1;
         if (tfs=="MN" || tfs=="43200") tf=PERIOD_MN1;
     
   return(tf);
}
string TimeFrameToString(int tf)
{
   string tfs="Current time frame";
   switch(tf) {
      case PERIOD_M1:  tfs="M1"  ; break;
      case PERIOD_M5:  tfs="M5"  ; break;
      case PERIOD_M15: tfs="M15" ; break;
      case PERIOD_M30: tfs="M30" ; break;
      case PERIOD_H1:  tfs="H1"  ; break;
      case PERIOD_H4:  tfs="H4"  ; break;
      case PERIOD_D1:  tfs="D1"  ; break;
      case PERIOD_W1:  tfs="W1"  ; break;
      case PERIOD_MN1: tfs="MN1";
   }
   return(tfs);
}

//
//
//
//
//

string StringUpperCase(string str)
{
   string   s = str;
   int      lenght = StringLen(str) - 1;
   int      char_code;

   while(lenght >= 0)
      {
         char_code = StringGetChar(s, lenght);
     
         //
         //
         //
         //
         //
     
         if((char_code > 96 && char_code < 123) || (char_code > 223 && char_code < 256))
                  s = StringSetChar(s, lenght, char_code - 32);
          else
              if(char_code > -33 && char_code < 0)
                  s = StringSetChar(s, lenght, char_code + 224);
               
         //
         //
         //
         //
         //
                             
         lenght--;
   }

   //
   //
   //
   //
   //

   return(s);
}

Правки внесены только в строки 20, 21. 31, 32. 178
в этом месте iCustom(NULL,periods[p],"TC\\Turbo_JRSX2",RSIperiod) после RSIperiod (период индикатора Turbo_JRSX2) должен быть номер бара по отношению к которому применяются расчеты этого самого индикатора....
скорее всго, надо примерно так iCustom(NULL,periods[p],"TC\\Turbo_JRSX2",RSIperiod, i)
 

gravity

Местный знаток
в этом месте iCustom(NULL,periods[p],"TC\\Turbo_JRSX2",RSIperiod) после RSIperiod (период индикатора Turbo_JRSX2) должен быть номер бара по отношению к которому применяются расчеты этого самого индикатора....
скорее всго, надо примерно так iCustom(NULL,periods[p],"TC\\Turbo_JRSX2",RSIperiod, i)
Благодарю, но нет, ничего не изменилось.
 

gravity

Местный знаток
попробуй ввести input параметры Turbo_JRSX2 и с какого буфера считываются данные
Дело в том, что параметр только 1.
Взял мод индикатора и перечислил все параметры, заработало.
 

Вложения

  • Screenshot_1.jpg
    Screenshot_1.jpg
    17,7 КБ · Просмотры: 13
  • Screenshot_2.jpg
    Screenshot_2.jpg
    44,5 КБ · Просмотры: 13
  • Screenshot_3.jpg
    Screenshot_3.jpg
    22,7 КБ · Просмотры: 13

mobidik

-----
Дело в том, что параметр только 1.
Взял мод индикатора и перечислил все параметры, заработало.
То, что заработало - чудненько, а вот то, что ты, похоже, не понял почему - плохо. Перечислять все параметры нет необходимости, достаточно только первые нужные, именно перечислить все параметры до последнего нужного параметра. Но причина не в этом: если заглянуть в справку по iCustom, то какие обязательные два последних параметра должны быть? Вот и сравни, то как ты делал вначале и то, когда все заработало. Можешь повторить с первым вариантом и все будет ок.
 

gravity

Местный знаток
То, что заработало - чудненько, а вот то, что ты, похоже, не понял почему - плохо. Перечислять все параметры нет необходимости, достаточно только первые нужные, именно перечислить все параметры до последнего нужного параметра. Но причина не в этом: если заглянуть в справку по iCustom, то какие обязательные два последних параметра должны быть? Вот и сравни, то как ты делал вначале и то, когда все заработало. Можешь повторить с первым вариантом и все будет ок.
Спасибо, вроде понял. Всего параметров в iCustom 5 шт. Индекс буфера у меня будет 0, но почему shift = i
( Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад) , я че то понять не могу.

Вот массив и тамScreenshot_1.jpg индекс обозначен [k] и по идее, мы вписываем этот самый k туда, но его можно обозначить любой другой буквой, как я например обозвал его i. Так? Но почему сдвиг просто не задается как 0 или 1, я не понял)
 

Вложения

  • Screenshot_5.jpg
    Screenshot_5.jpg
    64,6 КБ · Просмотры: 9
Последнее редактирование:

mobidik

-----
Но почему сдвиг просто не задается как 0 или 1, я не понял)
Но ты же в цикле перебираешь бары, номера которых присваиваются переменной "i", от значения, например, Bars до "0". Сперва, например, i = 1000 - получили данные индикатора на 1000 баре, затем "i" стала на 1 меньше, т.е., 999 - получили данные индикатора по 999 бару, затем, опять таки, "i" стала меньше на 1, т.е., 998 и т.д., вот и получается линия на истории, если указать "0" - будет только от текущего времени, без истории. А "0" или "1" - то это актуально для советников, где данные от индюков берутся по текущему или только что закрытому бару. Ради справедливости, это не всегда, есть исключения. А вот, если нужно сдвинуть показания индикатора, тогда делаем так: ..., i+ShiftBar); где ShiftBar - заданный сдвиг, задается от 1.
 
Верх