preasto

 
Уровень 11

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



Индикатор дистанций на линиях

Здравствуйте, просьба создать для МТ4 индикатор разметки дистанций на линиях, который:
1) Выводит за ближайшими фракталами (Вильямса, сами фракталы выводить на график не обязательно)
ниже и выше текущей цены 2 группы горизонт. линий, толщ. 1, широкий пунктир:
Sell-line, ниже цены Bid (т.красная):
1я — за фракталом + отступ (3 пипс) (задаётся в параметрах)
2я — с отступом от 1й дальше 100п (задаётся в параметрах)
3я — с отступом от 1й дальше 200п (задаётся в параметрах)
Buy-line, выше цены Ask (т.синяя):
1я — за фракталом + спред + отступ (3 пипс) (задаётся в параметрах)
2я — с отступом от 1й дальше 100п (задаётся в параметрах)
3я — с отступом от 1й дальше 200п (задаётся в параметрах)

1я линия — переносится индикатором по каждому новому фракталу (при его появлении).
2я, 3я линии — в т.ч. при смене ТФ — не переносятся, фиксируются абсолютно там, где появились 1й раз, или куда были передвинуты.
Оказываются на том же месте при возврате на этот ТФ.
При их удалении — восстанавливаются по условиям настроек параметров индикатора.

В параметрах, настройки:
Заданный лот ордера на выбор: Из панельки окна терминала/заданное значение в параметрах, лот
заданное значение лот: 0.1 лот
коэфф. умножения лот для фрактальной 1й линии: 1.0
для 2й линии: 2.0
для 3й линии: 3.0
Дистанция 1й линии (отступ): 3; // пипс, 2й: 100; п., 3й: 200; п.

2) на каждой линии выводятся данные:
| Дистанция до текущей цены в п. | Сумма $ | лот | % от средств
т.е. так:
| -155п. | -15.5$ | 0.1 | 0.02%; — с отступом 120 бар от бара текущей цены. Над линией — для buy, под линией — для sell.
Или справа от цены отступом 2-3 бара. Так, чтобы эти данные всегда были сверху, поверх других линий, индикаторов.
Сумма $ и Дистанция от текущей цены в п.: со знаком "-", когда цена ниже(для buy)/выше(для sell), со знаком "+" когда наоборот;
Расчёт для Sell-по Bid, для Buy — по Ask.
Сумма $: путём умножения р-ра лот х Коэфф.умнож.лот х Дистанцию от текущей цены в п.
Лот: установленный лот х Коэфф.умнож.лот.

Желательно вывести на экран кнопку: Обновить — когда все линии удаляются и выводятся заново по условиям заданным в параметрах.
Вариант (без кнопки): при удалении какой-то из 1й(первой) линии идущей по фракталу — удаляются и восстанавливаются все другие линии.

Рис. по схеме:


==========
Далее — Справочно (пример кода, индикатора по фракталам с линиями за ними). Можно взять за основу, если удобно:
==========
Здесь подробно о фракталах
forex-method.ru/foreks-indikatory-fraktalov-dlya-metatrader-principy-raboty-opisanie-skachat?
и
Скачать индикатор Fractal Support & Resistance Levels для МТ4 — с выводом линий под крайние фракталы (пример)
forex-method.ru/sites/default/files/fractal-sr_0.zip



Фракталы:


Также справочно (для примера), функция вывода таких данных на линии (так понимаю)
Взято из советника-панельки работы с ордерами VR---STEALS-3 v.3.31
vr---steals---3.31.mq4 (139 Kb)

стр 1180 и далее — в конце файла

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool TextCreate(const long              chart_ID=0,
                const string            name="Text",           
                const int               sub_window=0,         
                datetime                time=0,                
                double                  price=0,             
                const string            text="Text",        
                const string            font="Arial",        
                const int               font_size=15,         
                const color             clr=clrRed,          
                const double            angle=0.0,              
                const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, 
                const bool              back=false,            
                const bool              selection=true,       
                const bool              hidden=true,          
                const long              z_order=0)       
  {
   ResetLastError();
   if(ObjectFind(0,name)==-1)
   {
      ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price);
   }
   ObjectMove(chart_ID,name, 0, time, price);
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
   return(true);
  }
