Почему не работает такая конструкция ?

 

for (int i=Bars; i>=0;i--)
{
int first=Bars;
Buffer[i]=Open[first];

}

Почему такая конструкция (вроде простейщая) не работает О_о ? Хотя не суть, просто запарился, подскажите лучше, пожалуста, как получить значение Open последнего в истории бара, ну того, который равен Bars... Я похоже что-то напутал, мне нужен самый первый, если считать слева направо или самый последний, если считать справа налево опен. Чет парюсь, не знаю как получить.
 
Потому что баров у нас 1000 (Bars == 1000), а индексы от 0 до 999. И непонятен смысл конструкции. Залить буфер значениями Open самого старого бара?
 
ask >>:

for (int i=Bars; i>=0;i--)
{
int first=Bars;
Buffer[i]=Open[first];

}

Почему такая конструкция (вроде простейщая) не работает О_о ? Хотя не суть, просто запарился, подскажите лучше, пожалуста, как получить значение Open последнего в истории бара, ну того, который равен Bars... Я похоже что-то напутал, мне нужен самый первый, если считать слева направо или самый последний, если считать справа налево опен. Чет парюсь, не знаю как получить.

Open[Bars-1] : нумерация элементов массива как в С/C++ :

int a[N] - первый элемент a[0], последний a[N-1]

Удачи..

 

wise, VladislavVG

СПАСИБО БОЛЬШОЕ, все заработало, добавил -1 и все встало на свои места :)

 

//--------------------------------------------------------------- 0 ----------------

int start() // Спец.функция start

{

int H=100; // Заданное время - секунда

int Dist=10; // Заданный TP и SL

double Lot =1; // Заданный лот

//--------------------------------------------------------------- 1 ----------------

double i=0.001;

double Cena=NormalizeDouble(Ask,3); // Нормализуем цену

double Price=NormalizeDouble(Cena+i,5); // Находим цену

double TP=Price+Dist*Point; // Находим ТР

double SL=Price-Dist*Point; // Находим SL

int x=1; // Первое условие

int y=1; // Второе условие

//--------------------------------------------------------------- 2 ----------------

for (int pos=0; pos<=OrdersTotal(); pos++) // цикл перебора всех ордеров

{ if (OrderSelect(pos,SELECT_BY_POS)==true) // выделим ордер

{ if (OrderTakeProfit()==TP)

{ Alert("Сработал х");

x=2;

if (OrderOpenPrice()==Price)

{ Alert("Сработал y");

y=2;

break;

}

}

}

else Print("Ошибка ", GetLastError(), " при выборе ордера номер ", pos);

}

//--------------------------------------------------------------- 3 ----------------

if (x==2&&y==2)

{ Alert("Такой ордер уже есть!!!");}

else { Alert("отправлен ордер ",Symbol()," BUYSTOP ", Price," Ожидание ответа...");

OrderSend(Symbol(), OP_BUYSTOP, Lot, Price, 0, SL, TP);

}

Sleep(H*60); // Ждём 60 секунд

RefreshRates();

//--------------------------------------------------------------- 4 -------------------

Alert ("Скрипт закончил работу -----------------------------");

return; // Выход из start()

}


Почему не работает. По задумке должен например:

Ask=1.35684 Открылся ордер с ценой 1,35700, TP=1.35800, SL=1.35600

Ask=1.35681 Ничего не происходит с ордерами

Ask=1.35692 Ничего не происходит с ордерами

Ask=1.35699 Ничего не происходит с ордерами

Ask=1.35715 Открылся ордер с ценой 1,35800, TP=1.35900, SL=1.35700

Ask=1.35757 Ничего не происходит с ордерами

Ask=1.35791 Ничего не происходит с ордерами

Ask=1.35802 Открылся ордер с ценой 1,35900, TP=1.36000, SL=1.35800

А он начинает создавать много ордеров с ценой 1,35700, TP=1.35800, SL=1.35600

Причина обращения: