任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1091

 
FiVik:

下午好。我有一个问题:我在哪里可以看到在价格图表上从不同时间段输出一个指标值的代码实例?

我不能用谷歌搜索,也许我做了一个错误的请求。

我想在价格图表的第二栏中输出从H1到W1的布林线的标准偏差。 第二栏显示的是标准偏差乘以系数得到的数值。

布林线的修改。

代码库搜索的关键词 "多时限"。

可以使用OBJ_LABEL 来显示文本。

 
LRA:

1.在MetaEditor中尝试:文件-->打开共享数据文件夹。 你会看到文件夹的路径。这个问题已经讨论过很多次了,这里有一个链接 为例

2.首先尝试不包括在内。当你将调试它时,你将开始包括它。

3.使用上面的SRC 按钮,或使用下面的Attach file按钮,在这里插入你的资料。

非常感谢你。
 

请告知如何在07:00的条形图开盘价处画一条水平线

我已经写好了这段代码,但由于某些原因,线没有画出来。错误在哪里?

extern string StartTime = "07:00";          //Начальное время для анализа, 00:00 EST
extern string AlTime = "18:55";          //Время для трейдинга
extern string EndTime   = "20:00";          //Время экспирации
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {       
   ObjectCreate(ChartID(),"CORDON",OBJ_HLINE,0,0,Ask);        //созд гор линию по цене Ask
   
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_COLOR,clrDarkBlue);  //цвет темно-сиий
      
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
      
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош
   
   int IndexOfBar = iBarShift(ChartID(),PERIOD_H1, StringToTime(StartTime), true); //Считаем индекс бара по заданному времени StartTime
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   
   ObjectMove(ChartID(),"CORDON", 0, 0, StartPrice);          // меняем распол линии   
   return(0);
   }
 
RichLux:

请告知如何在07:00的条形图开盘价处画一条水平线。

我已经写好了这段代码,但由于某些原因,线没有画出来。错误在哪里?

如果你去掉ObjectMove,这一行是可见的?尝试Alert(StartPrice)。
 
LRA:
如果你去掉ObjectMove,这一行是可见的?尝试Alert(StartPrice)。

如果你删除了ObjectMove,你就看不到线,但是如果你写一个数值 代替 "IndexOfBar",例如,"double StartPrice = Open[5]; "它就会在第五个柱子的开盘价上画线

谢谢你对Alert的想法 - 它显示 "0 "值。

顺便说一下,该行也存在于数值为0的对象列表中。

 
RichLux:

请告知如何在07:00的条形图开盘价处画一条水平线。

我已经写好了这段代码,但由于某些原因,线没有画出来。错误在哪里?

你不能在井里画画和计算,这是一个严重的错误。Inite必须尽可能快地完成其工作。

这里的错误是int IndexOfBar = iBarShift(ChartID()_Symbol,PERIOD_H1, StringToTime(StartTime), true); //按给定的时间读取条形图的索引 StartTime

时间可以直接设置为数据时间格式,不需要在转换上浪费机器时间,工作原理是这样的。

#property strict
#property  show_inputs

extern datetime StartTime = D'07:00';          //Начальное время для анализа, 00:00 EST
extern datetime AlTime = D'18:55';          //Время для трейдинга
extern datetime EndTime   = D'20:00';          //Время экспирации
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
{       
   ObjectCreate(0,"CORDON",OBJ_HLINE,0,0,Ask);        //созд гор линию по цене Ask
   
   ObjectSetInteger(0,"CORDON",OBJPROP_COLOR,clrDarkBlue);  //цвет темно-сиий
      
   ObjectSetInteger(0,"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
      
   ObjectSetInteger(0,"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош
   
   int IndexOfBar = iBarShift(_Symbol,0, StartTime, false); //Считаем индекс бара по заданному времени StartTime
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   Print(IndexOfBar,", ",StartPrice);
   ObjectMove(0,"CORDON", 0, 0, StartPrice);          // меняем распол линии   
}
   
 
evillive:

你不能在init中画画和计算,这是个严重的错误。该倡议应尽快完成其工作。

这里的错误 -int IndexOfBar = iBarShift(ChartID()_Symbol,PERIOD_H1, StringToTime(StartTime), true); //按指定时间读取条形的索引 StartTime

时间可以直接设置为数据时间格式,不需要在转换上浪费机器时间,工作原理是这样的。

谢谢你为我提供的宝贵建议。

还要特别感谢你通过发现错误来提高我的士气。我又开始相信,我可以和MQL4交朋友了

 
RichLux: 版本的代码不起作用。图形上的线仍然没有出现...
// Вставил такой код в скрипт - линию рисует синюю на черном графике слабо видно
#property strict                                                       // -------- Возможно, Дело в этой строке
        
extern string StartTime = "07:00";          //Начальное время для анализа, 00:00 EST
extern string AlTime = "18:55";          //Время для трейдинга
extern string EndTime   = "20:00";          //Время экспирации
void OnStart()
{
   ObjectCreate("CORDON",OBJ_HLINE,0,0,Ask);    //созд гор линию по цене Ask   --- Для текущего графика ID пропускаем
   ObjectSetInteger(0,"CORDON",OBJPROP_COLOR,DarkBlue);  //цвет темно-сиий  --- 0 = текущий график   DarkBlue - то же самое
   ObjectSetInteger(0,"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
   ObjectSetInteger(0,"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош

   // Первый параметр нужен типа string, а функция ChartID возвращает long
   int IndexOfBar = iBarShift(NULL,PERIOD_H1, StringToTime(StartTime), true); //  --- NULL = текущий график  ЗДЕСЬ И БЫЛА ОШИБКА???
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   ObjectMove(ChartID(),"CORDON", 0, 0, StartPrice);          // меняем распол линии   
}
 
evillive:

你不能在init中画画和计算,这是个严重的错误。应尽快完成启动。


而如果你把inite中的计算放到一个单独的函数中,然后把这个函数插入inite中,就不会出现严重错误?

LRA

它已经起作用了。

 
RichLux:

而如果你把inite中的计算结果放入一个单独的函数中,然后把这个函数插入inite中,就不会出现严重的错误?

如果代码执行时间过长,inite将强行终止,代码根本没有时间被执行。执行的代码,包括调用二级函数,必须在MQL的预定义函数中 - 专家顾问的OnTick(),脚本的OnStart(),指标的OnCalculate()。

inite必须包含最少的代码,只有那些必须执行一次的东西,就在程序开始之前。例如,全局变量、数组、指标缓冲区的初始化