Здравствуйте, просьба создать для МТ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);
}
Комментарии (13)
35 AM2 Сообщений: 16266 - Андрей
11 preasto Автор Сообщений: 445
35 AM2 Сообщений: 16266 - Андрей
35 AM2 Сообщений: 16266 - Андрей
Тогда это становиться безполезным.
Вся суть задачи именно в том, чтобы после их переноса, они оставались на том месте, куда перенесены. И не возвращались на отступы по умолч. из параметров.
В т.ч. при смене ТФ.
Подстраиваться под новые фракталы должны только крайние линии по buy и sell — над и под ценой.
Другие 2 линии всегда должны оставаться там, куда перенесены.
В этом вся суть и задача, как основное. В т.ч. отмечено в ТЗ.
Вопрос восстановления/обновления линий, как возможное, предлагаю решить таким способом:
— при удалении какой-то из 1й(первой) линии идущей по фракталу — удаляются и восстанавливаются все другие линии.
Просьба сделать так. Как и в ТЗ изначально. Чтобы 2 крайние группы линий фиксировались там, куда перенесены, без возврата на отступы по умолчанию. Редактирован: 25 июня 2022, 12:24
11 preasto Автор Сообщений: 445
35 AM2 Сообщений: 16266 - Андрей
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
11 preasto Автор Сообщений: 445
35 AM2 Сообщений: 16266 - Андрей
35 AM2 Сообщений: 16266 - Андрей
Но при смене ТФ — смещаются, всё же, и 2, 3 линии. Требуется, чтобы 2,3 линии всегда фиксировались на фикс.цене, куда перенесены, или изначально поставлены, и при смене ТФ, и при появлении новых фракталов — по к-м перемещаются только 1е линии.
Редактирован: 28 июня 2022, 10:23
11 preasto Автор Сообщений: 445
11 preasto Автор Сообщений: 445
35 AM2 Сообщений: 16266 - Андрей
11 preasto Автор Сообщений: 445
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий