voidOnTick()
{
ENUM_OBJECT typeObj = OBJ_HLINE;
string ArrLines[];
double
Price;
Price=Bid;
//ВАРИАНТ 1 (не получился). Я хотел, чтобы ордер открывался при пересечении любой из линий на графике //вызовем индикатор: (пара, таймфрейм, индикатор...)iCustom(Symbol(), 0, "ITS-Level Gun", 0, 0);
int i, k = ObjectsTotal();
ArrayResize(ArrLines, 0);
//в цикле перебираем все объекты на графикеfor (i=k-1; i>=0; i--) {
//узнаем имя объекта на графикеstring _name = ObjectName(i);
{
//узнаем координату цены линииdouble _price = NormalizeDouble(ObjectGetDouble(0, _name, OBJPROP_PRICE), Digits);
}
}
if(Price==_price)
{OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);}
// И ВСЁ, дальше не знаю, что делать
}
}
方案2.在我在设置中指定的线路上开立订单,它在我在EA参数中指定的水平上运行并打开交易。
externstring h="@Line_week_open-0"; //ИЗМЕНЕНИЕ ННАЗВАНИЯ ЛИНИИ В СВОЙСТВАХ СОВЕТНИКА.ВАРИАНТ 2.if(ObjectFind(h)>-1)
{
double prise = ObjectGet(h, OBJPROP_PRICE1);
if (Price==prise)
{OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);}
}
for(int i = ObjectsTotal() - 1; i >=0; i--) {
// все что не горизонтальные линии - игнорируемif(ObjectType(ObjectName(i)) != OBJ_HLINE) continue;
double PriceLine = NormalizeDouble(ObjectGet(ObjectName(i), OBJPROP_PRICE1), Digits());
// измените условие Bid == PriceLine
if(Bid == PriceLine) {
// ..... тут что-то происходит ...
}
}
因为H1以下的分钟时间框架会返回正确的数值。
正如帮助中所描述的,它们返回的是时间框架值,而不是一个开箱即用的常数。
什么胡言乱语?
擦擦你的眼睛,我给你看了ENUM_TIMEFRAMES的内部表述
第16位被设置决定了每周和每月的时间框架
第15位被设置,以确定每小时的时间TF和TF D1 = 1000000011000 --> 11000 --> 24,即开发者已经将D1比作24小时,其余的每小时时间TF对应于十进制转换
分钟的时间框架与小时的相同,但高位被重置了
另一个问题是,你认为返回ENUM_TIMEFRAMES的函数以分钟为单位返回TF的时间--这不是真的, 这些函数返回 ENUM_TIMEFRAMES 的枚举--没有更多或更少,只是ENUM_TIMEFRAMES。
请看帮助中的例子:https://www.mql5.com/ru/docs/basis/types/integer/enumeration。
枚举也可以通过将任何常量值赋值给枚举的一个成员
你可以创建你自己的枚举,以满足你的需要
https://www.mql5.com/ru/articles/18
https://www.mql5.com/ru/articles/5798
非常感谢您!是wchar_t 帮了忙!我读到过,它为每个字符存储2个字节,与char不同。
但 "str "函数参数仍然没有返回分配给它的值......。我想知道为什么...
你好,你能告诉我如何解决一个问题吗?我想写一个基于指标(与铁挂钩)的EA,在图表上建立大量的水平(线),线的数量可以达到500。
我想实现的是,当价格与图表上的线条相交时,打开一个订单或任何其他事件(如警报或消息)。但问题是,该指标不返回任何数值,只画出水平线(有名称的对象)--图表上没有其他内容。
我试图通过iCustom函数找到一个解决方案,该函数通过"_price "变量检索价格水平,但当线被触及时,EA并没有打开交易。我不知道我做错了什么。
方案2.在我在设置中指定的线路上开立订单,它在我在EA参数中指定的水平上运行并打开交易。
你好,你能告诉我如何解决一个问题吗?我想写一个基于指标(与铁挂钩)的EA,在图表上建立大量的水平(线),线的数量可以达到500。
我想实现的是,当价格与图表上的线条相交时,打开一个订单或任何其他事件(如警报或消息)。但问题是,该指标不返回任何数值,只画出水平线(有名称的对象)--图表上没有其他内容。
我试图通过iCustom函数找到一个解决方案,该函数通过"_price "变量检索价格水平,但当线被触及时,EA并没有打开交易。我不知道我做错了什么。
方案2,在我在设置中指定的线路上开立订单;它在我在EA参数中指定的水平上运行并开立交易。
但是,如果出价由于某种原因跳过了线,而且不等于线的价格,那该怎么办?那么至少提供一个变量,存储前一个刻度,如果是一个新的刻度越过你的线 - 然后做一些行动...但在这种情况下,不要忘记提供"可允许的 "交叉点,因为如果市场以一个大的缺口开盘,或有一个大的价格跳跃,你将在许多线上一次性打开,可能不是在你想要的地方。如果交叉点大于允许的范围--将只给出一条信息...
但是,如果出价由于某种原因越过了线,而且不等于线的价格,那该怎么办?那么至少提供一个变量,在其中存储以前的刻度线,如果有一个新的刻度线穿过你的线 - 然后做一些动作...但在这种情况下,不要忘记提供"可允许的 "交叉点,因为如果市场将以一个大的缺口开盘,或只是一个大的价格跳跃,你将在许多线上一次性打开,可能没有你想要的地方。如果交叉点大于允许的范围--将只给出一个信息...
问题代码。
什么胡言乱语?
擦擦你的眼睛,我给你看了ENUM_TIMEFRAMES的内部表述
第16位被设置决定了每周和每月的时间框架
第15位被设置,以确定每小时的时间TF和TF D1 = 1000000011000 --> 11000 --> 24,即开发者已经将D1比作24小时,其余的每小时时间TF对应于十进制转换
分钟的时间框架与小时的相同,但高位被重置了
另一个问题是,你认为返回ENUM_TIMEFRAMES的函数以分钟为单位返回TF的时间--这不是真的, 这些函数返回 ENUM_TIMEFRAMES 的枚举--没有更多或更少,只是ENUM_TIMEFRAMES。
请看帮助中的例子:https://www.mql5.com/ru/docs/basis/types/integer/enumeration。
枚举也可以通过将任何常量值赋值给枚举的一个成员
你可以创建你自己的枚举,以满足你的需要
伊戈尔,关于恒定值,很长时间以来都很清楚。
这就是我所说的,15位和16位作为返回值的意义是什么。 这简直是无稽之谈。
由于某种原因,在M30之前,ENUM常数 对应于TIMFRAME 值!!!!。
而且进一步说,它已经对应于一些比特的值。 这些人的逻辑到底在哪里。
这是一个粗制滥造的错误。 如果是故意这样做,那就是转移视线)。
变量_Period已经包含了所有这些来自ENUM 枚举的时间框架值,它们不需要额外的转换。
因此,这些常量值,应该对应 于 帮助中所述的 时间框架值。不是BITS!
现在肯定是隔离的时候了。搜索所有关于它的说法,并在你的闲暇时阅读它。为什么你认为你周围的人必须重复你所写的一切?
现在肯定是隔离它的时候了。搜索所有关于它的说法,并在你的闲暇时阅读它。为什么你认为你周围的人应该重复你所写的一切?
而你为什么要忍受错误的解决方案?我已经对常数的值进行了逻辑解释,而不是开发者编造的。
而你为什么要忍受错误的解决方案?我已经对常数的值进行了逻辑解释,而不是开发者编造的。
显然,对你来说,只有两种意见:你的意见和错误的意见。你也许能找到适合你的解释。
在你的数学计算中,尽量使用_Period变量 返回的高于H1 的时期的值。
而你会立即明白谁是错的。