//+------------------------------------------------------------------+//| Test.mq5 |//| Copyright 2018, MetaQuotes Software Corp. |//| https://mql5.com/ru/users/artmedia70 |//+------------------------------------------------------------------+#property copyright"Copyright 2018, MetaQuotes Software Corp."#property link"https://mql5.com/ru/users/artmedia70"#property version"1.00"#property indicator_separate_window#property indicator_buffers1#property indicator_plots1//--- plot OC#property indicator_label1"Open/Close"#property indicator_type1DRAW_LINE#property indicator_color1clrRed#property indicator_style1STYLE_SOLID#property indicator_width11//--- indicator buffersdouble BufferOC[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- Задаём массив BufferOC как буфер индикатораSetIndexBuffer(0,BufferOC,INDICATOR_DATA);
//--- Устанавливаем ему направление индексации как у таймсерииArraySetAsSeries(BufferOC,true);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Проверка на минимальное колиество баров для расчётаif(rates_total<1) return0;
//--- Установка массивов буферов как таймсерийArraySetAsSeries(open,true);
ArraySetAsSeries(close,true);
//--- Проверка и расчёт количества просчитываемых баровint limit=rates_total-prev_calculated;
if(limit>1) // если это первый запуск, или изменение истории, или открытие нового бара
{
limit=rates_total-1; // установим начало цикла на начало исторических данныхArrayInitialize(BufferOC,EMPTY_VALUE); // инициализируем массив
}
//--- Расчёт индикатораfor(int i=limit; i>=0 && !IsStopped(); i--)
{
if(close[i]==0) continue;
BufferOC[i]=open[i]/close[i];
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
double fArray[];
int nBarsCnt = iBars(<символ>, <таймфрейм>);
if (ArrayResize(fArray, nBarsCnt) != nBarsCnt)
{
// Не удалось изменить размер массиваreturn;
}
ArraySetAsSeries(fArray, true);
如何正确地做到这一点?
你是如何做到的?
简化后,CopyOpen我理解为对OnCalculate 来说是多余的,但这样它只看到终端窗口的历史?
简而言之,CopyOpen对于OnCalculate来说是不必要的,但这样它就只能看到终端窗口的历史记录?
数组mas在每次打勾时都是以零尺寸创建的,并且在其他任何地方都不会改变其尺寸。所以对它的任何访问都会导致阵列超限。
为了解决这个问题,我们应该调整它的大小,使其包含所有历史条形图的读数,或者将其绑定到指标缓冲区(作为程序的一个全局变量 宣布)。如果我理解正确,这些值应该用指标来显示。
简化后,CopyOpen我理解为对OnCalculate来说是多余的,但这样它只看到终端窗口的历史?
例子。
mas数组在每次打勾时都是以零大小创建的,在其他地方不会改变其大小。因此,对它的任何引用都会导致从数组中退出。
为了解决这个问题,你应该调整它的大小,使其包含所有历史条的读数,或者将其绑定到指标缓冲区(作为程序的全局变量 声明)。如果我理解正确的话,就是必须用指标来显示这些数值。
我的错误,mas[]确实应该是一个全局数组,但指标缓冲区也不合适,它反而会是一个中间的多维数组。对于M5来说,不通过指示器缓冲区来确定最佳阵列大小,有什么好办法?
我的不准确,mas[]确实是一个全局数组,但指标缓冲区也不合适,相反,它应该是一个中间的多维数组。对于M5来说,确定最佳阵列大小的最好方法是什么,而不是通过指标缓冲器?
我不明白我说的多维度是什么意思。我们说的是一个一维数组。此外,在MQL4中,数组的最大尺寸是4。
为了使数组的大小与时间序列相同,我们应该根据图表上所需符号和周期的可用条数 来调整其大小。
我的不准确,mas[]确实是一个全局数组,但指标缓冲区也不合适,相反,它应该是一个中间的多维数组。对于M5来说,不是通过指示器缓冲器,有什么好的方法来确定最佳阵列大小?
为什么你不想用数组作为指标缓冲区?它们由子系统监控,这使你的工作更容易。
而中间的指标缓冲阵列也很容易做到。
你好。
平台上的量是tick量,会不会有真实的量?
你好。
在平台上,交易量在滴答作响,会不会有真正的交易量?
不会的。使用MT5,一些经纪商在那里提供真实的交易量。
下午好!
请帮助解决以下问题。
1) 在某些条件得到满足后,挂单 开仓。
请告诉我,如果价格已经超过止损(该挂单),该如何添加和删除挂单?
对不起,这个问题很愚蠢,我在论坛上寻找答案的时候迷路了。
提前感谢!