Осциллятор Equity средствами MQL5 - страница 6

 
joo:

ПисАть в файл лучше как можно реже, поэтому лучше целым массивом. Значения замерять не чаще, чем один раз в минуту, иначе будут проблемы с отображением на чарте (да и неоправданно ресурсоемко это). То есть в конце прогона. Но возможен и такой вариант:

Алгоритм вырисовывается так:

1) Запустили эксперт в тестере.

2) Замерили интересующее значение.

3) Записали в файл это значение.

4) Записали в отдельный файл true, означающее, что записано новое значение

5) Запустили бесконечный цикл, условием выхода из которого является флаг false в файле с флагом.

6) В отдельном чарте скриптом читаем файл с флагом, если появилось новое значение, то рисуем риску на чарте, пишем в файл false.

Примерно так будет выглядеть визуальный режим тестирования в тестере.

Подождите немного, закончится конкурс, возможно будут представлены более изящные и красивые решения.

 

 joo, Подождите, какое еще интересующее значение, если значения интересуют все? :)

Я думаю, что так:

1. в OnTick эксперта потиково формируем программный массив состояний счета,

2. в конце тестирования записываем этот программный массив целиком в файл (лучше каждый параметр - в отдельный файл),

3. потом извлекаем в OnInit Индикатора указанный одномерный массив

4. и копируем его в массив индикатора потиково в OnCalculated.

Проблема только в том, что даже записать массив пока еще почему-то проблема (см. выше)

 
DV2010:

 Подождите, какое еще интересующее значение, если значения меня интересуют все? :)

Да хоть все.

DV2010:

Я думаю, что так -

1. в OnTick эксперта потиково формируем программный массив состояний счета,

2. в конце тестирования записываем этот программный массив целиком в файл (лучше каждый параметр - в отдельный файл),

Можно так.

DV2010:

3. потом извлекаем в OnInit Индикатора указанный одномерный массив

Почему в онините то? Один раз только что ли нужно? Вы ж говорили что нужно в чуть ли не в реалтайме следить за тестированием.

DV2010:

4. и копируем его в массив индикатора потиково в OnCalculated.

Проблема только в том, что даже записать массив пока еще почему-то проблема (см. выше)

Проблема будет в том, что нельзя отобразить потиковые данные на чарте. Если конечно Вы будете собирать тики, потом ....... Короче я Вас уже предупреждал - сохранять данные не чаще одного раза в минуту. Но если хотите анализировать скажем без привязки к торговому инструменту, то можно и в эксель файл загрузить.

 

joo, да нет же! :)

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

Скажите, на Ваш взгляд, почему отказывается записывать данные мой эксперт, код которого привел выше и ссылку на который даю ниже:

Файлы:
 
DV2010:

Rosh

, не могу понять, в чем именно причина, но в отличии от моих индикаторов, при запуске с Вашим, выдается сообщение:

Сделал сейчас на основе Вашего кода аналогичный простейший эксперт, который потиково должен записывать все значения Equity в файл (в коде изменил лишь вывод любого, в т.ч. нулевого количества записанных байтов, переменные сделал глобальными, а открытие файла и запись разнес в OnInit и OnTick), но хотя ошибка записи отсутствует и файл создается, записи и файл пусты.

 

Ничего не напутали?

FileClose(filename);
 
Rosh:

Ничего не напутали?

Напутал, но разница с исправленным   ( FileClose(handle); ) ощущается мало :) 

Все равно не пишет! :) При этом молчит как партизан (если не считать за "объяснение", что записывается 0 байт).

 
DV2010:

 

Напутал, но разница с исправленным   ( FileClose(handle); ) ощущается мало :) 

Все равно не пишет! :) При этом молчит как партизан (если не считать за "объяснение", что записывается 0 байт).

Не знаю, что Вы там делаете. Вот вариант, который работает

//+------------------------------------------------------------------+
//|                                          Demo_File_Common_EA.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//--- input parameters
input string   filename="equity.txt";
int handle;
string common_folder;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   common_folder=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
//---
   handle=FileOpen(filename,FILE_WRITE|FILE_READ|FILE_COMMON);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   FileClose(handle);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(handle!=INVALID_HANDLE)
     {
      FileSeek(handle,0,SEEK_END);
      uint written=FileWrite(handle,TimeToString(TimeCurrent()),AccountInfoDouble(ACCOUNT_EQUITY));
      if(written>0)
        {
         //PrintFormat("Записано %d байт в общую папку всех терминалов - %s",written,common_folder);
        }
     }
   else
     {
      Print("Не удалось открыть на запись файл ",filename,".  Ошибка ",GetLastError());
     }

  }
