Индексация элементов массива выходит за рамки допустимого - либо отрицательная, либо больше, чем задано в массиве ячеек. Там если массив на 5 ячеек int Array[5], то индексация от 0 до 4 будет - Array[0] - Array[4] и любая другая индексация будет выдавать такое сообщение об ошибке в строке советника, где идет выборка ячейки массива (в сообщении указывается имя сова, номер строки с массивом и количество знаков, начиная слева в этой строке, где происходит ошибка выборки).при прогоне в тестере (с которой тоже не знаю что делать) - array out of range in '(советник)'.
Спасибо!(Батя напряг изучать MQL, и многое пока что не понятно).
Этот пробел вставляет движок форума. Есть ограничение на длину строки без пробелов.Имя библиотеки не "std lib.mqh" а "stdlib.mqh".
Этот пробел вставляет движок форума. Есть ограничение на длину строки без пробелов.
Проверь.Да нет, движок тут не при делах.
Артмен, а ты в школе изучал аглицкий? Что-то мне кажется что нет как и я.(Пробел выскочил в ".com".)Я уже исправил эту ошибку.Просто скачал другую библиотеку, и вписал её.Помогите пожалуйста с другой ошибкой
'calcTma' - function must have a body:
double calcTma(int inx); //это в глобальной области
У тебя-же нет ничего. Может её просто удалить? А если к ней есть обращения из программы, то надо написать всё что должна выполнять эта функция.функция должна иметь тело
Артмен, а ты в школе изучал аглицкий? Что-то мне кажется что нет как и я.
Я пользуюсь яндекс переводчиком и вот что он пишет
У тебя-же нет ничего. Может её просто удалить? А если к ней есть обращения из программы, то надо написать всё что должна выполнять эта функция.
Дружище, присоединяюсь к поздравлению! Всех с праздниками!Всех с наступившим!
Уважаемые, подскажите как добавить в сову контроль спреда.
Сова на стоповых отложках - что бы при превышении заданного спреда отложки удалялись.
if(MarketInfo(_Symbol,MODE_STOPLEVEL)>0)
{
VirtualOnly=false;
for(cnt=0; cnt<OrdersTotal(); cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol)
if((TpSell>0 && (int)(MathAbs(OrderOpenPrice()-TpSell)/_Point)<=MarketInfo(_Symbol, MODE_STOPLEVEL)) ||
(SlSell>0 && (int)(MathAbs(OrderOpenPrice()-SlSell)/_Point)<=MarketInfo(_Symbol, MODE_STOPLEVEL)))
VirtualOnly=true;
}
Исправил ошибки в тексте.В честь праздников хочу очередной глюк описать: Я использую автоматический переход с обычного трала на виртуальный и недавно нашел глюк на Робофорексе с этим связанный - получаемые данные (текущие котировки) имеют больше знаков после запятой и если их не приводить принудительно, то алгоритм не всегда будет работать. Я привожу кусок кода из моего сова как пример, но это не для новичков в программировании. В чем ссмысл опытные прогеры поймут. Обращать внимание на переменные не нужно. VirtualOnly - ключевая переменная, переводящая сова в виртуальный режим.
Дружище, с праздниками. У тебя в этих строках идет, насколько я понимаю, проверка на открытие не первых ордеров с минимальной дистанцией Min_dis, которую нужно привести к реальному стандарту (для любого счета) умножив на Point, т.е. if(Buy == 1 && Ask-OrderOpenPrice()>Min_dis*Point). Но не факт, что это единственная проблема - не видя всего кода всех проблем не увидишь.if(Buy == 1 && Ask-OrderOpenPrice()>Min_dis)
PHP:Buy = 1; } if(Buy == 1 && Ask-OrderOpenPrice()>Min_dis) { ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,Stoploss,Takeprofit,"Open_Buy",Magic,0,clrBuy); if(ticket>0)Buy = 0; else Print("Ошибка открытия ордера",err); }
Вот и я про что - это открытие уже не первых ордеров.А что вообще здесь делает: OrderOpenPrice()?
Что бы узнать цену открытия ордера, его предварительно нужно выбрать - из списка или по тикету. Вам какого ордера нужна цена открытия? Могу предположить, что последнего, так для этого нужно писать отдельную ф-цию. И еще одно: следует предусмотреть, что бы не было пачки ордеров на одном баре, т.к. у Вас будут открываться позиции на каждом тике на баре с сигналом.