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

 
Integer писал(а) >>
Какого скрипта?

Нашел посмотрел. Здесь все наверно действуют по принципу "не стой под стрелой", от самоуверенности автора просто сносит, куда уж туда суваться.

 
ForexTools >>:
Поудалял все свои посты не относящиеся к обсуждению АГ. Призываю остальных "свободных флудильщиков" сделать тоже самое - давайте уважать чужой труд: чисто не там где (модераторы) убирают, а там - где (пользователи) не мусорят ;)

благодарю sabluk за понимание и поддержку моей "инициативы". Может и остальные последуют нашему примеру?

 

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

Внесены изменения:
1. Добавлена настройка отключения звука тиков.
2. Исправлена ошибка управления инструментами 17 и 20 (в отключённом режиме AG или АТ при достижении рыночной ценой цены исполнения инструмента инструмент не удалялся; теперь автоматически удаляется).
Скачать новую версию можно здесь http://autograf.dp.ua/Pages/4/421.htm.

 

AutoGraf 4 достойно выдержал нововведение - 5й знак. (http://forum.alpari-idc.ru/thread44876.html)


Он просто работает как и работал. Никаких переделок не требуется (это потому, что написан правильно - в программе не используются изменяемые значения, заданные численно,- всё построено на переменных, обновляемых по мере изменения на сервере, в частности, Point, Digits, StopLevel и т.д. )

Естественные изменения, которое необходимо внести в настройки эксперта, касаются предустановочных значений ценовых параметров. Например, было SL (StopLoss в пунктах) = 25, теперь нужно установить 250 или любое на усмотрение пользовтеля, но не меньше 100 (а именно, не меньше текущего значения минимальной дистанции StopLevel). Так же поступить с другими параметрами.

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

===

Однажды киношники снимали как взрывают старый дом.
Заложили взрывчатку.. Ба-бах!. Дом стоит. Заложили больше. Ба-бах! Разрушился первый этаж. Вся верхняя часть (4 этажа) не разрушилась, дом просто просел на 1 этаж. Окончательно удалось взорвать с 5й попытки.

Фирма-строитель выкупила за приличные средства эту съёмку и стала рекламировать своё качество работ путём демонстрации фильма:)

 

Уважаемые!

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

Каким образом приложение различает что функция АТ отдает указание (например, обращение к терминалу) ему, а не ведет торговлю сама?

Исполнение функции АТ связано с двумя основными возможностями.

Первая из них заключается в том, что функция АТ может самостоятельно вести торговлю - формировать торговые приказы и отправлять их на сервер. При этом функция может не обрабатывать никакие данные полученные из приложения (или обрабатывать часть этих данных), а выполнять собственные вычисления, используя для этого все возможности языка MQL 4, в т.ч. обращение к терминалу для обработки ордеров, получение текущих котировок, вычисление торговых критериев, управление графическими объектами и т.д.

Вторая возможность непосредственно связана с приложением AutoGraf 4. Функция АТ может отдавать указания приложению AutoGraf 4 на установку любых необходимых инструментов с заданными настройками на определённые ордера или на ценовой график, изменение общих настроечных параметров приложения, удаление инструментов, может выводить сообщения пользователю и пр. (выходные параметры).

 

Уважаемые!

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

В приведенном примере Пользовательской функции Автоматической Торговли в "Пример 2. Открытие и закрытие рыночных ордеров." открываются рыночные ордера, а закрываются, по моему, отложенные.

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
// AG_AT.mq4                                             Пример 0 (инструментов нет)
// Пользовательская функция Автоматической Торговли.
// Используется при построении функции автоматической торговли для приложения AutoGraf 4
// Сергей Ковалёв, Днепропетровск, sk@autograf.dp.ua, ICQ 64015987, http://autograf.dp.ua
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж 0 жж
#property library   
 
#import "AG_Lib.ex4"
   int AG_Magic_Number();                          // Вычисление MN 
   int AG_Message(string& Message[], string _Text);// Запись сообщений в массив Message[]
