初学者的问题 MQL5 MT5 MetaTrader 5 - 页 809

 
你好!
你能告诉我哪个kodobase主题有一个绘制数字的算法的例子,使条形索引数字显示在窗口的底部和/或顶部?如图片所示。
重点是,OBJ_TEXT 被映射为价格和时间,OBJ_LABEL被映射为以像素为单位的窗口坐标。但如何将它们结合起来呢?
 
Leo59:
你好!
你能告诉我哪个Kodobase主题有一个绘制数字的算法的例子,使窗口的底部和/或顶部显示条形索引数字?如图片所示。
重点是, OBJ_TEXT 被映射为价格和时间,OBJ_LABEL被映射为以像素为单位的窗口坐标。但如何将它们结合起来呢?

你需要去看价格,而价格是蜡烛图的高点或低点,那么对象就会到位。

 
Vitaly Muzichenko:

你需要去看价格,而价格是蜡烛图的高点或低点,那么对象就会到位。

"在窗口的底部和/或顶部 显示条形指数数字 "和 "指定高点或低点烛台 "并不是 "焦点"。

 
Leo59:

"窗口的底部和/或顶部 显示条形指数数字 "和 "指定蜡烛的高点或低点 "不是一个 "焦点"。

这个

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Примеры работы с графиком
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Примеры работы с графиком
  • www.mql5.com
В этом разделе представлены примеры для работы со свойствами графика. Для каждого свойства приведены одна или две законченные функции, которые позволяют задавать/получать значение этого свойства. Эти функции можно использовать в своих MQL5 программах как есть. На рисунке показана графическая панель для наглядной демонстрации того, как изменение...
 
Vitaly Muzichenko:

这个

我看到这一节已经很多年了。但这就是我所拥有的全部大脑。
#property  indicator_chart_window

extern int History = 35;                                              // Сколько баров мы имеем ввиду
extern int Multiple = 5;                                              // Кратность отображаемой разметки

color    Color=0;
color    Color_multiple=Moccasin;                                     // Цвет индексов кратных "Multiple"
color    Color_between=MintCream;                                     // Цвет индексов промежуточных 
string   name="";
string   Text="";
int      Font_size=0;
int      Font_size_multiple=14;                                       // Размер шрифта индексов кратных "Multiple"
int      Font_size_between=8;                                         // Размер шрифта индексов промежуточных

bool     Back=true;                                                   //--- отобразим на переднем (false) или заднем (true) плане. Если (true), то подсветки дат не выводится
string   Font="Arial";                                                // Шрифт
double   Angle=270.0;                                                 // Угол наклона в градусах

