Скачать MetaTrader 5

Кто мне поможет?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Занеси ветку в избранное. Отслеживай изменения еще быстрее!
Arduz
569
Arduz 2010.09.08 06:13 

Нашел такую проблему: У меня советник основан на графических объектах, а именно на трендовых линиях. В реальной торговле все прекрасно торгует, но при тестировании советник не совершает ни одной сделки. Чуть подумав решил вывести информацию о графических объектах при помощи Print(ObjectsTotal(0,0,OBJ_TREND)); и при тестировании в журнале мне показало "0", тобишь тестер объектов не видит, а значит и тестирование своего советника не представляется возможным. Написал в сервисдеск о этой проблеме мне ответили там:

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

На вопрос, не покажите ли как это делать на примере, мне дали всего вот эту ссылку  https://www.mql5.com/ru/docs/files , но я ума не приложу как же это можно сделать. Кто-нибудь сталкивался с этим? Как же все-таки это можно сделать? 

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
Nikolay Demko
12465
Nikolay Demko 2010.09.08 17:59  
arbuz:

Нашел такую проблему: У меня советник основан на графических объектах, а именно на трендовых линиях. В реальной торговле все прекрасно торгует, но при тестировании советник не совершает ни одной сделки. Чуть подумав решил вывести информацию о графических объектах при помощи Print(ObjectsTotal(0,0,OBJ_TREND)); и при тестировании в журнале мне показало "0", тобишь тестер объектов не видит, а значит и тестирование своего советника не представляется возможным. Написал в сервисдеск о этой проблеме мне ответили там:

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

На вопрос, не покажите ли как это делать на примере, мне дали всего вот эту ссылку  https://www.mql5.com/ru/docs/files , но я ума не приложу как же это можно сделать. Кто-нибудь сталкивался с этим? Как же все-таки это можно сделать? 

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

А по вашему вопросу проблема в том что вы строите граф-объекты а потом запрашиваете его значения, в этом главная ошибка.

Вы тратите ресурсы на создание объекта, а потом спрашиваете у объекта то что недавно ему дали.

У меня на четвёрке был похожий советник, и для экономии ресурсов я завёл переменные для хранения данных по которым создаются граф-объекты,

таким образом торговля ведётся не по объектам а по его данным (те переменным которые хранят координаты) что даёт возможность отключать

визуализацию (те построение граф-объектов) без потери работоспособности при этом значительно экономя ресурсы.

В реалтайме эта экономия не видна но при оптимизации экономия до 400%. Просто работа с графикой довольно медлительна, отсюда экономия.

В пятёрке вообще можно создавать объекты учёта (те объеденять перевенные в объекты),

так что такая реализация ещё проще будет выглядеть чем в четвёрке.


Arduz
569
Arduz 2010.09.08 18:11  

Допустим я имею канал и он меняется в зависимости от ситуации на рынке, при подходе цены к нижней границе покупаю к верхней продаю. Чтоб узнать цену на текущем баре границы канала я использую:

LinPod= ObjectGetValueByTime(0,"Поддержка",Time[0]);

ну и потом условие:

MqlTick Last_Tick;
if (Last_Tick.bid==LinPod)
{
покупаю
}

 Это все вкраце..., вот эта цена:

LinPod= ObjectGetValueByTime(0,"Поддержка",Time[0]);

 не берется, т.к тестер не чертит мой канал...хотя в реальной торговле, нормально торгует. 

Urain А примером можешь помочь, как это обойти? 

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов - Документация по MQL5
Nikolay Demko
12465
Nikolay Demko 2010.09.08 18:18  
arbuz:

Допустим я имею канал и он меняется в зависимости от ситуации на рынке, при подходе цены к нижней границе покупаю к верхней продаю. Чтоб узнать цену на текущем баре границы канала я использую:

...

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

Приведи куски кода где создаются объекты.

Arduz
569
Arduz 2010.09.08 18:23  
Urain:

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

Приведи куски кода где создаются объекты.

int q=0;
      int i=0;
      for(;i<Kol;i++)
        {

         if(Ext[i]!=0)
           {

            q++;

            if(q==2)
              {
               ExtA=Ext[i];
               TimeA=Time[i];
               I1=i;
              }
            if(q==3)
              {
               ExtB=Ext[i];
               TimeB=Time[i];
               I2=i;
              }
            if(q==4)
              {
               ExtC=Ext[i];
               TimeC=Time[i];
               I3=i;
               Time0_pam=Time[0];
              }

           }
        }

.......

