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

 

разбираюсь потиху. Вот не пойму в чём дело?

Вот так всё работает (закоментирована строка )

      int  time = V_iTime(first_instrument, Period(), 4);
      int  symb2Shift = V_iBarShift(seconds_instrument, Period(), time, TRUE);
      int  bar = V_iBars(first_instrument, Period());
      double close_3 = V_iClose(first_instrument, Period(), 4);
      double close_4 = V_iClose(seconds_instrument, Period(), symb2Shift);
//      double spread_2 = close_3 / close_4;
      double close_1 = V_iClose(first_instrument, Period(), 4);
      double close_2 = V_iClose(seconds_instrument, Period(), 4);
      double spread = close_1 / close_2;

      // Позиции по обоим инструментам уже открыты
      Comment("Positions for " + first_instrument + " and " + seconds_instrument + " is open."+
      "\nTotal profit: $" + currentprofit +
      "\nLots1 =" + Lots_1 +
      "\nLots2 =" + Lots_2 +
      "\ntime =" + time +
      "\nsymb2Shift =" + symb2Shift +
      "\nbar =" + bar +
      "\nclose_3 =" + close_3 +
      "\nclose_4 =" + close_4 +
      "\nclose_1 =" + close_1 +
      "\nclose_2 =" + close_2 +
      "\nspread =" + spread);// +
//      "\nspread_2 =" + spread_2);

а если раскомментировать double spread_2 = close_3 / close_4; то не отображается, хотя данные теже самые

Не подскажите в чём может быть дело?

Там на базе Spredera пока вношу постепенные изменения, не обращайте внимания если что.

Важно понять как оно работает, потом посновить лишнее.

Файлы:
 
Вся идея подобного тестера заключена в первой фразе начала этой ветки:
getch:
Простота идеи заключается в том, что надо только реализовать работу с виртуальными ордерами. Т.е. написать аналоги штатным Orders-функциям: OrderSend, OrderClose, OrderProfit, OrderSelect, ....
Соответственно, виртуальные V_iTime, V_iBarShift и т.д. не нужны.
 
hrenfx:
Вся идея подобного тестера заключена в первой фразе начала этой ветки:Соответственно, виртуальные V_iTime, V_iBarShift и т.д. не нужны.


я конечно попробую поэкспериментировать без этих функций, но думаю что все сложнее.

В своём примере getch использовал помимо основных виртуальных функций для работы с ордерами, ещё и iClose участвующие в расчётах. Если убрать V_iClose то перестаёт работать.

   double x1 = V_iClose(first_instrument, Period(), 0) - V_iClose(first_instrument, Period(), period); 
   double x2 = V_iClose(first_instrument, Period(), period) - V_iClose(first_instrument, Period(), period * 2); 
   double y1 = V_iClose(seconds_instrument, Period(), 0) - V_iClose(seconds_instrument, Period(), period); 
   double y2 = V_iClose(seconds_instrument, Period(), period) - V_iClose(seconds_instrument, Period(), period * 2); 

в первом окне первоначальный вариант во втором без V_iClose (просто iClose)

 
А про МТ5 слышали? Чем не устраивает Тестер?
 
Serj_Che:
А про МТ5 слышали? Чем не устраивает Тестер?

мне бы с 4-ой разобраться )). Хотя если ничего не выйдет, буду осваивать 5-ку.
 
Vitya:

мне бы с 4-ой разобраться )). Хотя если ничего не выйдет, буду осваивать 5-ку.
Не трать время зря, (время -деньги) лучше сразу переходи, полюбому вопросы возникнут. Спрашивай кто нить поможет.
 
Vitya:

В своём примере getch использовал помимо основных виртуальных функций для работы с ордерами, ещё и iClose участвующие в расчётах.

Верно. По пунктам так:

  1. Подготавливаем виртуальное торговое окружение (V_Init) - позиций нет, начальный баланс равен BeginBalance.
  2. Начинаем идти по каждому бару (графика, на котором запущен V_Equity) от BeginTime до EndTime.
  3. Устанавливает текущее время (через V_SetTime) для советника, как время бара из пункта 2.
  4. Для текущего времени определяется соответствующий бар нужного символа (через неафишируемую GetCurrentBar).
  5. Найдя бар для каждого символа, определяются их текущие цены (через V_iClose и т.д.).
  6. Далее идет работа с виртуальным торговым окружением (V_MarketInfo, V_Account* и V_Order*) на основании текущих цен.