文章很有意思,谢谢!
沉重的话题。MT5.
是....一个非常有趣和有用的作品。到目前为止,我对它只是略知一二。我将仔细阅读。我将在我的开发中使用代码部分。
谢谢。
遗憾的是,MQ 没有将HistoryPositionGet 函数 添加到历史函数列表 中。如果有了它,就会容易得多。
Документация по MQL5: Торговые функции
- www.mql5.com
Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
这就是我们必须自己动手的原因
您好、
我怎样才能让指标不显示每笔盈亏,而是显示累计总额?
如果可能的话--用一条线?
我的直觉告诉我,您只需要把利润加到已经获得的利润上,而不是每次都把从仓位中获得的利润记录下来。
就是这样:
//+------------------------------------------------------------------+ //| 自定义指标迭代函数 //+------------------------------------------------------------------+ 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[]) { //--- 设置数组 close 和 time 的索引,与时间序列相同 ArraySetAsSeries(close,true); ArraySetAsSeries(time,true); //-- 成功创建项目列表的标志 static bool done=false; //--- 如果创建了位置数据对象 if(history!=NULL) { //--- 如果项目列表尚未创建 if(!done) { //--- 如果当前仪器的仓位列表创建成功、 if(history.CreatePositionList(Symbol())) { //--- 在日志中打印位置,并设置成功创建位置列表的标志 history.Print(); done=true; } } } //--- 指标计算所需的条数 int limit=rates_total-prev_calculated; //--- 如果限值大于 1,则表示这是第一次运行或历史数据发生了变化 if(limit>1) { //--- 设置计算条数等于所有可用历史记录,并以 "空 "值初始化缓冲区 limit=rates_total-1; ArrayInitialize(BufferFilling1,EMPTY_VALUE); ArrayInitialize(BufferFilling2,EMPTY_VALUE); } //--- 在符号历史记录栏循环中 static double profit=0; for(int i=limit;i>=0;i--) { //--- 获得周期索引为 i 的条形图上的仓位利润,并将获得的值写入第一个缓冲区 profit+= Profit(close[i],time[i]); BufferFilling1[i]=profit; //--- 始终将零写入第二个缓冲区。取决于第一个缓冲区中的值是大于还是小于零、 //--- 绘制的填充颜色将在指示器缓冲区数组 1 和 2 之间变化 BufferFilling2[i]=0; } //--- 为下一次调用返回 prev_calculated 的值 return(rates_total); }
那么,缓冲区作为一条线--它本身就是缓冲区。你需要删除一个额外的缓冲区,因为填充总是使用两个缓冲区。而一行只需要一个缓冲区。
我觉得可以了。
我做了你的修改,只是指定了类型--线条图形。
我没有删除缓冲区。
https://www.mql5.com/ru/charts/18738352/nzdcad-d1-roboforex-ltd
График NZDCAD, D1, 2024.01.03 16:11 UTC, RoboForex Ltd, MetaTrader 5, Real
- www.mql5.com
Символ: NZDCAD. Период графика: D1. Брокер: RoboForex Ltd. Торговая платформа: MetaTrader 5. Режим торговли: Real. Дата: 2024.01.03 16:11 UTC.
附加的文件:
新文章 图表上的历史仓位及其盈利/亏损图指标已发布:
在本文中,我将探讨根据交易历史获取已平仓头寸信息的选项。此外,我将创建一个简单的指标,以图表的形式显示每个柱形上仓位的大致盈利/亏损。
此函数获取价格(柱形的收盘价),相对于此价格应获得仓位的盈利点数,以及检查仓位存续的时间(柱形的开盘时间)。接下来将从每个历史仓位对象收到的所有仓位的盈利相加并返回。
编译完成后,我们可以在有大量持仓的交易品种图表上运行该指标,它会绘制所有历史仓位的盈利图表:
作者:Artyom Trishkin