Простая идея мультивалютного тестера с примером реализации - страница 2

 

Как дорабатывается V_Trading на примере добавки мэджика к виртуальным ордерам:

double OrdersMagicNumber[MAX_ORDERS];

int V_OrderMagicNumber()
{
  return(OrdersMagicNumber[CurrentOrder]);
}

// в V_OrderSend добавить строчку:
OrdersMagicNumber[Pos] = magic;
 

Мультивалютные стратегии слабо распространены, но, несмотря на это, они уже подвергаются некоторой классификации. Например, кластерный тип.

Работоспособность и особенности такого советника с помощью минимальной переделки можно также проверить на истории вышенаписанным методом.

 
В первом посте при конвертации советника Spreader в виртуальный аналог V_Spreader.mqh были допущены ошибки.
Прилагаю исправленный вариант.
Файлы:
 
getch >>:
Простота идеи заключается в том, что надо только реализовать работу с виртуальными ордерами. Т.е. написать аналоги штатным Orders-функциям: OrderSend, OrderClose, OrderProfit, OrderSelect, ....

 Так в кодебазе есть пара вариантов . Могу предложить свое, не совсем проверенное остыл к теме .

Файлы:
virttorg.mq4  57 kb
 
getch >>:

Мультивалютные стратегии слабо распространены, но, несмотря на это, они уже подвергаются некоторой классификации. Например, кластерный тип.

Работоспособность и особенности такого советника с помощью минимальной переделки можно также проверить на истории вышенаписанным методом.

Правильной дорогой идёте, товарищи. (я так думаю.)

 
ivandurak >>:

 Так в кодебазе есть пара вариантов . Могу предложить свое, не совсем проверенное остыл к теме .

Дело не в написании виртуальных функций, а в их применении.
Простой подход реализации виртуальных функций показан в файле V_Trading.
Тестер MT4 - это и есть виртуальные функции на одном символе.
Тестер MT5 - на нескольких символах. Эта же идея применяется на примере в первом посте.

 
getch >>:

Дело не в написании виртуальных функций, а в их применении.
Простой подход реализации виртуальных функций показан в файле V_Trading.
Тестер MT4 - это и есть виртуальные функции на одном символе.
Тестер MT5 - на нескольких символах. Эта же идея применяется на примере в первом посте.


  Так тестера в пятерке вроде нет еще . Он точно будет мульвалютный ? Если да,тогда и не стоит огород городить будем подождать, если нет то наверно лучше свой скажем на Си писать . А еще тестер должен хоть как то оптимизировать .
 
В теме предлагается простейшая идея мультивалютного тестера для MT4 с примером. Не больше, не меньше.
 

Есть ли кто желающий немного доработать данные библиотеки и индикатор и совместить с другим (моим) советником?

А вдруг у кого-то в сей чудный воскресный день так и чешутся руки по-программировать немного :)

 
Есть такая строка
      symb2Shift = iBarShift(seconds_instrument, Period(), iTime(first_instrument, Period(), k), TRUE);
при вызове виртуальной функции сделал так
      symb2Shift = V_iBarShift(seconds_instrument, Period(), V_iTime(first_instrument, Period(), k), TRUE);
сами виртуальные функции переделал так
int V_iBarShift( string symbol, int timeframe, int time, bool exact=true) 
{
  int Res = iBarShift(symbol, timeframe, time, true);

  return(Res);
}

int V_iTime( string symbol, int timeframe, int shift )
{
  double Res;
  int tmp = GetCurrentBar(symbol, timeframe);
  
  if (shift == 0)
    Res = iTime(symbol, timeframe, tmp);
  else
    Res = iTime(symbol, timeframe, tmp + shift);
    
  return(Res);
}

Вопрос, правильно ли это?

И ещё один момент хотелось бы уточнить.

Если есть допустим функция расчёта среднестатистического спреде

//====== Функция расчета среднестатистического спреда ======+
double AvarageSpread(string Symbol_1, string Symbol_2, int Timeframe, int NBars) {
   int symb2Shift;
   double N = 0;
   double Sum = 0;
   for (int k = Last_bars; k < iBars(Symbol_1, Timeframe); k++) {
      if (N == NBars) break; //- задаем число баров для расчета
      symb2Shift = iBarShift(Symbol_2, Timeframe, iTime(Symbol_1, Timeframe, k), TRUE);
      if (symb2Shift != -1) { // - синхронизируем бары
         Sum += iClose(Symbol_1, Timeframe, k) / iClose(Symbol_2, Timeframe, symb2Shift);
         N++;
         // - вычисляем суммарный спред на заданном количестве баров
         //Далее, вычисляем среднестатистический спред :
      }
   }
   double avarageSpread = Sum / N;
   return (avarageSpread);//конец функции
}

то если нужно протестировать советника использующего эту функцию через приведённый в это ветке мультивалютный тестер, то всё равно этот расчёт нужно пропускать через виртуальные функции и любые другие расчёты тоже?

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