int Bollinger_Bands(int _Average_Period, int _Number)
{
double Buffer_BASE_LINE[]; // Массив Буффера Линии BASE_LINEdouble Buffer_UPPER_BAND[]; // Массив Буффера Линии UPPER_BANDdouble Buffer_LOWER_BAND[]; // Массив Буффера Линии LOWER_BANDint Bar_Cash = _Average_Period; // Количество плучаемых значений от индикатораint Bands_Handel = 0; // Хендл индикатора Bollinger_Bands//---//double Base_Line = 0; // Значение линии BASE_LINEdouble Upper_Line = 0; // Значение линии UPPER_BANDdouble Lower_Line = 0; // Значение линии LOWER_BAND//---//double Band_Size_Buffer[];// Буфер расчётных значений разницы между линиями индикатора
int Band_Size_Total = 0;// Итог среднего значения расстояния между линиями в пунктах
ENUM_APPLIED_PRICE applied_price = PRICE_CLOSE; // тип цены //---//ArrayResize(Band_Size_Buffer,_Average_Period+1);
ArrayResize(Buffer_UPPER_BAND,_Average_Period+1);
ArrayResize(Buffer_LOWER_BAND,_Average_Period+1);
//---//
Bands_Handel = iBands(_Symbol,PERIOD_CURRENT,20,2,0,applied_price);
//---// CopyBuffer(Bands_Handel,0,_Number,_Average_Period,Buffer_BASE_LINE); ArraySetAsSeries(Buffer_BASE_LINE,true);
CopyBuffer(Bands_Handel,1,_Number,_Average_Period,Buffer_UPPER_BAND); ArraySetAsSeries(Buffer_UPPER_BAND,true);
CopyBuffer(Bands_Handel,2,_Number,_Average_Period,Buffer_LOWER_BAND); ArraySetAsSeries(Buffer_LOWER_BAND,true);
//---////---// Тут получение значений для выбранного номера бара из переменной которая передаётся в функцию (использовал как проверку получения данных по линиям)
Base_Line = NormalizeDouble(Buffer_BASE_LINE[_Number], _Digits); //Alert("Base_Line[",_Number,"] = ",Base_Line);
Upper_Line = NormalizeDouble(Buffer_UPPER_BAND[_Number], _Digits); //Alert("Upper_Line[",_Number,"] = ",Upper_Line);
Lower_Line = NormalizeDouble(Buffer_LOWER_BAND[_Number], _Digits); //Alert("Lower_Line[",_Number,"] = ",Lower_Line);//---////---// ** А это расчёт среднего расстояния между внешними линиями Боллинджера за указанный период. Получается 0 потому что одно число отнимается само от себя.for(int i=_Average_Period; i>=0; i--) {
//---//
Upper_Line = NormalizeDouble(Buffer_UPPER_BAND[i], _Digits); //Alert("Upper_Line[",i,"] = ",Upper_Line);
Lower_Line = NormalizeDouble(Buffer_LOWER_BAND[i], _Digits); //Alert("Lower_Line[",i,"] = ",Lower_Line);//---//
Band_Size_Buffer[i] = NormalizeDouble( ((Upper_Line - Lower_Line) / _Point), 2); //Alert("Band_Size_Buffer[",i,"] = ",Band_Size_Buffer[i]);
}//---//
Band_Size_Total = (int) MathMean(Band_Size_Buffer);
//---//return(Band_Size_Total);
}
各位高手,你们好!
我在从一个指标获取数据方面遇到了问题--请帮帮我,谁能做到....。
函数目标: 计算指定时间段内指标"布林线"外线之间的平均点距。
问题实质: ,我无法获得指定条形图上指标线的实际价格值,因为出于某种原因,相同的价格值被写入指标的不同缓冲区,而这些缓冲区也与该条形图上任何一条线的实际价格值不一致。结果,一些未知的价格值被写入不同的缓冲区(在不同的请求下),这使得函数的整个后续工作无效。
此外,使用与该函数完全相同的方法,我可以从任何其他指标中获取指标,但在这里不起作用....。
如何在使用标准库 打开订单后获得票据?
我能确定这里已经收到服务器的响应 吗?在等待服务器响应时终端会挂起吗?不清楚。
在 MQ4 中一切都很简单:
我能确定这里已经收到服务器的响应 吗?在等待服务器响应时终端会挂起吗?我不明白。
在 MQ4 中一切都很简单:
最好使用OnTradeTransaction() 事件处理
最好使用OnTradeTransaction() 事件处理程序
谢谢!那我得重做几个函数了。
也许你在什么地方见过计算 mql5 滑点的函数?
谢谢!那我得重新做几个功能了。
你在哪里看到过计算 mql5 滑移的函数?
为什么要找?在 OnTradeTransaction 中,您可以捕捉下单事件,读取订单价格,然后捕捉交易,读取交易价格并获取这些价格的差值。
您也可以在全局级别创建一个变量,在发送订单时将价格写入该变量,然后在OnTradeTransaction 中 获取 交易价格...
Alexey Viktorov #:
您也可以在全局级别创建一个变量,在发送订单时将价格写入该变量,然后在OnTradeTransaction.... 中 获取交易价格。
这个选项肯定是不行的。如果发送很多订单,我需要一个没有票据的价格,OnTradeTransaction 将如何处理?
该选项已被淘汰。如果我发送了很多订单,在没有票据的情况下该如何定价,OnTradeTransaction 将如何处理?
通过仓位 ID 可以顺利处理。
您获得一笔交易,从中获得头寸 ID,然后根据该 ID 从历史记录中提取订单和交易,并在其中读取订单和交易价格。
阅读文档。你会发现很多有趣的东西。
Alexey Viktorov #:
您获得一笔交易,从中获得头寸 ID,然后根据该 ID 从历史记录中提取订单和交易,并读取订单和交易价格。
这很清楚!但第二种方法是在发送订单时,在全局范围内保存价格,然后在 OnTradeTransaction 中获取交易价格......我不太明白。为什么要在发送订单时保存一个与订单无关的价格?
简而言之,我会这样做--获取交易,然后从中提取所有其他信息。
问题实质: ,我无法获得指定条形图上指标线的真实价格值,因为出于某种原因,相同的价格值被写入指标的不同缓冲区,而这些缓冲区也与该条形图上任何一条线的真实值不一致。结果,一些未知的价格值被写入不同的缓冲区(在不同的请求下),这使得函数的整个后续工作无效。
此外,使用与该函数完全相同的方法,我可以从任何其他指标中获取指标,但在这里不起作用....。
Bolinger 是 SMA +- N*标准差。
标准偏差和 SMA 有自己的指标。但计算时不需要它们--拿一本参考书,这里有一个公式。您可以从中找到 "线间点的平均距离",根据默认值,它目前等于 4 个西格玛。
还有平均值(哪个时期的?),您费心去计算它吗?
事实上,您想知道标准偏差的平均值。
这一点很清楚!但是第二种选择,即在发送订单时在全局级别保存价格,然后在 OnTradeTransaction 中获取交易价格......我不太明白。为什么要在发送订单时保存与订单无关的价格?
简而言之,我会这样做--获取交易,然后从中提取所有其他信息。
这是在冷静交易时说的,那时一切都会来得及......而不考虑这一点
关于交易、自动交易系统和测试交易策略的论坛
来自初学者的问题 MQL5 MT5 MetaTrader 5
Nauris Zukas, 2022.06.11 17:49
这个选项肯定被淘汰了。如果 我发送许多订单,没有票据的价格是多少,OnTradeTransaction 将如何处理?