int      Style=STYLE_DOT;                                             // Для всех - стиль пунктир
int      Width=1;                                                     // Толщина линии

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//+------------------------------------------------------------------+
//| Custom indicator initialization function                    F  1 | int init()
//+------------------------------------------------------------------+
int init()
   {
//    IndicatorShortName(IN + " (" + ")");                              // Короткое имя индикатора
    return(INIT_SUCCEEDED);                                           // Успешная инициализация приложения
   }

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//+------------------------------------------------------------------+
//| expert deinitialization function                             F 2 | int deinit()
//+------------------------------------------------------------------+
int deinit() // Время исполнения специальной функции deinit() ограничено периодом 2,5 секунды.
   {
    ObjectsDeleteAll(0, "label", 0);                                  // Идентификатор графика, префикс имени объекта, индекс окна
    return(0);                                                        // Выход из deinit()
   }

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//+------------------------------------------------------------------+
//| Custom indicator iteration function                         F  3 | int start()
//+------------------------------------------------------------------+
int start()
   {
    int i=0;
    int limit=Bars-IndicatorCounted()-1; 
    if(limit>1) limit=MathMin(Bars, History+(History==0)*Bars)-1;
    
    for(i=0; i<History; i++)
        {
         name = "label "+i;
         Text = DoubleToStr(i,0);
          
         if(MathMod(i, Multiple) == 0)                                     // MathMod() Возвращает вещественный остаток от деления двух чисел (i/Multiple).
             {
              Color = Color_multiple;
              Font_size = Font_size_multiple;

              if(ObjectFind(0, name)==-1)                                  // Если объект "name" не найден
                  {
                   ObjectCreate(0,name,OBJ_VLINE,0,Time[i],0);             // Создаем объект..
                   ObjectSetInteger(0,name,OBJPROP_STYLE,Style);           //--- установим стиль отображения линии
                   ObjectSetInteger(0,name,OBJPROP_WIDTH,Width);           //--- установим толщину линии
                   ObjectSetInteger(0,name,OBJPROP_COLOR,Color);           //--- установим цвет
                   ObjectSetString(0,name,OBJPROP_TEXT,Text);              //--- установим текст
                   ObjectSetString(0,name,OBJPROP_FONT,Font);              //--- установим шрифт текста
                   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,Font_size);    //--- установим размер шрифта
                   ObjectSetDouble(0,name,OBJPROP_ANGLE,Angle);            //--- установим угол наклона текста
                   // Для отображения текстового описания объекта необходимо включить галочку опции "Показывать описания объектов" в окне Графики->Свойства финансового инструмента (F8) > Общие.         
                   ObjectSetInteger(0,name,OBJPROP_BACK, Back);            //--- отобразим на переднем (false) или заднем (true) плане
                  }
               else                                                        // Если объект "name" найден
                  {
                   ObjectMove(0,name, 0, Time[i], 0);                     // Сообщение новых координат. 
                  }
             }
//         else
//             {
//              Color = Color_between;
//              Font_size = Font_size_between;
//
//              if(ObjectFind(0, name)==-1)                                  // Если объект "name" не найден
//                  {
//                   ObjectCreate(0,name,OBJ_VLINE,0,Time[i],0);             // Создаем объект..
//                   ObjectSetInteger(0,name,OBJPROP_STYLE,Style);           //--- установим стиль отображения линии
//                   ObjectSetInteger(0,name,OBJPROP_WIDTH,Width);           //--- установим толщину линии
//                   ObjectSetInteger(0,name,OBJPROP_COLOR,Color);           //--- установим цвет
//                   //ObjectSetString(0,name,OBJPROP_TEXT,Text);              //--- установим текст
//                   //ObjectSetString(0,name,OBJPROP_FONT,Font);              //--- установим шрифт текста
//                   //ObjectSetInteger(0,name,OBJPROP_FONTSIZE,Font_size);    //--- установим размер шрифта
//                   ObjectSetDouble(0,name,OBJPROP_ANGLE,Angle);            //--- установим угол наклона текста
//                   // Для отображения текстового описания объекта необходимо включить галочку опции "Показывать описания объектов" в окне Графики->Свойства финансового инструмента (F8) > Общие.         
//                   ObjectSetInteger(0,name,OBJPROP_BACK, Back);            //--- отобразим на переднем (false) или заднем (true) плане
//                  }
//               else                                                        // Если объект "name" найден
//                  {
//                   ObjectMove(0,name, 0, Time[i], 0);                     // Сообщение новых координат. 
//                  }
//             }
        }
    return(0);
   }

 
Leo59:
你好!
你能告诉我哪个Kodobase主题有一个绘制数字的算法的例子,使窗口的底部和/或顶部显示条形图的索引号?如图片所示。
重点是,OBJ_TEXT 被映射为价格和时间,OBJ_LABEL被映射为以像素为单位的窗口坐标。但如何将它们结合起来呢?

通过这些函数,ChartTimePriceToXY和 ChartXYToTimePrice可以放在任何地方

 
Leo59:
你好!
你能告诉我哪个kodobase主题有一个绘制数字的算法的例子,使条形索引数字显示在窗口的底部和/或顶部?如图片所示。
重点是,OBJ_TEXT 被映射为价格和时间,OBJ_LABEL被映射为以像素为单位的窗口坐标。但如何将它们结合起来呢?

为什么我需要图表上的数字?在如何查看条形号码的文件中,有一个现成的解决方案

Документация по MQL5: Операции с массивами / ArraySetAsSeries
Документация по MQL5: Операции с массивами / ArraySetAsSeries
  • www.mql5.com
//| Custom indicator initialization function                         | //| Custom indicator iteration function                              |
 
Leo59:
我看到这一节已经很多年了。但我的大脑只够用于此

一个不引人注意的建议。

如果你想掌握mql5,试着摆脱extern, int init(), int deinit() and int start().

用成熟的输入法取代它们,int OnInit(), void OnDeinit(const int reason) 和 void OnTick()

 

问候!


你能告诉我如何使一个数组的instu

我正试图这样做。

输入双倍Df_1 = 0.8。

输入双倍Df_2 = 0.1。

输入双倍Df_3 = 0.3。


const double Df[3] = {Df_1 ,Df_2 ,Df_3 };


但它产生了一个错误。

'Df_1' - 需要常数表达式

'Df_2' - 需要常数表达式

'Df_3' - 需要常数表达式

参照阵列初始化 字符串
 
Anttonnio:

问候!


你能告诉我如何使一个数组的instu

我正试图这样做。

输入双倍Df_1 = 0.8。

输入双倍Df_2 = 0.1。

输入双倍Df_3 = 0.3。


const double Df[3] = {Df_1 ,Df_2 ,Df_3 };


但它产生了一个错误。

'Df_1' - 需要常数表达式

'Df_2' - 需要常数表达式

'Df_3' - 需要常数表达式

参照阵列初始化 字符串

数组必须用常数进行初始化。

如果你想用输入参数来填充它,首先声明它,然后逐项说明。

原因: