AutoGraf серии 4 - возможности MQL. - страница 35

 

Не очень понятно что Вы называете "строка кода для учёта в приложении".

Фрагмент из AG_Srtategy_Channal_Inside.mq4

//================================================================================== 6 ==
   if (Channal == false)                           // Если объекта заданного типа нет
      {
      ObjectCreate (My_Chan_Name, OBJ_STDDEVCHANNEL,0,0,0); // Создаём его.. 
      int Сoor_X2 = Time[0];                                // 1я точка СПРАВА, 2я СЛЕВА
      int Сoor_X1 = Сoor_X2 - With*60;                      // Канал длиной 3 часа
      ObjectSet(My_Chan_Name, OBJPROP_TIME1, Сoor_X1);      // Устанавливаем координаты
      ObjectSet(My_Chan_Name, OBJPROP_TIME2, Сoor_X2);      // Устанавливаем координаты 
      ObjectSet(My_Chan_Name, OBJPROP_COLOR, Orange);       // Устанавливаем координаты 
      AG_Message(Message, "АТ: Устанавливаем объект OBJ_STDDEVCHANNEL.");// Сообщение

      return(1);                 // Это необходимо, чтоб установл. канал был учтён AG 4    Имелась ввиду эта строка

      }
//---------------------------------------------------------------------------------- 7 --

Меня сбила с толку эта строка:

Первая из них заключается в том, что функция АТ может самостоятельно вести торговлю - формировать торговые приказы и отправлять их на сервер

Создалось впечатление, что функция АТ может игнорировать работу приложения и самостоятельно ..... отправлять их на сервер.

Видимо это моя проблема из-за отсутствия опыта. Мозг еще не заточился под программирование.

 
LeonidSB писал(а) >>

.. Мозг еще не заточился под программирование.

Вам желательно самостоятельно написать несколько простых программ.

 

Вы совершенно правы. Я к этому стремлюсь и надеюсь это скоро сделать, но сначала хочу разобраться в том, что, как и для чего написано людьми уже имеющими опыт. Грубо говоря, набрать количество знаний,чтобы оно перешло в качество опыта, на основании которого написать что-то самостоятельно.

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

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

extern bool   PrDeal=false;                                      // Выключатель. Печатать отчет по каждой сделке
extern bool   PrCol=false;                                       // Выключатель. Печатать отчет в колонку
extern bool   PrTab=true;                                        // Выключатель. Печатать отчет в таблицу

Пока одновременно создаются три вида отчета в одном файле. Я уже говорил, что принял за основу индикатор разработанный Владиславом Гошковым. Он был порядка 280 строк. Я его доработал до 2300 строк. Как говорится, было от чего оттолкнуться. Понятно, что код написан так, что в нем "чёрт ногу сломает". Но это первые мои строки кода и они, самое главное, работают! Так что двигаюсь я в правильном направлении (хотя, не самым правильным путем), а с Вашей помощью в разъяснении возникающих вопросов, все дело времени.

Огромное Вам спасибо за Ваше участие.


Пользуясь случаем, очередной вопрос.

В учебнике написано:

Если в результате исполнения торгового приказа функция OrderClose() вернула значение false, то это значит, что ордер не закрыт. Чтобы выяснить причину неудачи выполняется анализ последней ошибки, возникшей при попытке осуществления торговой операции. Для этого вызывается функция Errors() (см. раздел Функция обработки ошибок). Если при исполнении этой функции обнаруживается, что ошибка является непреодолимой (например, торговля запрещена), то функция Close_All() заканчивает работу и возвращает управление в управляющую торговую функцию Trade(), что в конечном счёте приводит к завершению исполнения специальной функции start() эксперта. На следующем тике торговый терминал снова запустит на исполнение функцию start(), и если критерий закрытия на тот момент будет ещё актуален, то это снова приведёт к вызову на исполнение функции закрытия всех ордеров Close_All().

Вопрос:

Есть два отрытых ордера BUY-1 и BUY-2 лотами 3 и 5 соответственно. Есть торговый приказ функция Close_All(). Очередность закрытия ордеров: сначала BUY-2 (5 лотов), потом BUY-1 (3 лота). При этом BUY-2 (5 лотов) закрыть не получилось - ошибка непреодолимая - уходим - ордер BUY-1 (3 лота) не закрыт - убыток растет - на следующем тике та же картина (убыток растет) и т.д. Т.е. из-за невозможности закрыть первый попавшийся в списке незакрываемый по непреодолимой причине ордер, незакрытыми остаются все ордера следующие по списку и до каких пор не понятно. Такого допускать нельзя. И видимо, это не допущено алгоритмом программы, но сколько я ни старался, понять как это происходит, не смог.

      //--------------------------------------------------------- 4 --
      if (Ans==false)                     // Не получилось :( 
        {                                // Поинтересуемся ошибками:
         if(Errors(GetLastError())==false)// Если ошибка непреодолимая
            return;                       // .. то уходим.
        }
      //--------------------------------------------------------- 5 --
      Terminal();                         // Функция учёта ордеров 
      Events();                           // Отслеживание событий
     }
   return;                                // Выход из пользов. функции
  }
//--------------------------------------------------------------- 6 --

