[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 169

 
Vinin >>:

А чему i равно?

Я хотел показать лишь основные моменты - i определяется как:

   int counted_bars = IndicatorCounted(),i;
   i = Bars - counted_bars - 1;

   while(i>=0) {


т.е. начинает с наибольшего бара и доходит до нуля.

Если я держу Индикатор работающим то для 0-х значений i все начинает работать (рисует прямоугольники для текущих

значений и т.д.), но на истории нет ничего. Я думал возможно это как-то связано с определением массива?!

 
chief2000 писал(а) >>

Я хотел показать лишь основные моменты - i определяется как:

т.е. начинает с наибольшего бара и доходит до нуля.

Если я держу Индикатор работающим то для 0-х значений i все начинает работать (рисует прямоугольники для текущих

значений и т.д.), но на истории нет ничего. Я думал возможно это как-то связано с определением массива?!

Тогда придется полный код индикатора показать.

 
Vinin >>:

Тогда придется полный код индикатора показать.

Вот код - я убрал все что не относилось к проблеме:

 
#property indicator_chart_window
#property indicator_buffers 4



int    i;


// ------------------------------------------------------
extern int RSI_Periods = 14;
extern int Percent_K   = 14;

//---- buffers
// double Buffer1[];
double Buffer1[99000];

// double Current_RSI,Lowest_RSI,Highest_RSI,sum_K;
// ------------------------------------------------------




  
int init() {
   return(0);
}




// -------------------------------------------------------------------------------
int start() {

   int counted_bars = IndicatorCounted(),i;
   i = Bars - counted_bars - 1;

   while(i>=0) {

// ============================================================================================
      double Current_RSI, Lowest_RSI, Highest_RSI;


      Current_RSI    = iRSI(NULL,0,RSI_Periods,PRICE_TYPICAL,i);
      Highest_RSI    = Current_RSI;
      Lowest_RSI     = Current_RSI;

      for(int x=i+1; x<=Percent_K+i+1; x++){
         Lowest_RSI  = MathMin(Lowest_RSI, iRSI(NULL,0,RSI_Periods,PRICE_TYPICAL,x));
         Highest_RSI = MathMax(Highest_RSI,iRSI(NULL,0,RSI_Periods,PRICE_TYPICAL,x));
      }


      Buffer1[i]     = ((Current_RSI-Lowest_RSI) / (Highest_RSI-Lowest_RSI)) * 100;
// ============================================================================================



   Comment(
      "\n",
      "\n",
      "\n",
      "\n",
      "\n", "Current_RSI = "  , Current_RSI,
      "\n", "Highest_RSI = "  , Highest_RSI,
      "\n", "Lowest_RSI = "  , Lowest_RSI,
      "\n", "Percent_K = "  , Percent_K,
      "\n", "((Current_RSI-Lowest_RSI) / (Highest_RSI-Lowest_RSI)) * 100 = "  , ((Current_RSI-Lowest_RSI) / (Highest_RSI-Lowest_RSI)) * 100,
      "\n", "iRSI(NULL,0,RSI_Periods,PRICE_TYPICAL,i) = "  , iRSI(NULL,0,RSI_Periods,PRICE_TYPICAL,i),
      "\n", "i = "  , i,
//      "\n", "Percent_K = "  , Percent_K,
//      "\n", "Percent_K = "  , Percent_K,
      "\n",
      "\n",
      "\n", "Buffer1[i+30] = ",Buffer1[i+30],
      "\n", "Buffer1[i+12] = ",Buffer1[i+12],
      "\n", "Buffer1[i+1] = ", Buffer1[i+1],
      "\n", "Buffer1[i] = "  , Buffer1[i],
      "\n",
      "\n"
   );


      i--;
   }


   return(0);
}
 

С чего начать писать  void ManagePositions() по сведующим условиям

Есть массивы
for (tf = 0; tf < 5; tf++) 
{
......
int TF[tf] - time frame {5,15,30,60,240}
int signal[tf]        - „1“ – buy
                        - „2“ – close buy
                        - „-1“ – sell
                       - „-2“ – close sell
int mn_b[tf] - magic_number_buy разный для всех time frame
int mn_s[tf] - magic_number_sell разный для всех time frame
}

Надо
Open
на time frame 5,15 открывается в одну сторону до трех ордеров
- 1 ордер ММ = 1  Моней
- 2 ордер ММ = 2
- 3 ордер ММ = 3
на time frame 30 открывается в одну сторону до двух ордеров
- 1 ордер ММ = 2
- 2 ордер ММ = 3

на time frame 60 открывается в одну сторону один ордер
- 1 ордер ММ = 3

на time frame 240 неоткрывается

Доливка второго и третего ордеров по отдельным условиям

Всего получается не больше 9 ордеров в одну сторону  

Close
При появлении сигнала с time frame close sell закрывает все ордера sell на данном ТФ 
При появлении сигнала с time frame close buy закрывает все ордера buy на данном ТФ 


Помогите пожалуйста

 

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

Заранее спасибо!

 

Ветка И.Кима 'Полезные функции от KimIV'

Функция GetTicketLastPos(). Стр.19
Эта функция возвращает тикет последней открытой позиции или -1. 
Функция GetIndexLastPos(). Стр.17
Эта функция возвращает индекс последней открытой позиции или -1.
Функция IndexByTicket(). Стр.12
Возвращает индекс (порядковый номер в общем списке установленных ордеров или открытых позиций) ордера или позиции по тикету. Если функция IndexByTicket() не сможет найти ордер или позицию с нужным тикетом, то она вернёт -1





 
rid >>:

Ветка И.Кима 'Полезные функции от KimIV'

Функция GetTicketLastPos(). Стр.19
Эта функция возвращает тикет последней открытой позиции или -1. 
Функция GetIndexLastPos(). Стр.17
Эта функция возвращает индекс последней открытой позиции или -1.
Функция IndexByTicket(). Стр.12
Возвращает индекс (порядковый номер в общем списке установленных ордеров или открытых позиций) ордера или позиции по тикету. Если функция IndexByTicket() не сможет найти ордер или позицию с нужным тикетом, то она вернёт -1





Благодарю за помощь!

 
chief2000 >>:

Вот код - я убрал все что не относилось к проблеме:


Нашел причину - надо:

i = Bars-30 - counted_bars - 1;

вместо

i = Bars - counted_bars - 1;


Спасибо!

 

Еще базисный вопрос к моему коду выше - точно такой же Индикатор бежит отдельно

и рисует линию в окне ниже основного (а в верхнем окне другой добавляет другие графические обьекты).

Два for-цикла внутри while() заметно подгружают компьютер.

- Можно ли одним кодом одновременно создавать прямоугольники, стрелки и т.д. вверху и линию

(кривая по типу RSI) внизу?