Этот код может давать значения, но он не дает правильных значений.
Пожалуйста, посмотрите мои предыдущие сообщения
Привет Гумрай, я скомпилировал ваш код плюс магический код Qjol, который я прикрепил здесь. Без кода qjol форма графика похожа на цифру 7, но при добавлении кода qjol она ведет себя лучше. Значение, как вы можете видеть на изображении, упало до -1. График имеет ту же форму, что и на предыдущем изображении, но значение другое. Пожалуйста, посоветуйте, как это улучшить. Спасибо.
#property indicator_separate_window// Indicator is drawn in the main window#property indicator_buffers1// Number of buffers#property indicator_color1 Red // Color of the 1st line//#property indicator_color2 Yellow // Color of the 2nd line//extern int Multiplier=2; double Buf_0[];// Buf_1[]; // Declaring indicator arrays//THIS INDICATOR IS TO COUNT NUMBER OF M1 BARS WHICH HIGH[I] IS HIGHER AND LOW[I] IS LOWER THAN OPEN[1440].//--------------------------------------------------------------------int init() // Special function init()
{
//--------------------------------------------------------------------SetIndexBuffer(0,Buf_0); // Assigning an array to a bufferSetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Line style//--------------------------------------------------------------------// SetIndexBuffer(1,Buf_1); // Assigning an array to a buffer// SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2);// Line style//--------------------------------------------------------------------return(0); // Exit the special funct.init()
}
//--------------------------------------------------------------------int start() // Special function start()
{
int i=0, iCht, Counted_bars;
//--------------------------------------------------------------------
Counted_bars=IndicatorCounted(); // Number of counted barsfor(iCht = Bars - 1 - Counted_bars; iCht >= 0; iCht--){ // Chart barsint iD1 = iBarShift(Symbol(), PERIOD_D1, Time[iCht]);
Buf_0[iCht] = EMPTY; // <<<<<<<<<<<< This is the magic code that gjol inserted and it worked. //----find the datetime of iD1. ie the Time[]datetime daystarttime = iTime(Symbol(),PERIOD_D1,iD1);
double openD1 = iOpen(Symbol(), PERIOD_D1, iD1);
//----find BarShift of daystarttime on current chart and take the nearest following bar if it doesn't existint iM1Beg = iBarShift(Symbol(),PERIOD_M1,daystarttime,true);
if(iM1Beg<0)
iM1Beg = iBarShift(Symbol(),PERIOD_M1,daystarttime,false)+1;
//----find BarShift for end of day on current chart and take the nearest following bar if it doesn't existif(iD1>0)
{
datetime nextday = iTime(Symbol(),PERIOD_D1,iD1-1);
int iM1End = iBarShift(Symbol(),PERIOD_M1,nextday-1,true);
if(iM1End<0)
iM1End = iBarShift(Symbol(),PERIOD_M1,nextday,false);
for(Buf_0[i] = 0; iM1Beg > iM1End; iM1Beg--){
double hM1 = iHigh(Symbol(), PERIOD_M1, iM1Beg),
lM1 = iLow(Symbol(), PERIOD_M1, iM1Beg);
// count Bars of M1 Period that crisscross Open price of D1 Period if( hM1 >= openD1 && openD1 >= lM1) Buf_0[iCht]++;
}
}
}
//--------------------------------------------------------------------return(0);//
}
//--------------------------------------------------------------------
Пожалуйста, посоветуйте, как мы можем это улучшить. Спасибо.
Похоже, что вы уже реализовали мои предложения.
Линия indi падает на ноль, потому что buffer[0] не вычисляется в коде. Вы должны решить, хотите ли вы, чтобы это значение начиналось с 0 и увеличивалось с течением дня, или, может быть, просто сделать buffer[0] == buffer[1], что будет выглядеть более аккуратно.
Линия indi падает на ноль, потому что буфер[0] не вычисляется в коде. Вы должны решить, хотите ли вы, чтобы это значение начиналось с 0 и увеличивалось с течением дня, или просто сделать так, чтобы buffer[0] == buffer[1], что будет выглядеть более аккуратно.
Привет GumRai, Как я могу написать код, чтобы значение начиналось с 0 и увеличивалось по мере продвижения дня? Пожалуйста, помогите. Спасибо.
Привет, GumRai, Как я могу написать код, чтобы значение начиналось с 0 и увеличивалось по мере продвижения дня? Пожалуйста, помогите. Спасибо.
Я внес некоторые изменения в ваш код
int start() // Special function start()
{
int i, iCht, Counted_bars, limit, iD1, iM1Beg, iM1End, counter ;
datetime daystarttime, nextday ;
double hM1, lM1, openD1 ;
//--------------------------------------------------------------------
Counted_bars=IndicatorCounted(); // Number of counted bars
limit = Bars - 1 - Counted_bars;
if(limit > Bars-100)
limit = Bars-100;
for(iCht = limit; iCht >= 0; iCht--){ // Chart bars
iD1 = iBarShift(Symbol(), PERIOD_D1, Time[iCht]); //---Barshift on daily chart
daystarttime = iTime(Symbol(),PERIOD_D1,iD1); //--Find datetime value for start of the day
openD1 = iOpen(Symbol(), PERIOD_D1, iD1);
//----find BarShift of daystarttime on current chart and take the nearest following bar if it doesn't exist
iM1Beg = iBarShift(Symbol(),PERIOD_M1,daystarttime,true);
if(iM1Beg<0)
iM1Beg = iBarShift(Symbol(),PERIOD_M1,daystarttime,false)+1;
//----find BarShift for end of day on current chart and take the nearest following bar if it doesn't existif(iD1>0) //-- Change to iD1>=0 to show running total for the current day
{
nextday = iTime(Symbol(),PERIOD_D1,iD1-1);
iM1End = iBarShift(Symbol(),PERIOD_M1,nextday-1,true);
if(iM1End<0)
iM1End = iBarShift(Symbol(),PERIOD_M1,nextday,false);
counter = 0;
for(i= iM1Beg; i >= iM1End; i--){
hM1 = iHigh(Symbol(), PERIOD_M1, i);
lM1 = iLow(Symbol(), PERIOD_M1, i);
// count Bars of M1 Period that crisscross Open price of D1 Period if( hM1 >= openD1 && openD1 >= lM1)
counter++ ;
}
Buf_0[iCht] = counter;
}
}
//--------------------------------------------------------------------return(0);//
}
//--------------------------------------------------------------------//+------------------------------------------------------------------+
Это должно сделать то, что вы хотите.
В текущем виде он не дает значения для сегодняшнего дня.
Если вы внесете изменения, как в выделенном тексте, это должно включить значение для сегодняшнего дня, которое будет начинаться с 0 и увеличиваться по мере продвижения дня.
Почему участок здесь не заполнен. Он не заполнен до января 2014 года. Пожалуйста, объясните, в чем проблема. Этот график был построен с использованием кода WHRoeder, но даже тот, который предложил GumRai, также дает такой же неполный график.
Этот код может давать значения, но он не дает правильных значений.
Пожалуйста, посмотрите мои предыдущие сообщения
Этот код может давать значения, но он не дает правильных значений.
Пожалуйста, посмотрите мои предыдущие сообщения
Этот код может дать значения, но он не дает правильных значений.
Пожалуйста, см. мои предыдущие сообщения
Привет, GumRai,
Пожалуйста, посоветуйте, как мы можем это улучшить. Спасибо.
Привет GumRai,
Пожалуйста, посоветуйте, как мы можем это улучшить. Спасибо.
Похоже, что вы уже реализовали мои предложения.
Линия indi падает на ноль, потому что buffer[0] не вычисляется в коде. Вы должны решить, хотите ли вы, чтобы это значение начиналось с 0 и увеличивалось с течением дня, или, может быть, просто сделать buffer[0] == buffer[1], что будет выглядеть более аккуратно.
Похоже, что вы уже реализовали мои предложения.
Линия indi падает на ноль, потому что буфер[0] не вычисляется в коде. Вы должны решить, хотите ли вы, чтобы это значение начиналось с 0 и увеличивалось с течением дня, или просто сделать так, чтобы buffer[0] == buffer[1], что будет выглядеть более аккуратно.
Привет GumRai, Как я могу написать код, чтобы значение начиналось с 0 и увеличивалось по мере продвижения дня? Пожалуйста, помогите. Спасибо.
Привет, GumRai, Как я могу написать код, чтобы значение начиналось с 0 и увеличивалось по мере продвижения дня? Пожалуйста, помогите. Спасибо.
Я внес некоторые изменения в ваш код
Это должно сделать то, что вы хотите.
В текущем виде он не дает значения для сегодняшнего дня.
Если вы внесете изменения, как в выделенном тексте, это должно включить значение для сегодняшнего дня, которое будет начинаться с 0 и увеличиваться по мере продвижения дня.
Почему участок здесь не заполнен. Он не заполнен до января 2014 года. Пожалуйста, объясните, в чем проблема. Этот график был построен с использованием кода WHRoeder, но даже тот, который предложил GumRai, также дает такой же неполный график.