Объясните пожалуйста по-подробнее.

Заранее спасибо, с уважением и наилучшими пожеланиями, Леонид.

 
LeonidSB писал(а) >>

Вопрос:

Есть два отрытых ордера BUY-1 и BUY-2 лотами 3 и 5 соответственно. Есть торговый приказ функция Close_All(). Очередность закрытия ордеров: сначала BUY-2 (5 лотов), потом BUY-1 (3 лота). При этом BUY-2 (5 лотов) закрыть не получилось - ошибка непреодолимая - уходим - ордер BUY-1 (3 лота) не закрыт - убыток растет - на следующем тике та же картина (убыток растет) и т.д. Т.е. из-за невозможности закрыть первый попавшийся в списке незакрываемый по непреодолимой причине ордер, незакрытыми остаются все ордера следующие по списку и до каких пор не понятно. Такого допускать нельзя. И видимо, это не допущено алгоритмом программы, но сколько я ни старался, понять как это происходит, не смог.

Объясните пожалуйста по-подробнее.

Заранее спасибо, с уважением и наилучшими пожеланиями, Леонид.

Непреодолимая ошибка - это ошибка, которую нельзя преодолеть. Например, Рынок_закрыт.

С этой точки зрения неважно какой ордер Вы закрываете или открываете. Рынок всё равно закрыт:)

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

 

Здравствуйте уважаемые!

Ответьте пожалуйста на вопрос.

Какой из индикаторов наиболее достоверно отображает изменение тенденции тренд - флэт?

Хочу добавить к стратегиям AG_Srtategy_Channal_Inside и AG_Srtategy_Channal_Outside такой индикатор в качестве переключателя с одной стратегии на другую.

 
SK. писал(а) >>

........Задача заключалась в том, чтобы предоставить пользователю возможность присоединять к приложению AutoGraf 4 свои торговые алгоритмы, написанные на MQL4 и оформленные в виде .ех4 файлов стратегий. Для решения этой задачи в эксперте AG_exp.ex4 прописан код, в соответствии с которым в эксперт импортируется функция автоматической торговли AG_AT, поставляемая как в виде .ех4, так и в виде mq4. Далее пользователь может сам решать как ему обустроить свои коды. Наиболее удобно использовать один из двух вариантов....

Такой вариант не обдумывали: основной модуль с открытым кодом, тот основной, который сейчас с закрытым кодом вызывается через импорт, торговая стратегия через инклуд (или сначала через инклуд, а в инклудник импорт)... Смысл такой - промежеточное звено в виде инклудника для обеспечения видимости внешних переменных. Мне кажется, если хорошо подумать, должно получиться. Только не говорите сразу, что невозможно;)

 
LeonidSB писал(а) >>

Здравствуйте уважаемые!

Ответьте пожалуйста на вопрос.

Какой из индикаторов наиболее достоверно отображает изменение тенденции тренд - флэт?

Хочу добавить к стратегиям AG_Srtategy_Channal_Inside и AG_Srtategy_Channal_Outside такой индикатор в качестве переключателя с одной стратегии на другую.

А выбор не велик: STD, ATR, ADX. Еще часы и календарь выхода новостей.

 

Спасибо!

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

А то приходится периодически ходить на страницу и обновлять её вручную.

 
Integer писал(а) >>

Такой вариант не обдумывали: основной модуль с открытым кодом, тот основной, который сейчас с закрытым кодом вызывается через импорт, торговая стратегия через инклуд (или сначала через инклуд, а в инклудник импорт)... Смысл такой - промежеточное звено в виде инклудника для обеспечения видимости внешних переменных. Мне кажется, если хорошо подумать, должно получиться. Только не говорите сразу, что невозможно;)

Нет никакой сложности в том, чтобы это сделать. Но поставлять коммерческий продукт с открытым кодом.. сами понимаете, это не решение.

Настоящее решение ожидается в МТ 5. Любая прикладная программа должна вызываться из основной программы. Нужна возможность управлять законченными экспертами. В этом случае настраиваемая стратегия может состоять из аналитического блока и блока вызова "подпрограмм". Хочешь - вызови скрипт и он тебе нарисует фибу, хочешь - вызови на экран индикатор, а хочешь - всё позакрывай и пипсуй себе вечерком после работы:)

И АПИ. Тогда можно сделать действительно современный инструмент.

Пользователю до лампочки наши прибамбасы (скрипты всякие, советники, неотличимые от экспертов:). Ему нужен удобный, качественный, многофункциональный сервис. В МТ4 можно было сделать только то, что сделано - ДОСовский фейс и ограниченные возможности.

Вся надежда на МТ 5.

 

Выложена новая версия AG серии 4 - AutoGraf 4.90714.

Внесены изменения:
1. Оптимизирован алгоритм анализа управления инструментом 14 Закрыть_Всё.
2. Введено новое правило управления инструментом 14 Закрыть_Всё: допускается программная установка инструмента на текущий момент. Для этого необходимо передать значение 1 для настроечного параметра времени исполнения инструмента (Instrument [0][2][32][1] = 1).

Скачать программу можно здесь: http://autograf.dp.ua/Pages/4/421.htm

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