#import "AG_Trade_Criterion.ex4"
   int AG_Trade_Criterion_1();                     // Ф-ия определен. торгов. критериев 1
   int AG_Trade_Criterion_2();                     // Ф-ия определен. торгов. критериев 2
#import
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж 1 жж
.......
//================================================================================== 7 ==
/*
                                       // Cнять блок комментариев с Примера 2
                                       // и закомментировать Пример 1
                                       // Пример 2. Открытие и закрытие рыночных ордеров.
   int Crit = AG_Trade_Criterion_2();  // Вызов функции вычисления торговых критериев
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   if (OrdersTotal()==0)               // Если нет ордеров, то интересуемся ..
      {                                // .. критериями открытия
      switch(Crit)                     // В этом блоке рассматриваются критерии открытия
         { 
         case 10:                      // Торговый критерий = Открыть_Buy
            MN = AG_Magic_Number();    // Вычисление MagicNumber (рекомендуется)
                                       // Открытие ордера Buy:
            OrderSend(Symbol(),OP_BUY, 0.1,Ask,2,Bid-100*Point,Bid+40*Point,Comm,MN); 
            break;
         case 20:                      // Торговый критерий = Открыть_Sell
            MN = AG_Magic_Number();    // Вычисление MagicNumber (рекомендуется)
                                       // Открытие ордера Sell:
            OrderSend(Symbol(),OP_SELL,0.1,Bid,2,Ask+100*Point,Ask-40*Point,Comm,MN);
         }
      }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   if (OrdersTotal()==1)               // По стратегии возможен только 1 рыночный ордер
      {
      switch(Crit)                     // В этом блоке рассматриваются критерии закрытия
         {
         case 11:                      // Торговый критерий = Закрыть_Buy
            if (NormalizeDouble(Order[1][6],0) == 0.0)            // Если тип ордера Buy
               {                                      
               int _Ord_Ticket = NormalizeDouble(Order[1][4],0);  // Номер ордера
               double _Ord_Lots = NormalizeDouble(Order[1][5],2); // Полное закрытие
               OrderClose(_Ord_Ticket, _Ord_Lots, Bid, 2);        // Закрыть ордер Buy
               }
            break;
         case 21:                      // Торговый критерий = Закрыть_Sell
            if (NormalizeDouble(Order[1][6],0) == 1.0)      // Если тип ордера Sell
               {
               _Ord_Ticket = NormalizeDouble(Order[1][4],0);// Номер ордера
               _Ord_Lots = NormalizeDouble(Order[1][5],2);  // Будем закр.ордер полностью
               OrderClose(_Ord_Ticket, _Ord_Lots, Ask, 2);  // Закрыть ордер Sell
               }
         }
      }
*/
//================================================================================== 8 ==
   return(1);
   }
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж Конец модуля жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж 10 жж
if (NormalizeDouble(Order[1][6],0) == 0.0)            // Если тип ордера Buy
и
if (NormalizeDouble(Order[1][6],0) == 1.0)            // Если тип ордера Sell 

Или я что-то не понимаю?

Общее количество ордеров в приложении AutoGraf 4 не должно превышать 30. Нумерация ордеров в приложении AutoGraf 4 начинается с 1. Нулевой индекс в первом измерении массива Order[][] для учёта параметров ордеров не используется. Поэтому массив Order[][] в первом измерении имеет размерность 31. Каждая строка в массиве соответствует одному ордеру и содержит значения следующих параметров ордеров:

[0][0] - общее количество ордеров;

[][0] - не используется;

[][1] - OpenPrice - цена открытия (установки) ордера (абсолютное значение цены);

[][2] - StopLoss ордера (абсолютное значение цены);

[][3] - TakeProfit ордера (абсолютное значение цены);

[][4] - NumberOrders номер ордера;

[][5] - количество лотов ордера;

[][6] - тип ордера (0=B, 1=S, 2=BL, 3=SL, 4=BS, 5=SS, Торговые операции);

[][7] - MagicNumber - магическое число ордера;

