ArrayCopySeries или "как испортить бар?"

 

High[], Low[], Open[], Close[] - эти массивы не изменить, но через ArrayCopySeries() можно менять в них значения


#property copyright "Roffild"
#property link      ""
//---------------------------------------
#property indicator_chart_window
//---------------------------------------

int start()
{
   double Price[];
   
   ArrayCopySeries(Price, MODE_CLOSE, NULL, Period());
   Price[0] = Open[0];

   // High[0] = Open[0]; - Ошибка компиляции!

   return;
}


Вместо MODE_CLOSE можно подставить любой из этих параметров и посмотреть на интересный результать


В доках об этом ничего не увидел, так что мозг расплавился в поисках причины "странного поведения"

 

почему же ничего нет? вот цитата из доки по ArrayCopySeries:

Реального распределения памяти под массив данных и копирования не происходит. При обращении к такому массиву производится перенаправление доступа.

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

но даже если вы "сбросите" так текущу цену на цену открытия, ордер будет открываться по настоящей рыночной цене, а не через вашу подставу ;)

вот более прикольный вариант вашего индикатора:

#property copyright "Roffild"
#property link      ""
//---------------------------------------
#property indicator_chart_window
//---------------------------------------

int start()
{
   double Price[];
   
   ArrayCopySeries(Price, MODE_HIGH, NULL, Period());
   
    for(int i = 0; i < 20; i++) 
    {
      double add = MathRand(); while(add > 1) add /=10;
      Price[i] += add;
    }
   return;
}