Ошибки, баги, вопросы - страница 3265

 
Есть ли функция, которая возвращает модель тестирования (Тики, контрольные точки, цены открытия) ?
 
Rashid Umarov #:

Ну так OnClaculate тоже нет. Как и OnStart. Так что видимо, эксперт.  Логично

@Rashid Umarov, я считал, что Вы можете без проблем найти тот код который не получается опубликовать в CodeBase. А тут я показал только начало кода.

Ну вот чуток продолжения

/**************Custom indicator initialization function**************/
int OnInit()
 {
  SetIndexBuffer(0, Breakeven_Buy);
  SetIndexBuffer(1, Breakeven_Sell);
  PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0);
  PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, 0.0);
  IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
  plotShift();
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/****************Custom indicator iteration function*****************/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
 {
  double tickSize     = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
  if(posTotal != PositionsTotal())

Как видите OnClaculate присутствует. Видимо всё-же индикатор. Да и на графике МТ ведёт себя как индикатор.

Вот ссылка на неопубликованный индикатор https://www.mql5.com/ru/code/41544/comments

 
Konstantin Kulikov #:
Есть ли функция, которая возвращает модель тестирования (Тики, контрольные точки, цены открытия) ?
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ru/code/26132

void OnStart()
{  
  string Str;
  
  if (MTTESTER::GetSettings2(Str))
  {
    static const string Models[] = {"Every Ticks", "OHLC M1", "Open prices", "Math", "Real Ticks"};

    Alert(Models[(int)StringSubstr(Str, StringFind(Str, "Model=") + StringLen("Model="))]);
  }
}
 
vponed #:

Беру шаблон с графическими объектами. Копирую его в tester.tpl

Ожидаю увидеть эти объекты в тестере. И вижу их при визуальном тестировании.
Но как только прогоняю не в визуале - их нет.

Неработающий код:
 for(int i = 0; i < ObjectsTotal(0, 0); i++) {
Print("obj");
}

Obj нельзя увидеть никогда, так как нет объектов.

Верно, само спросили и сами ответили... В не визуальном режиме получить данные объектов нельзя, ни в тестере ни в оптимизации. Потому что, их нет.

 
Почему опять отключили проверку при делении на ноль? Как её включить?
 
Я просил удалить аккаунт. Сколько раз это нужно делать? Это уже утомляет.
 
adm B. #:
Я просил удалить аккаунт. Сколько раз это нужно делать? Это уже утомляет.

Только смотри не удавись от утомления.

 
Vladimir Pastushak #:

Верно, само спросили и сами ответили... В не визуальном режиме получить данные объектов нельзя, ни в тестере ни в оптимизации. Потому что, их нет.

Ужасно неудобно. Вот код для разбора tpl файла на прямоугольники, может кому пригодится:

struct dayly_rect {
   double            rect_high, rect_low;  datetime rect_right_time, rect_left_time; string buy_sell; };
dayly_rect dr; double rect_low, rect_high; MqlDateTime rect_right_time, rect_left_time;
dayly_rect a_all_rect[];

string listoffile[]; dayly_rect obj; int obj_num = 0;
   ReadFileToArray("сбер_дневка_ретесты_боковики.tpl", listoffile);
   for(int i = 0; i < listoffile.Size(); i++) {
      if(listoffile[i] == "<object>") {
         obj_num++; ArrayResize(a_all_rect, obj_num);          }
      if(StringFind(listoffile[i], "type", "") > 0 || StringFind(listoffile[i], "name", 0) > -1 || StringFind(listoffile[i], "filling", 0) > -1) continue;
      if(StringReplace(listoffile[i], "date1=", "") > 0) {
         a_all_rect[obj_num - 1].rect_left_time = int(listoffile[i]); }
      if(StringReplace(listoffile[i], "date2=", "") > 0) { a_all_rect[obj_num - 1].rect_right_time = int(listoffile[i]); }
      if(StringReplace(listoffile[i], "value1=", "") > 0) {  rect_high = int(listoffile[i]); }
      if(StringReplace(listoffile[i], "value2=", "")   > 0) { rect_low = int(listoffile[i]); }
      if(StringReplace(listoffile[i], "descr=", "")   > 0) { a_all_rect[obj_num - 1].buy_sell = listoffile[i]; }
      if(rect_high > rect_low) {
         a_all_rect[obj_num - 1].rect_high = rect_high; a_all_rect[obj_num - 1].rect_low = rect_low; }
      if(rect_high < rect_low) {
         a_all_rect[obj_num - 1].rect_high = rect_low; a_all_rect[obj_num - 1].rect_low = rect_high; }

}


 
vponed #:

Ужасно неудобно. Вот код для разбора tpl файла на прямоугольники, может кому пригодится:

Подсказка, Вы же создаете обьекты, цена, время. Храните их данные в переменных и получайте от туда. Не используйте ObjectGet

 
Alexey Viktorov #:

@Rashid Umarov, я считал, что Вы можете без проблем найти тот код который не получается опубликовать в CodeBase. 

Зря так считаете. Задач столько, что никто не будет метаться по обрывкам информации что-то искать

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