//+------------------------------------------------------------------+ //| Cоздает прямоугольник по заданным координатам | //+------------------------------------------------------------------+ bool RectangleCreate(constlong chart_ID=0, // ID графика conststring name="Rectangle", // имя прямоугольника constint sub_window=0, // номер подокна datetime time1=0, // время первой точки double price1=0, // цена первой точки datetime time2=0, // время второй точки double price2=0, // цена второй точки constcolor clr=clrRed, // цвет прямоугольника constENUM_LINE_STYLE style=STYLE_SOLID, // стиль линий прямоугольника constint width=1, // толщина линий прямоугольника constbool fill=false, // заливка прямоугольника цветом < --- Есть только тут дальше в коде нетconstbool back=false, // на заднем плане constbool selection=true, // выделить для перемещений constbool hidden=true, // скрыт в списке объектов constlong z_order=0) // приоритет на нажатие мышью
{
//--- установим координаты точек привязки, если они не заданы
ChangeRectangleEmptyPoints(time1,price1,time2,price2);
//--- сбросим значение ошибки ResetLastError();
//--- создадим прямоугольник по заданным координатам if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": не удалось создать прямоугольник! Код ошибки = ",GetLastError());
return(false);
}
//--- установим цвет прямоугольника ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль линий прямоугольника ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линий прямоугольника ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим выделения прямоугольника для перемещений //--- при создании графического объекта функцией ObjectCreate, по умолчанию объект //--- нельзя выделить и перемещать. Внутри же этого метода параметр selection //--- по умолчанию равен true, что позволяет выделять и перемещать этот объект ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение return(true);
}
似乎如果你尽可能多地使用位置注释(31个字符),那么在工具提示中就没有更多的空间来显示ID。
下午好!
有没有人有一个频繁发送电子邮件的EA?
你每小时、每天能得到多少个?
我在5分钟内发送了16封电子邮件,日志在几个小时内是空的,然后它开始写入
邮件:没有足够的空间给
谁对这个问题有什么经验。
P.S. Gmail的谷歌允许你每秒钟都能收到邮件,我认为邮件在终端/服务器队列中堆积得更快,而且发送得更慢(多少?)
而顾问/终端再次试图排队发送电子邮件,而队列已经满了!!。
下午好!
有没有人有一个频繁发送电子邮件的EA?
你每小时、每天能得到多少个?
我在5分钟内发送了16封电子邮件,日志在几个小时内是空的,然后它开始写入
邮件:没有足够的空间给
谁对这个问题有什么经验。
P.S. Gmail的谷歌允许你每秒钟都能收到邮件,我认为邮件在终端/服务器队列中堆积得更快,而且发送得更慢(多少?)
而顾问/终端再次试图排队发送电子邮件,而队列已经满了!!。
他们很久以前就发明了PUSH,为什么?
文件中的错误
文件中的错误
谢谢你,我们会修复它。
我在论坛上多次遇到用户讨论MetaEditor缺乏类似于_WIN64的预定义宏。政府的回答是,没有必要,因为MetaEditor同时生成通用的32-64位代码。
同时,许多人通过将字段附加到结构中来使用https://www.mql5.com/ru/forum/225498/page2#comment_6401835 对齐
而事实上,如果你使用一个现成的.dll(不能再改变),你就不能不进行额外的对齐。但是在x86和x64中,这个加法可能看起来不一样,这意味着_WIN64模拟仍然需要,因为这个结构是在编译.mq5文件的阶段定义的,在这个阶段TerminalInfoInteger( TERMINAL_X64 )不起作用。
现在我们必须牢记额外的信息。由于节省了一点小钱,就有可能得到一个难以捉摸的错误。
这里有一个来自开发者的例子--GetOpenFileName,它可以在x64和x86中工作。看看它是否能解决这个问题
这里有一个来自开发者的例子--GetOpenFileName,它可以在x64和x86下工作。看看它是否能解决这个问题
事实上,它需要几乎两倍的代码。
而带有.dll的程序则不适合大众群体。
又必须有一个选择:分裂(32/64)编译和两倍的代码
或普遍性和相当大的代码复杂度。
此外,你可以根据_IsX64原则引入_WIN64类似物(它没有被记录下来,但你可以使用它)。
另一个论点是,通常一个项目只有一个.dll附件(要么只有x86或x64),你不能在该项目的.mqh文件中指定这样的行
例如,这里https://www.mql5.com/ru/forum/224745帮助中的例子
因此,问题是如何在mt 4中 改变OBJ_RECTANGLE 的填充?
Renat Fatkhullin:
Мы нацелены вообще скоро остановить разработки 32 битных версий Метатрейдера.
建议在这一点上纠正所有已知的运行时错误,例如这个#1841289 https://www.mql5.com/ru/forum/1111/page2025#comment_5766707
这个和其他运算符的行为与方法不一致。而与方法有关的操作符只不过是语法上的糖而已