[][8] - 0/1 факт наличия комментария;

[][9] - PrOld исходная цена открытия ордера (абсолютное значение цены).


Из справочника:

Тип операций для функции OrderSend(). Mожет быть любым из следующих величин:

Константа Значение Описание
OP_BUY0Покупка
OP_SELL1Продажа
OP_BUYLIMIT2Отложенный ордер BUY LIMIT
OP_SELLLIMIT3Отложенный ордер SELL LIMIT
OP_BUYSTOP4Отложенный ордер BUY STOP
OP_SELLSTOP5Отложенный ордер SELL STOP

Т. е. по моему должно быть:

if (NormalizeDouble(Order[1][0],0) == 0.0)            // Если тип ордера Buy
и
if (NormalizeDouble(Order[1][1],0) == 1.0)            // Если тип ордера Sell 
 

Уважаемые!

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

Почему в свойствах эксперта не запоминается название моей стратегии "L_1"?


При установке AG_exp. я его записал, в строке оно отображается, а в свойствах не запоминается?

 

Уважаемые!

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

При завершении работы приложения или после его удаления, как удалять графические объекты не поддерживаемые приложением. Например типа OBJ_ARROW?

 
LeonidSB писал(а) >>

Т. е. по моему должно быть:

if (NormalizeDouble(Order[1][0],0) == 0.0)            // Если тип ордера Buy
и
if (NormalizeDouble(Order[1][1],0) == 1.0)            // Если тип ордера Sell 

Нет, не правильно. Посмотрите ещё раз таблицу (пример набора ордеров) на странице http://autograf.dp.ua/Pages/2/26/267/2674.htm

На этой странице также расписано соответствие индексов массива содержащимся в массиве параметрам. Обратите внимание, здесь речь идёт об индексе во втором измерении массива Order[][].

[0][0] - общее количество ордеров;

[][0] - не используется;

[][1] - OpenPrice - цена открытия (установки) ордера (абсолютное значение цены);

[][2] - StopLoss ордера (абсолютное значение цены);

[][3] - TakeProfit ордера (абсолютное значение цены);

[][4] - NumberOrders номер ордера;

[][5] - количество лотов ордера;

[][6] - тип ордера (0=B, 1=S, 2=BL, 3=SL, 4=BS, 5=SS, Торговые операции);

[][7] - MagicNumber - магическое число ордера;

[][8] - 0/1 факт наличия комментария;

[][9] - PrOld исходная цена открытия ордера (абсолютное значение цены).

---------------

Параметру "Тип ордера" соответствует 6й индекс во втором измерении массива Order[][].

if (NormalizeDouble(Order[1][6],0) == 0.0)            // Если тип ордера Buy
и
if (NormalizeDouble(Order[1][6],0) == 1.0)            // Если тип ордера Sell 
 
LeonidSB писал(а) >>

Уважаемые!

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

Почему в свойствах эксперта не запоминается название моей стратегии "L_1"?

При установке AG_exp. я его записал, в строке оно отображается, а в свойствах не запоминается?

Если Вы правильно всё делаете, то должно запоминаться.

При этом будет помниться до того момента, пока Вы не выгрузите эксперт из окна.

Чтобы в другой раз не вводить всё заново можно сделать одно из двух:

1. Сохранить настроенный эксперт в шаблоны. Новую загрузку производить с нового шаблона.

2. Сохранить настройки эксперта (кнопка Сохранить в окне настроек), а при последующей загрузке эксперта загрузить настройки (кнопка Загрузить в окне настроек).

Порядок присоединения стратегий смотрите здесь http://autograf.dp.ua/Pages/2/26/267/26711/26711_2.htm

LeonidSB писал(а) >>

Уважаемые!

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

При завершении работы приложения или после его удаления, как удалять графические объекты не поддерживаемые приложением. Например типа OBJ_ARROW?

Выделить объект и удалить (нажать кнопку Delete).
Если программно, то можно воспользоваться функцией ObjectDelete() или ObjectsDeleteAll().