//+----------------------------------------------------------------------------+
//|  Возвращает цвет по знаку числа                                            |
//+----------------------------------------------------------------------------+
color ColorOnSign(double nu) 
{
   color lcColor = colortext;

   if (nu > 0) lcColor = ecProfit;
   if (nu < 0) lcColor = ecLoss;

   return(lcColor);
}
//+------------------------------------------------------------------+
double GetProfitOpenPos(int mn = -1)
{
   int i, k = OrdersTotal();
   double pr = 0.0;

   for (i = 0; i < k; i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol() == Symbol()) {
            if (mn < 0 || OrderMagicNumber() == mn) {
               pr += OrderProfit() + OrderCommission() + OrderSwap();
            }
         }
      }
   }
   return (pr);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.08.2008                                                     |
//|  Описание : Возвращает суммарный профит открытых позиций в пунктах         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetProfitOpenPosInPoint(int op=-1, int mn=-1) 
{
   double pr = 0.0;
   //Comment(MarketInfo(Symbol(),MODE_TICKVALUE) / MarketInfo(Symbol(),MODE_TICKSIZE) / MarketInfo(Symbol(),MODE_POINT));
   
   for (int i = 0; i < OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if ((OrderSymbol() == Symbol()) && (op < 0 || OrderType() == op)) {
            if (mn < 0 || OrderMagicNumber() == mn) {
               if (OrderType() == OP_BUY) {
                  pr += (OrderProfit() / OrderLots() / MarketInfo( OrderSymbol(), MODE_TICKVALUE )) / n;
               }
               if (OrderType() == OP_SELL) {
                  pr += (OrderProfit() / OrderLots() / MarketInfo( OrderSymbol(), MODE_TICKVALUE )) / n;
               }
            }
         }
      }
   }
   return (pr);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|  Параметры:                                                      |
//|    nm - наименование объекта                                     |
//|    tx - текст                                                    |
//|    cl - цвет метки                                               |
//|    xd - координата X в пикселах                                  |
//|    yd - координата Y в пикселах                                  |
//|    cr - номер угла привязки        (0 - левый верхний)           |
//|    fs - размер шрифта              (8 - по умолчанию)            |
//+------------------------------------------------------------------+
bool SetText(string nm, string tx, color cl, datetime time, double price, int fs) 
{
   time += otstup*Period()*60;
   //--- сбросим значение ошибки
   ResetLastError();
   //--- создадим объект "Текст"
   if (ObjectFind(nm) < 0)
   {
      ObjectCreate(0, nm, OBJ_TEXT, 0, time, price);
   } 
   ObjectMove(0, nm, 0, time, price);
   //--- установим текст
   ObjectSetString(0, nm, OBJPROP_TEXT, tx);
   //--- установим шрифт
   ObjectSetString(0, nm, OBJPROP_FONT, 8);
   //--- установим размер шрифта
   ObjectSetInteger(0, nm, OBJPROP_FONTSIZE, fs);
   //--- установим угол наклона текста
   ObjectSetDouble(0, nm, OBJPROP_ANGLE, 0.0);
   //--- установим способ привязки
   ObjectSetInteger(0, nm, OBJPROP_ANCHOR, ANCHOR_LEFT_LOWER);
   //--- установим цвет 
   ObjectSetInteger(0, nm, OBJPROP_COLOR, cl);
   //--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(0, nm, OBJPROP_BACK, false);
   //--- включим (true) или отключим (false) режим перемещения объекта мышью
   ObjectSetInteger(0, nm, OBJPROP_SELECTABLE, false);
   ObjectSetInteger(0 ,nm, OBJPROP_SELECTED,   false);
   
   return (true);
}
  • 0
  • Просмотров: 1970
  • 19 июня 2022, 14:23
  • preasto
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
БО советник, замена индикатора
Следующая запись в группе  
Советник на RSi "наоборот"
17 июня 2022
18 июня 2022

Брокер для ваших роботов, 15 лет на рынке

Комментарии (13)

+
0
могу вывести по 3 линии от крайних фракталов для начала
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 19 июня 2022, 15:13
+
0
хорошо
avatar

  11  preasto Автор Сообщений: 445

  • 19 июня 2022, 21:04
+
0
на 23-е
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 20 июня 2022, 19:01
+
0
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 22 июня 2022, 19:23
+
0
Андрей, линии индикатора всё время возвращаются на начальное место.
Тогда это становиться безполезным.

