Как увеличить размер Wingdings-символа?

 

 Смотрю я на свойства. Нет там, вроде бы, нужного. Как я понимаю, размер будет увеличиваться после создания объекта посредством свойства функцией ObjectSetInteger(), верно?

Свойства OBJPROP_FONTSIZE не подходит. Хотя, в документации Wingdings это шрифты...

 
Viktar Dzemikhau:

 Смотрю я на свойства. Нет там, вроде бы, нужного. Как я понимаю, размер будет увеличиваться после создания объекта посредством свойства функцией ObjectSetInteger(), верно?

Свойства OBJPROP_FONTSIZE не подходит. Хотя, в документации Wingdings это шрифты...

Зависит от применения этого шрифта. Если ставить символ в индикаторный буфер, то увеличивается "толщиной" значка. Если-же в OBJ_TEXT то помещая текст указывается и размер.

 
Alexey Viktorov:

Зависит от применения этого шрифта. Если ставить символ в индикаторный буфер, то увеличивается "толщиной" значка. Если-же в OBJ_TEXT то помещая текст указывается и размер.

Хм. В документации написано, что объекты с Wingdings-символами создаются как объекты типа OBJ_ARROW(). Поэтому, изначально, я сделал менно так.. В этом случает размер шрифта увеличить е получается.

 
Viktar Dzemikhau:

Хм. В документации написано, что объекты с Wingdings-символами создаются как объекты типа OBJ_ARROW(). Поэтому, изначально, я сделал менно так.. В этом случает размер шрифта увеличить е получается.

вот набросал стрелки по High, поэкспериментируйте с кодом

//+------------------------------------------------------------------+
//|                                                      !!!test.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "HIGH"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrRed
#property indicator_width1  3
//--- indicator buffers
double         H[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,H);
   SetIndexArrow(0,233);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit;
   if(prev_calculated==0) limit=rates_total-1; else limit=rates_total-prev_calculated+1;
   for(i=limit;i>=0;i--) H[i]=High[i];
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

вот набросал стрелки по High, поэкспериментируйте с кодом

Igor Makanu, меня не интересуют стрелки. Стрелки можно отрисовать несколькими способами. Нужно отрисовывать любой из Wingdings-символов и задавать им размеры. К тому же, они не будут буферами т.к. нет необходимости ими оперировать в будущем.

Щяс накидаю скрипт, что бы прояснить ситуацию..

 

Чушь какая-то. Не задавался размер. 
Поехал на дачу съездил. Приехал. Проверил ещё раз.. Уже задаётся. Мда..

//==================================================================================================================================================================================
// Отрисовка wingdings-символа над/под баром с индексом barIndex. ==================================================================================================================
void Draw :: wingdings(const string symbol, string objName, const long wingdingsCode, const color clr, const int barIndex = 0) {
  Print("barHighPrice(", barIndex, ") = ", barHighPrice(barIndex));
  SymbolInstance Sym(symbol);
  objName += TimeToString(barOpenTime(barIndex), TIME_DATE|TIME_MINUTES);
  ObjectCreate(0, objName, OBJ_ARROW, 0, barOpenTime(barIndex), barHighPrice(barIndex) + deviationFromExtremBarPrice() * Sym.pt());
  ObjectSetInteger(0, objName, OBJPROP_ARROWCODE, wingdingsCode);
  ObjectSetInteger(0, objName, OBJPROP_COLOR, clr);
  ObjectSetInteger(0, objName, OBJPROP_WIDTH, 5);
  ChartRedraw();
}

Тока вот функция создания объекта гонит конкретно. В строке:

ObjectCreate(0, objName, OBJ_ARROW, 0, barOpenTime(barIndex), barHighPrice(barIndex) + deviationFromExtremBarPrice() * Sym.pt());

Если вместо deviationFromExtremBarPrice() подставить фиксированное число, то будет рисоваться символ абы-где т.е. не на одинаковом расстоянии от хая бара на индексе barIndex. Хотя, вроде как должно быть всё корректно. Ведь цена, на которой рисуется объект будет хай + количество пунктов. А ни графике совсем не так. Пришлсоь писать switch() и подбирать значения, что бы всё было красиво.

 
Viktar Dzemikhau:

Чушь какая-то. Не задавался размер. 
Поехал на дачу съездил. Приехал. Проверил ещё раз.. Уже задаётся. Мда..

Тока вот функция создания объекта гонит конкретно. В строке:

