Смотрю я на свойства. Нет там, вроде бы, нужного. Как я понимаю, размер будет увеличиваться после создания объекта посредством свойства функцией ObjectSetInteger(), верно?
Свойства OBJPROP_FONTSIZE не подходит. Хотя, в документации Wingdings это шрифты...
Зависит от применения этого шрифта. Если ставить символ в индикаторный буфер, то увеличивается "толщиной" значка. Если-же в OBJ_TEXT то помещая текст указывается и размер.
Зависит от применения этого шрифта. Если ставить символ в индикаторный буфер, то увеличивается "толщиной" значка. Если-же в OBJ_TEXT то помещая текст указывается и размер.
Хм. В документации написано, что объекты с Wingdings-символами создаются как объекты типа OBJ_ARROW(). Поэтому, изначально, я сделал менно так.. В этом случает размер шрифта увеличить е получается.
Хм. В документации написано, что объекты с 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); } //+------------------------------------------------------------------+
вот набросал стрелки по 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() и подбирать значения, что бы всё было красиво.
Чушь какая-то. Не задавался размер.
Поехал на дачу съездил. Приехал. Проверил ещё раз.. Уже задаётся. Мда..
Тока вот функция создания объекта гонит конкретно. В строке:
Если вместо deviationFromExtremBarPrice() подставить фиксированное число, то будет рисоваться символ абы-где т.е. не на одинаковом расстоянии от хая бара на индексе barIndex. Хотя, вроде как должно быть всё корректно. Ведь цена, на которой рисуется объект будет хай + количество пунктов. А ни графике совсем не так. Пришлсоь писать switch() и подбирать значения, что бы всё было красиво.
Я использую вот это:
//=============================================================================================== //----------------- Возвращает интервал установки сигнальных указателей (%) --------------------+ //=============================================================================================== double GetArrowInterval(double pr) { return((ChartGetDouble(0,CHART_PRICE_MAX)-ChartGetDouble(0,CHART_PRICE_MIN))/100*pr); }
Тогда на любом тайме указатель в процентах на одном месте с отступом от свечей
Я использую вот это:
Тогда на любом тайме указатель в процентах на одном месте с отступом от свечей
А с чем это связано интересно, смогли понять?
Я так вообще откатал 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 }
Когда я его писал, где-то внутри меня было возмущение. Хотя, одновременно, мне было смешно. Абсурдное времяпровождение. На ровном месте нашёл себе работу подборщика отклонения от экстремума бара.. ))
А с чем это связано интересно, смогли понять?
Я так вообще откатал switch и пока что его использую))
Когда я его писал, где-то внутри меня было возмущение. Хотя, одновременно, мне было смешно. Абсурдное времяпровождение. На ровном месте нашёл себе работу подборщика отклонения от экстремума бара.. ))
Я от switch отказался давно. При использовании мелких таймов если начинается флет, то коридор где-то порядка 20 пунктов, а вот switch вернёт фиксированное значение, и значки будут очень далеко от экстремумов. И наоборот, если прошло большое движение, то значки будут прям на экстремумах.
Предложенный вариант решает этот недочёт.
А с чем это связано интересно, смогли понять?
автомасштаб графиков по умолчанию включен, вот и сместились Ваши ARROW
ЗЫ: это еще мелочи, хуже когда на 2 дня разборок с заказчиком, который утверждает, что индикатор не правильно считает и пропускает бары по размерам меньше/больше/одинаковые.... хрен докажешь, что это автомасштаб сработал после прокрутки графика... ну и если отключить автомасштаб ... то графики совсем по другому выглядят ;)
Я от switch отказался давно. При использовании мелких таймов если начинается флет, то коридор где-то порядка 20 пунктов, а вот switch вернёт фиксированное значение, и значки будут очень далеко от экстремумов. И наоборот, если прошло большое движение, то значки будут прям на экстремумах.
Предложенный вариант решает этот недочёт.
На самом деле, switch, который я привёл рисиует на всех стандартных ТФ чётко и примерно на одинаковом расстоянии. Вопрос в другом. Это как-бы не очень удобно и громоздко.
Кстати, по поводу параметра double pr. Полагаю, Вы переусердствовали. Здесь int'а более чем достаточно. А так весьма интересное решение.
автомасштаб графиков по умолчанию включен, вот и сместились Ваши ARROW
ЗЫ: это еще мелочи, хуже когда на 2 дня разборок с заказчиком, который утверждает, что индикатор не правильно считает и пропускает бары по размерам меньше/больше/одинаковые.... хрен докажешь, что это автомасштаб сработал после прокрутки графика... ну и если отключить автомасштаб ... то графики совсем по другому выглядят ;)
В точку! Что-то я сразу об этом не подумал.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Смотрю я на свойства. Нет там, вроде бы, нужного. Как я понимаю, размер будет увеличиваться после создания объекта посредством свойства функцией ObjectSetInteger(), верно?
Свойства OBJPROP_FONTSIZE не подходит. Хотя, в документации Wingdings это шрифты...