Здесь я выложил исходник - http://forexsystems.ru/phpBB/viewtopic.php?p=4379#4379 Можно посмотреть комментарии, которые пришлось удалить. Там расписано назначение массивов TradeOrdersArray и ClosedOrdersArray. Ну и немного еще.
Пришлось все переменные перетащить из блока init() в заголовок - иначе переменные не видны. Первая моя ошибка. Второе - ругается компилятор на попытку задать в функции значение параметра по умолчанию равным NULL. Третье - компилятор не ругается при встрече в коде неописанной/неопределенной функции (CorrectPrice() и DrawArrowOnChart() ). Возможно, он спотыкается с NULL и дальше не ругается. Дефиницию функции делал тупо - скопировал из словаря, так что если разработчики будут меня ругать неправильным объявлением ....
//+------------------------------------------------------------------+
//| Redefine OrderSend() function |
//+------------------------------------------------------------------+
int fut_OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit,
string comment=[b]NULL[/b],int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
{
if (CorrectPrice(symbol,cmd,price,myCurrentTime))
{
TradeOrdersArray[myOrdersTotal,0]= symbol;
TradeOrdersArray[myOrdersTotal,1]=pool_pos;
TradeOrdersArray[myOrdersTotal,2]=myOrderTicket+1;
TradeOrdersArray[myOrdersTotal,3]=cmd;
TradeOrdersArray[myOrdersTotal,4]=volume;
TradeOrdersArray[myOrdersTotal,5]=price;
TradeOrdersArray[myOrdersTotal,6]=slippage;
TradeOrdersArray[myOrdersTotal,7]=stoploss;
TradeOrdersArray[myOrdersTotal,8]=stoploss;
TradeOrdersArray[myOrdersTotal,9]=comment;
TradeOrdersArray[myOrdersTotal,10]=magic;
TradeOrdersArray[myOrdersTotal,11]=myCurrentTime;
DrawArrowOnChart(symbol,myCurrentTime,price,arrow_color);
myOrderTicket++;
myOrdersTotal++;
pool_pos++;
return(myOrderTicket);
}
else return(-1);
}
Завтра постраюсь переопределить OrderClose() - там уже легче будет объяснять идею тестирования. PS Два человека уже скачали - есть надежда
Можно посмотреть комментарии, которые пришлось удалить
Rosh, я понял как в этом форуме вставлять русский текст ( сам сталкивался пришлось разобраться :) Просто когда копируешь код в эдиторе, у тебя должен стоять русский язык, т.е. как бы пишешь на русском. И при вставке в форум, соответственно, тоже. И все комменты сохранятся ;)
Ренат, Слава .. Вот хороший пример к обсуждению про пустой оператор. Неявное преобразование типов намного хуже и опаснее ";" после скобки. В данном случае имеем явную ошибку, но компиллятор даже предупреждения не выдаст.
Rosh, я просто хотел, чтобы Ренат сам посмотрел и нашел ошибку. Но похоже они сюда не заглядывают или считают что мой пост глупый. (цит. - "на глупые вопросы мы не отвечаем ..") - :))
Это к теме про недостатки синтаксиса MQL (и/или компилятора). Компилятор никак не прореагирует на эту ошибку, хотя мог бы предупредить. А я бы такое просто в языке запретил (неявное преобразование типов).
Конкретно. Массив TradeOrdersArray имеет тип double. В нескольких местах ты присваиваеш ему строковые значения. Например:
TradeOrdersArray[myOrdersTotal,0]= symbol;
Компилятор все это скушает, и даже тестер работать будет, но не так как ты хотел. И искать такую ошибку довольно сложно, особенно если она была сделана месяц назад, а проявилась только сегодня, когда добавил пару строк в программу.
(Плз., скрипт поправь - стр. уехала, а то смотреть неудобно.)
Можно посмотреть комментарии, которые пришлось удалить.
Там расписано назначение массивов TradeOrdersArray и ClosedOrdersArray. Ну и немного еще.
Функции CorrectPrice() и DrawArrowOnChart() пока не определены.
Выложил здесь - http://forexsystems.ru/phpBB/viewtopic.php?p=4380#4380
Пришлось все переменные перетащить из блока init() в заголовок - иначе переменные не видны. Первая моя ошибка.
Второе - ругается компилятор на попытку задать в функции значение параметра по умолчанию равным NULL.
Третье - компилятор не ругается при встрече в коде неописанной/неопределенной функции (CorrectPrice() и DrawArrowOnChart() ).
Возможно, он спотыкается с NULL и дальше не ругается.
Дефиницию функции делал тупо - скопировал из словаря, так что если разработчики будут меня ругать неправильным объявлением ....
//+------------------------------------------------------------------+ //| Redefine OrderSend() function | //+------------------------------------------------------------------+ int fut_OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=[b]NULL[/b],int magic=0, datetime expiration=0, color arrow_color=CLR_NONE) { if (CorrectPrice(symbol,cmd,price,myCurrentTime)) { TradeOrdersArray[myOrdersTotal,0]= symbol; TradeOrdersArray[myOrdersTotal,1]=pool_pos; TradeOrdersArray[myOrdersTotal,2]=myOrderTicket+1; TradeOrdersArray[myOrdersTotal,3]=cmd; TradeOrdersArray[myOrdersTotal,4]=volume; TradeOrdersArray[myOrdersTotal,5]=price; TradeOrdersArray[myOrdersTotal,6]=slippage; TradeOrdersArray[myOrdersTotal,7]=stoploss; TradeOrdersArray[myOrdersTotal,8]=stoploss; TradeOrdersArray[myOrdersTotal,9]=comment; TradeOrdersArray[myOrdersTotal,10]=magic; TradeOrdersArray[myOrdersTotal,11]=myCurrentTime; DrawArrowOnChart(symbol,myCurrentTime,price,arrow_color); myOrderTicket++; myOrdersTotal++; pool_pos++; return(myOrderTicket); } else return(-1); }Завтра постраюсь переопределить OrderClose() - там уже легче будет объяснять идею тестирования.
PS Два человека уже скачали - есть надежда
Rosh, я понял как в этом форуме вставлять русский текст ( сам сталкивался пришлось разобраться :)
Просто когда копируешь код в эдиторе, у тебя должен стоять русский язык, т.е. как бы пишешь на русском. И при вставке в форум, соответственно, тоже.
И все комменты сохранятся ;)
Вот хороший пример к обсуждению про пустой оператор.
Неявное преобразование типов намного хуже и опаснее ";" после скобки.
В данном случае имеем явную ошибку, но компиллятор даже предупреждения не выдаст.
Rosh,
страница опять уехала.
int fut_OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE) { if (CorrectPrice(symbol,cmd,price,myCurrentTime)) { TradeOrdersArray[myOrdersTotal,0]= symbol;// записали иструмент TradeOrdersArray[myOrdersTotal,1]=pool_pos;// записали номер в списке терминала TradeOrdersArray[myOrdersTotal,2]=myOrderTicket+1;// записали номер тикета у брокера TradeOrdersArray[myOrdersTotal,3]=cmd;// записали тип ордера TradeOrdersArray[myOrdersTotal,4]=volume;// записали размер ордера TradeOrdersArray[myOrdersTotal,5]=price;// записали цену открытия TradeOrdersArray[myOrdersTotal,6]=slippage;// записали проскальзывание в пунктах TradeOrdersArray[myOrdersTotal,7]=stoploss;// записали stoploss TradeOrdersArray[myOrdersTotal,8]=stoploss;// записали takeprofit TradeOrdersArray[myOrdersTotal,9]=comment;// записали комментарии TradeOrdersArray[myOrdersTotal,10]=magic;// записали MagicNumber TradeOrdersArray[myOrdersTotal,11]=myCurrentTime;// записали дату выставления/открытия ордера DrawArrowOnChart(symbol,myCurrentTime,price,arrow_color); myOrderTicket++; myOrdersTotal++; pool_pos++; return(myOrderTicket); } else return(-1); } //+------------------------------------------------------------------+я просто хотел, чтобы Ренат сам посмотрел и нашел ошибку.
Но похоже они сюда не заглядывают или считают что мой пост глупый.
(цит. - "на глупые вопросы мы не отвечаем ..") - :))
Это к теме про недостатки синтаксиса MQL (и/или компилятора).
Компилятор никак не прореагирует на эту ошибку, хотя мог бы предупредить.
А я бы такое просто в языке запретил (неявное преобразование типов).
Конкретно.
Массив TradeOrdersArray имеет тип double.
В нескольких местах ты присваиваеш ему строковые значения.
Например:
Компилятор все это скушает, и даже тестер работать будет, но не так как ты хотел.
И искать такую ошибку довольно сложно, особенно если она была сделана месяц назад,
а проявилась только сегодня, когда добавил пару строк в программу.
(Плз., скрипт поправь - стр. уехала, а то смотреть неудобно.)
Вот на это объявление
Но я просто скопировал из словаря по шаблону.
Подозреваю что никак.
Только в 2-х разных массивах.