Если вместо deviationFromExtremBarPrice() подставить фиксированное число, то будет рисоваться символ абы-где т.е. не на одинаковом расстоянии от хая бара на индексе barIndex. Хотя, вроде как должно быть всё корректно. Ведь цена, на которой рисуется объект будет хай + количество пунктов. А ни графике совсем не так. Пришлсоь писать switch() и подбирать значения, что бы всё было красиво.

Я использую вот это:

//===============================================================================================
//----------------- Возвращает интервал установки сигнальных указателей (%) --------------------+
//===============================================================================================
double GetArrowInterval(double pr) {
  return((ChartGetDouble(0,CHART_PRICE_MAX)-ChartGetDouble(0,CHART_PRICE_MIN))/100*pr);
 }

Тогда на любом тайме указатель в процентах на одном месте с отступом от свечей

 
Vitaly Muzichenko:

Я использую вот это:

Тогда на любом тайме указатель в процентах на одном месте с отступом от свечей

А с чем это связано интересно, смогли понять?

Я так вообще откатал switch и пока что его использую))

//==================================================================================================================================================================================
// Возвращается отклонение цены для отрисовки wingdings-символа в зависимости от таймфрейма. =======================================================================================
int Draw :: deviationFromExtremBarPrice(ENUM_TIMEFRAMES tf = PERIOD_CURRENT) {
//---
  if (tf == PERIOD_CURRENT)
    tf = ChartPeriod();

  switch (tf) {
    case PERIOD_M1:
      return 3;
    case PERIOD_M5:
      return 11;
    case PERIOD_M15:
      return 26;
    case PERIOD_M30:
      return 27;
    case PERIOD_H1:
      return 47;
    case PERIOD_H4:
      return 68;
    case PERIOD_D1:
      return 150;
    case PERIOD_W1:
      return 290;
  }
  return 1030;    // case PERIOD_MN1
}

Когда я его писал, где-то внутри меня было возмущение. Хотя, одновременно, мне было смешно. Абсурдное времяпровождение. На ровном месте нашёл себе работу подборщика отклонения от экстремума бара.. ))

 
Viktar Dzemikhau:

А с чем это связано интересно, смогли понять?

Я так вообще откатал switch и пока что его использую))

Когда я его писал, где-то внутри меня было возмущение. Хотя, одновременно, мне было смешно. Абсурдное времяпровождение. На ровном месте нашёл себе работу подборщика отклонения от экстремума бара.. ))

Я от switch отказался давно. При использовании мелких таймов если начинается флет, то коридор где-то порядка 20 пунктов, а вот switch вернёт фиксированное значение, и значки будут очень далеко от экстремумов. И наоборот, если прошло большое движение, то значки будут прям на экстремумах.

Предложенный вариант решает этот недочёт. 

 
Viktar Dzemikhau:

А с чем это связано интересно, смогли понять?

автомасштаб графиков по умолчанию включен, вот и сместились Ваши ARROW

ЗЫ: это еще мелочи, хуже когда на 2 дня разборок с заказчиком, который утверждает, что индикатор не правильно считает и пропускает бары по размерам меньше/больше/одинаковые.... хрен докажешь, что это автомасштаб сработал после прокрутки графика... ну и если отключить автомасштаб ... то графики совсем по другому выглядят ;)

 
Vitaly Muzichenko:

Я от switch отказался давно. При использовании мелких таймов если начинается флет, то коридор где-то порядка 20 пунктов, а вот switch вернёт фиксированное значение, и значки будут очень далеко от экстремумов. И наоборот, если прошло большое движение, то значки будут прям на экстремумах.

Предложенный вариант решает этот недочёт. 

На самом деле, switch, который я привёл рисиует на всех стандартных ТФ чётко и примерно на одинаковом расстоянии. Вопрос в другом. Это как-бы не очень удобно и громоздко.

Кстати, по поводу параметра double pr. Полагаю, Вы переусердствовали. Здесь int'а более чем достаточно. А так весьма интересное решение.

Igor Makanu:

автомасштаб графиков по умолчанию включен, вот и сместились Ваши ARROW

ЗЫ: это еще мелочи, хуже когда на 2 дня разборок с заказчиком, который утверждает, что индикатор не правильно считает и пропускает бары по размерам меньше/больше/одинаковые.... хрен докажешь, что это автомасштаб сработал после прокрутки графика... ну и если отключить автомасштаб ... то графики совсем по другому выглядят ;)

В точку! Что-то я сразу об этом не подумал.

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