//+------------------------------------------------------------------+
 
Rosh:

Не знаю, что Вы там делаете. Вот вариант, который работает

Супер! Таким образом, для записи в файл кроме FileWrite требуется также еще и установка указателя через FileSeek.
Документация по MQL5: Файловые операции / FileWrite
Документация по MQL5: Файловые операции / FileWrite
  • www.mql5.com
Файловые операции / FileWrite - Документация по MQL5
 

... По уже затронутому вчера вопросу.

Вставил в OnTick и в OnCalculated:    

Print("ObjectsTotal =", ObjectsTotal(ChartID()));

но после завершения тестирования несмотря на наличие объектов, связанных с открытием и закрытием позиций (параметры стрелок и линий в Терминале видны по пути: Графики>Обэекты>Список объектов), возвращаемое значение почему-то равно 0.

Кто может подсказать, почему так происходит? 

Неужели тестер совсем не видит те объекты, которые создаются автоматически им самим?

 
DV2010:

Кто может подсказать, почему так происходит? 

Неужели тестер совсем не видит те объекты, которые создаются автоматически им самим?

Графические объекты, которые создаются при тестировании не имеют никакого отношения к объектам, которые присутствуют на графике, который открывается после окончания тестирования. То есть, из тестируемого советника никак не дотянуться к стрелкам входов/выходов, которые появятся после завершения тестирования советника.
 
Rosh:
Графические объекты, которые создаются при тестировании не имеют никакого отношения к объектам, которые присутствуют на графике, который открывается после окончания тестирования. То есть, из тестируемого советника никак не дотянуться к стрелкам входов/выходов, которые появятся после завершения тестирования советника.

Именно этого я и боялся!

Ну, что же, тогда придется над этими штатными объектами рисовать собственные, хотя все, что мне нужно - всего лишь изменять цвет линий в зависимости от знака результата (прибыль или убыток) соответствующих позиций, так как с точки зрения наиболее быстрого анализа распределения прибыльных и убыточных сделок цвет результата является гораздо более важным, чем цвет направления. Более важным - хотя бы потому, что направление вверх или вниз на графике можно увидеть и так (как по самому наклону линии, так и по цвету стрелок), в то время, как для понимания убыточности или доходности сделки при стандартном подходе каждый раз необходимо сопоставлять вид позиции с направлением движения рынка).

И хорошо, если позиций на тестере всего несколько. А если сотни или тысячи? При стандартном подходе увидеть распределение убыточных и доходных позиций в таком случае будет нереально, в то время, как если бы убыточные сделки были показаны красными линиями, а прибыльные - синими, распределение можно было бы увидеть, скорее всего, даже при самом малом масштабе. 

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

Многие просьбы со стороны трейдеров носят частный характер и имеют как свои плюсы, так и свои минусы, т.е. из разряда "на вкус и цвет" Возможность же настройки вида линий сделок на уровне интерфейса МетаТрейдера, мне кажется, сделала бы гораздо более комфортной анализ истории для многих трейдеров, при этом с программерной точки зрения, я думаю, сделать это просто, а минусы отсутствуют. Другими словами нужен альтернативный традиционному варианту оформления по виду позиций вариант оформления по результату сделок. Так может быть, добавите или хотя бы выставите это предложение на голосование среди участников форума?

Реализации же могут быть две:

1. Сделать связку рисования объектов с OnTcik экспертов, чтобы эти объекты можно было менять программно.

2. Добавить настройку на уровне оконного интерфейса.

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

Если же говорить в целом, то, на мой взгляд, именно тестер и именно визуализация эффективности сделок являются наиболее слабым моментом современной пятой версии. Пока мы имеем здесь лишь наследство от предыдущих версий в виде Графика и Результатов, но и те и другие позволяют судить лишь об эффективности эксперта в целом, да и то впечатление может сложиться обманчивое (и сколько раз уже так было, что общий график Equity эксперта - устойчиво восходящий, в то время, как при более внимательном изучении обнаруживаются и большие относительные просадки и прочие "сюрпризы").