Ето аз как бих направил кода. Стартираш еднократно CreateAllBars() и готово. Трябва обаче да допишеш участъка, в който бара се добавя в масива.
Код:
int слочаенос()
{
return((MathRand()&1)*2-1); // С вероятност 50% връща или +1 или -1
}
//+------------------------------------------------------------------+
double Open, High, Low, Close, LastBid;
int Volume;
void CreateAllBars()
{
LastBid = 1.0; // От тази цена започва графиката
for(int i=0; i<5000000; i++) CreateNewBar(); // Генерират се 5 милиона бара
}
void CreateNewBar() // Създава един бар в глобалните променливи Open, High, Low, Close и Volume
{
High = 0;
Low = 1.7976931348623158e+308; // Максимално възможната стойност на double
Volume = 0; // В бара все още няма тикове
double newBid;
for(int i=MathRand()&15+5; i>0; i--) // В бара се добавят случаен брой тикове между 5 и 20
{
newBid = LastBid + пипонъ*слочаенос(); // Цената се повишава или намалява с 1 пипс с вероятност 50%
AddTickToBar(newBid); // Тика се добавя в текущия бар
LastBid = newBid; // Запомняме новия тик
}
// Бара вече е готов и се намира в променливите Open, High, Low, CLose и Volume
// Тука трябва да се доокомплектова бара, като му се добави и време, и след това да се запише в масива (да се добави в графиката)
}
void AddTickToBar(double bid) // Добая тик в текущия бар
{
if (Volume==0) Open = bid;
if (High < bid) High = bid;
if (Low > bid) Low = bid;
Close = bid;
Volume++;
}
//+------------------------------------------------------------------+