Вся суть задачи именно в том, чтобы после их переноса, они оставались на том месте, куда перенесены. И не возвращались на отступы по умолч. из параметров.
В т.ч. при смене ТФ.

Подстраиваться под новые фракталы должны только крайние линии по buy и sell — над и под ценой.
Другие 2 линии всегда должны оставаться там, куда перенесены.
В этом вся суть и задача, как основное. В т.ч. отмечено в ТЗ.

Вопрос восстановления/обновления линий, как возможное, предлагаю решить таким способом:
— при удалении какой-то из 1й(первой) линии идущей по фракталу — удаляются и восстанавливаются все другие линии.

Просьба сделать так. Как и в ТЗ изначально. Чтобы 2 крайние группы линий фиксировались там, куда перенесены, без возврата на отступы по умолчанию.
Редактирован: 25 июня 2022, 12:24
avatar

  11  preasto Автор Сообщений: 445

  • 25 июня 2022, 12:20
+
0
не понял. подробнее и со скринами
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 25 июня 2022, 13:29
+
0
Должно быть так:
1. Индикатор выводит за ближайшими фракталами над и под ценой по 3 линии.
1я линия — сразу за фракталом, ещё по 2 — с отступами для каждой.

2. 1я линия по каждому направлению автоматически индикатором смещается за новый фрактал.

Но 2 другие линии — НЕ СМЕЩАЮТСЯ. Остаются там, где вывелись 1й раз, или куда были перенесены мышкой.
В т.ч. при смене и возврате ТФ в окне. Эти 2 линии остаются ВСЕГДА на тех ценах, куда выставлены или перенесены.
Смещаются под новые фракталы только ближние к фракталам (1-е) линии.

3. Чтобы перезапускать индикатор для выведения всех линий с настройками по умолч. из параметров,
предлагается (как вариант) сделать функцию: если удалена какая-то из 1х (ближних к фракталам) линий — то индикатор удаляет все остальные и тут же выводит их с отступами по умолчанию. При этом перенос 1х линий допускается без перезапуска инд., и они будут там находиться до появления нового фрактала.

Суть в том, чтобы 1я линия всегда следовала за ближним фракталам.
А по 2 другие можно было перенести на нужные уровни на постоянно,
и по ним отслеживать дистанцию и прибыль/убыток от цены в моменте. Перенося их руками когда и куда надо по ходу.
Например, чтобы оперативно видеть, какая прибыль/просадка в п. и $ будет, если на этих линиях поставить отложку, СЛ, ТП. Когда там будут выводиться данные по примеру из ТЗ.

=====
Как сделать скрин о том, что линии переносятся назад — и не знаю.
Ну, это 3 скрина:
1. — линии выведены по умолч.
2. — 2 и 3 линии перенесены на новое место.
3. 5 сек, или смена-возврат ТФ и… 2 и 3 линии снова на месте с дистанцией по умолч. Т.е. — линии возвращаются всё время на начальное место с отступами по умолч., а не фиксируются на том, куда перенесены (что только и надо — ради этого весь индикатор).
(проверялось на демо счёте)
Редактирован: 25 июня 2022, 13:51
avatar

  11  preasto Автор Сообщений: 445

  • 25 июня 2022, 13:48
+
+1
поправлю сегодня
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 25 июня 2022, 13:49
+
0
линии у фракталов привязаны к ним, а другие можно двигать: www.opentraders.ru/downloads/3345/

avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 26 июня 2022, 11:28
+
0
Уже лучше, когда в том же окне на том же ТФ.
Но при смене ТФ — смещаются, всё же, и 2, 3 линии. Требуется, чтобы 2,3 линии всегда фиксировались на фикс.цене, куда перенесены, или изначально поставлены, и при смене ТФ, и при появлении новых фракталов — по к-м перемещаются только 1е линии.

Редактирован: 28 июня 2022, 10:23
avatar

  11  preasto Автор Сообщений: 445

  • 27 июня 2022, 14:28
+
0
Андрей, Большая просьба поправить и это — чтобы при смене ТФ 2,3 линии не переносились обратно, оставались на прежнем месте.
avatar

  11  preasto Автор Сообщений: 445

  • 28 июня 2022, 10:23
+
0
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 28 июня 2022, 21:40
+
0
Андрей, благодарю. Линии теперь выводятся как надо. Базис индикатора есть. *good* 
avatar

  11  preasto Автор Сообщений: 445

  • 29 июня 2022, 10:42

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