新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1119

 
Roman:

因为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。

枚举也可以通过将任何常量值赋值给枚举的一个成员

你可以创建你自己的枚举,以满足你的需要

 

非常感谢您!是wchar_t 帮了忙!我读到过,它为每个字符存储2个字节,与char不同。


extern "C" __declspec(dllexport) wchar_t* __stdcall ToString(wchar_t* str)

{

        str = L" - 889 - dsa - просто!";

        return L"--- Привет! ---";

}


但 "str "函数参数仍然没有返回分配给它的值......。我想知道为什么...

 

你好,你能告诉我如何解决一个问题吗?我想写一个基于指标(与铁挂钩)的EA,在图表上建立大量的水平(线),线的数量可以达到500。

我想实现的是,当价格与图表上的线条相交时,打开一个订单或任何其他事件(如警报或消息)。但问题是,该指标不返回任何数值,只画出水平线(有名称的对象)--图表上没有其他内容。

我试图通过iCustom函数找到一个解决方案,该函数通过"_price "变量检索价格水平,但当线被触及时,EA并没有打开交易。我不知道我做错了什么。

void OnTick()
  {
  
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参数中指定的水平上运行并打开交易。


extern string 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);}       

    } 
附加的文件:
we3s6_kgeqx.jpg  151 kb
 
Fib0 RU:

你好,你能告诉我如何解决一个问题吗?我想写一个基于指标(与铁挂钩)的EA,在图表上建立大量的水平(线),线的数量可以达到500。

我想实现的是,当价格与图表上的线条相交时,打开一个订单或任何其他事件(如警报或消息)。但问题是,该指标不返回任何数值,只画出水平线(有名称的对象)--图表上没有其他内容。

我试图通过iCustom函数找到一个解决方案,该函数通过"_price "变量检索价格水平,但当线被触及时,EA并没有打开交易。我不知道我做错了什么。

方案2,在我在设置中指定的线路上开立订单;它在我在EA参数中指定的水平上运行并开立交易。



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) {

                // ..... тут что-то происходит ... 

        }
}


但是,如果出价由于某种原因跳过了线,而且不等于线的价格,那该怎么办?那么至少提供一个变量,存储前一个刻度,如果是一个新的刻度越过你的线 - 然后做一些行动...但在这种情况下,不要忘记提供"可允许的 "交叉点,因为如果市场以一个大的缺口开盘,或有一个大的价格跳跃,你将在许多线上一次性打开,可能不是在你想要的地方。如果交叉点大于允许的范围--将只给出一条信息...

 
Vadim Lin:



但是,如果出价由于某种原因越过了线,而且不等于线的价格,那该怎么办?那么至少提供一个变量,在其中存储以前的刻度线,如果有一个新的刻度线穿过你的线 - 然后做一些动作...但在这种情况下,不要忘记提供"可允许的 "交叉点,因为如果市场将以一个大的缺口开盘,或只是一个大的价格跳跃,你将在许多线上一次性打开,可能没有你想要的地方。如果交叉点大于允许的范围--将只给出一个信息...

问题代码。

 
Igor Makanu:

什么胡言乱语?

擦擦你的眼睛,我给你看了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!

 
Roman:

现在肯定是隔离的时候了。搜索所有关于它的说法,并在你的闲暇时阅读它。为什么你认为你周围的人必须重复你所写的一切?

 
Alexey Viktorov:

现在肯定是隔离它的时候了。搜索所有关于它的说法,并在你的闲暇时阅读它。为什么你认为你周围的人应该重复你所写的一切?

而你为什么要忍受错误的解决方案?我已经对常数的值进行了逻辑解释,而不是开发者编造的。

 
Roman:

而你为什么要忍受错误的解决方案?我已经对常数的值进行了逻辑解释,而不是开发者编造的。

显然,对你来说,只有两种意见:你的意见和错误的意见。你也许能找到适合你的解释。
 
Alexey Viktorov:
显然,对你来说,只有两种意见:你的意见和错误的意见。你也许能找到适合你的解释。

在你的数学计算中,尽量使用_Period变量 返回的高于H1 的时期的
而你会立即明白谁是错的。

原因: