Открытый проект - тестер-оптимизатор своими силами - страница 3

 
Здесь я выложил исходник - http://forexsystems.ru/phpBB/viewtopic.php?p=4379#4379
Можно посмотреть комментарии, которые пришлось удалить.
Там расписано назначение массивов TradeOrdersArray и ClosedOrdersArray. Ну и немного еще.
 
Переопределил торговую функцию OrderSend.
Функции 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);
  }
//+------------------------------------------------------------------+
 
В тексте есть серьезная ошибочка.
 
Спасибо тебе , Mak. Краткость - сестра таланта.
 
Rosh,
я просто хотел, чтобы Ренат сам посмотрел и нашел ошибку.
Но похоже они сюда не заглядывают или считают что мой пост глупый.
(цит. - "на глупые вопросы мы не отвечаем ..") - :))

Это к теме про недостатки синтаксиса MQL (и/или компилятора).
Компилятор никак не прореагирует на эту ошибку, хотя мог бы предупредить.
А я бы такое просто в языке запретил (неявное преобразование типов).

Конкретно.
Массив TradeOrdersArray имеет тип double.
В нескольких местах ты присваиваеш ему строковые значения.
Например:
TradeOrdersArray[myOrdersTotal,0]= symbol;


Компилятор все это скушает, и даже тестер работать будет, но не так как ты хотел.
И искать такую ошибку довольно сложно, особенно если она была сделана месяц назад,
а проявилась только сегодня, когда добавил пару строк в программу.

(Плз., скрипт поправь - стр. уехала, а то смотреть неудобно.)

 
А как мне тогда определить массив, в котором будут храниться данные разного типа?
Вот на это объявление
string comment=NULL
компилятор ругается.
Но я просто скопировал из словаря по шаблону.
 
А как мне тогда определить массив, в котором будут храниться данные разного типа?

Подозреваю что никак.
Только в 2-х разных массивах.