if(ExtA<ExtB && ExtC!=ExtA)
        {

         Type=1;
         ObjectCreate(0,"Поддержка",OBJ_TREND,0,TimeC,ExtC,TimeA,ExtA);
         ObjectSetInteger(0,"Поддержка",OBJPROP_RAY_RIGHT,1);
         ObjectSetInteger(0,"Поддержка",OBJPROP_COLOR,ColorLine);
         double Prom=ObjectGetValueByTime(0,"Поддержка",TimeB);
         double Sum=ExtB-Prom;
         double ddd1=ExtA+Sum;
         double proc1=Sum/100*10;
         double proc21=Sum/100*50;
         double proc3=Sum/100*(LineTP+100);
         ObjectCreate(0,"Линия TP",OBJ_TREND,0,TimeC,ExtC+proc3,TimeA,ExtA+proc3);
         ObjectSetInteger(0,"Линия TP",OBJPROP_RAY_RIGHT,1);
         ObjectSetInteger(0,"Линия TP",OBJPROP_COLOR,ColorLineTP);
         ObjectSetInteger(0,"Линия TP",OBJPROP_STYLE,2);
         ObjectCreate(0,"Поддержка -10%",OBJ_TREND,0,TimeC,ExtC-proc1,TimeA,ExtA-proc1);
         ObjectSetInteger(0,"Поддержка -10%",OBJPROP_RAY_RIGHT,1);
         ObjectSetInteger(0,"Поддержка -10%",OBJPROP_COLOR,ColorLine);
         ObjectSetInteger(0,"Поддержка -10%",OBJPROP_STYLE,2);
         ObjectCreate(0,"Поддержка +10%",OBJ_TREND,0,TimeC,ExtC+proc1,TimeA,ExtA+proc1);
         ObjectSetInteger(0,"Поддержка +10%",OBJPROP_RAY_RIGHT,1);
         ObjectSetInteger(0,"Поддержка +10%",OBJPROP_COLOR,ColorLine);
         ObjectSetInteger(0,"Поддержка +10%",OBJPROP_STYLE,2);
         ObjectCreate(0,"Центральная линия +50%",OBJ_TREND,0,TimeC,ExtC+proc21,TimeA,ExtA+proc21);
         ObjectSetInteger(0,"Центральная линия +50%",OBJPROP_RAY_RIGHT,1);
         ObjectSetInteger(0,"Центральная линия +50%",OBJPROP_COLOR,ColorLine);
         ObjectSetInteger(0,"Центральная линия +50%",OBJPROP_STYLE,1);
         if(ExtC>ExtA)
           {
            double RazAC1=ExtC-ExtA;
            ObjectCreate(0,"Сопративление",OBJ_TREND,0,TimeB,ExtB,TimeA,ddd1);
            ObjectSetInteger(0,"Сопративление",OBJPROP_RAY_RIGHT,1);
            ObjectSetInteger(0,"Сопративление",OBJPROP_COLOR,ColorLine);
            ObjectCreate(0,"Сопративление +10%",OBJ_TREND,0,TimeB,ExtB-proc1,TimeA,ddd1-proc1);
            ObjectSetInteger(0,"Сопративление +10%",OBJPROP_RAY_RIGHT,1);
            ObjectSetInteger(0,"Сопративление +10%",OBJPROP_COLOR,ColorLine);
            ObjectSetInteger(0,"Сопративление +10%",OBJPROP_STYLE,2);
            ObjectCreate(0,"Сопративление -10%",OBJ_TREND,0,TimeB,ExtB+proc1,TimeA,ddd1+proc1);
            ObjectSetInteger(0,"Сопративление -10%",OBJPROP_RAY_RIGHT,1);
            ObjectSetInteger(0,"Сопративление -10%",OBJPROP_COLOR,ColorLine);
            ObjectSetInteger(0,"Сопративление -10%",OBJPROP_STYLE,2);

Это яZigZag считал

Arduz
569
Arduz 2010.09.08 18:25  
В первом куске считываю точки для постороения во втором по этим точкам строю...
Arduz
569
Arduz 2010.09.08 18:33  
Вот так выглядит вобще
Файлы:
EURUSDM15.png 10 kb
Nikolay Demko
12465
Nikolay Demko 2010.09.08 19:09  

Ну тут ничего особо сложного ...

Создай класс где будешь создавать объекты. Тк у тебя только тренд линии то там нужно только два метода вычисляющих координаты.

Метод по цене возвращающий время и по времени возвражающий цену. Всё это считается по уравнению прямой.

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

У тебя получится что при создании объекта ты передаёшь ему входные данные.

Затем при необходимости можешь получить данные о том какая будет цена в пол шестого :о)

можно добавить в класс постороение реального граф-объекта при условии.

Таким образом если будет выполненно условие то можно ещё и увидеть это всё на графике.

Но главное что таким образом сам граф-объект будет просто надстройка от которой ничего не зависит.

Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
Основы языка / Операторы / Оператор создания объекта new - Документация по MQL5
Arduz
569
Arduz 2010.09.08 19:18  
Спасибо, не думал даже об этом!
Vasiliy Orlov
1175
Vasiliy Orlov 2010.09.09 11:07  
arbuz:

Нашел такую проблему: У меня советник основан на графических объектах, а именно на трендовых линиях. В реальной торговле все прекрасно торгует, но при тестировании советник не совершает ни одной сделки. Чуть подумав решил вывести информацию о графических объектах при помощи Print(ObjectsTotal(0,0,OBJ_TREND)); и при тестировании в журнале мне показало "0", тобишь тестер объектов не видит, а значит и тестирование своего советника не представляется возможным. Написал в сервисдеск о этой проблеме мне ответили там:

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

На вопрос, не покажите ли как это делать на примере, мне дали всего вот эту ссылку  https://www.mql5.com/ru/docs/files , но я ума не приложу как же это можно сделать. Кто-нибудь сталкивался с этим? Как же все-таки это можно сделать? 

 

вам написали сложно, все гораздо проще.

 Вы не можете изменять трендовые линии во время тестирования, и вы об том знаете, следовательно они у вас создаются советником.

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

Arduz
569
Arduz 2010.09.09 13:51  
vasya_vasya:

вам написали сложно, все гораздо проще.

 Вы не можете изменять трендовые линии во время тестирования, и вы об том знаете, следовательно они у вас создаются советником.

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

Есть но при тестировании эти линии не видятся тестером, говорят что потом этим займуться...про файлы я тоже не понял зачем все это надо...

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий