文章 "MQL5 中创建订单号指标"

 

新文章 MQL5 中创建订单号指标已发布:

我们拟于本文中创建两个指标:标绘订单号价格图表的订单号指标,以及标绘带有指定订单号的烛形图的订单号烛形图指标。每个指标都会将新价格写入某文件,并在该指标重启后采用此保存数据(其它程序亦可使用这些数据)

作者:Denis Zyatkevich

 

感谢您提供这篇有趣的文章。

使用文件缓冲数据是必须的吗?

难道不能使用统计数组在内存中缓冲历史数据吗?

 

下午好!

我想看秒图 - 一根蜡烛几秒钟(5 秒、6 秒、10 秒、12 秒、15 秒)。查看价格随时间的变化。

 
Silent:

错字?

文章文本中。在示例中是正确的, AskBuffer
是的,这是一个错字。已更正。谢谢。
 

您好!

是否可以在测试器中使用拟议指标接收的刻度线文件进行多货币测试,同时禁止在测试器中创建虚拟刻度线,并按时间同步 工具价格数据

谢谢。

Документация по MQL5: Получение рыночной информации / SymbolIsSynchronized
Документация по MQL5: Получение рыночной информации / SymbolIsSynchronized
  • www.mql5.com
Получение рыночной информации / SymbolIsSynchronized - Документация по MQL5
 
robinz:

下午好!

我想看秒图 - 一根蜡烛几秒钟(5 秒、6 秒、10 秒、12 秒、15 秒)。查看价格随时间的变化。

这些图表超出了本文的范围,所以我建议您自己制作 - 不会比文中描述的更复杂。
rrr:

下午好

是否可以在测试器中使用拟议指标接收的刻度线文件进行多货币测试,同时禁止在测试器中创建虚拟刻度线,并按时间同步 工具价格数据

谢谢。

指标创建的报价文件当然可以用于其他目的。我建议您禁用不必要的功能(例如绘制图表)和数据处理(例如同步不同工具的数据)。顺便说一句,在我看来,借助 "智能交易系统"(Expert Advisor)更容易将报价写入文件(附件中也有说明):

int h;
void OnInit()
  {
   string s;
   StringConcatenate(s,Symbol(),".txt");
   h=FileOpen(s,FILE_READ|FILE_WRITE|FILE_ANSI|FILE_SHARE_READ);
   FileSeek(h,0,SEEK_END);
  }

void OnTick()
  {
   string s;
   StringConcatenate(s,TimeCurrent(),"  ",DoubleToString(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)," ",DoubleToString(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits));
   FileWrite(h,s);
   FileFlush(h);
  }

void OnDeinit(const int reason)
  {
   FileClose(h);
  }
附加的文件:
ticklog.mq5  1 kb
 

文章很好,感谢您提供的指标!

在运行tickindicator.mq5 时,我遇到了这个问题

我编译了指标。我运行了它。

指标窗口出现。有一个刻度,最小值和最大值的数字都很大。指标沿着水平线移动。我试着修正指标的最小值和最大值。指标似乎出现了,但出价上有一些垂直线。


 
denkir:

文章很好,感谢您提供的指标!

在运行tickindicator.mq5 时,我遇到了这个问题

我编译了指标。我运行了它。

指标窗口出现。有一个刻度,最小值和最大值的数字都很大。指标沿着水平线移动。我试着修正 指标的最小值 和最大值。指标似乎出现了,但出价上有一些垂直线。

有必要初始化指标缓冲区中的所有值。

最有可能的是 IMHO - 我还没有查看代码)。

 

告诉我哪里需要修正。

在大于 M30 的时间框架上,刻度开始显示疯狂的数字。

 
fyords:

告诉我哪里需要修正。

在大于 M30 的时间框架上,刻度开始显示疯狂的数字。

正如我的同事Dima_S 所建议的那样,在初始化指标时,值得向缓冲区填充一些东西。

因为我们有TickIndicator.mq5 代码:

//+------------------------------------------------------------------+
//| OnInit() 函数|
//+------------------------------------------------------------------+
void OnInit()
  {
// 数组 BidBuffer[] 是指标缓冲区
   SetIndexBuffer(0,BidBuffer,INDICATOR_DATA);
// AskBuffer[] 数组是指示器缓冲区
   SetIndexBuffer(1,AskBuffer,INDICATOR_DATA);
// 不绘制出价线的零值
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
// 不绘制询问线的零值
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
  }

有必要插入以下几行:

ArrayInitialize(BidBuffer,0);
ArrayInitialize(AskBuffer,0);
 
denkir:

正如我的同事Dima_S 所建议的那样,在初始化指标时,值得在缓冲区中填入一些东西。我是这么做的:

ArrayInitialize(BidBuffer,EMPTY_VALUE);
ArrayInitialize(AskBuffer,EMPTY_VALUE);

我是这么做的,但没什么用。

ArrayInitialize(BidBuffer,0.0);
ArrayInitialize(AskBuffer,0.0);
这种方法也可以。