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

 

你好。你能告诉我如何组织一个执行延迟吗?这样,在一个新的蜡烛 之后,10秒后才完成更新。

#define   WM_COMMAND                    0x0111
#property indicator_chart_window
#import "user32.dll"
int RegisterWindowMessageA(string lpstring);
int PostMessageA(int  hWnd,int  Msg,int  wParam,string lParam);
int New_Bar;
datetime Time_0;
#import
int start()
 {
     New_Bar=0;                   // Для начала обнулимся
  if (Time_0 != Time[0])          // Если уже другое время начала бара
      {
      New_Bar= 1;                 // А вот и новый бар
      Time_0 = Time[0];           // Запомним время начала нового бара
      PostMessageA (WindowHandle (Symbol(), Period()), WM_COMMAND, 33324, 0);
      PostMessageA (WindowHandle (Symbol(), 0), RegisterWindowMessageA ("MetaTrader4_Internal_Message"), 2, 1);
      } 
 return(0);
 }
 
你好,请写下代码,条件是如果你从图表中删除1个对象,那么其余的(一个选择)将被删除

我有其他对象附在1个对象上,当你删除这个对象时,其他对象就会挂在图表上。
 
Dmitry Ivkin:
你好,我想请你写一段代码,条件是如果你从图表中删除一个对象,那么其他对象(如你选择的)也会被删除 ,我有其他对象附在一个对象上,当我删除这个对象时,其他对象就会挂在图表上。

创建对象 时,我使用前缀,即名称开头。例如:ObjectCreate("777_a" ...ObjectCreate("777_z",然后删除组ObjectsDelete(0, "777_")
 
werter:

你好。你能告诉我如何组织一个执行延迟吗?我想在新的蜡烛 图后等待10秒再执行更新。

最简单的方法是在Time_0 = Time[0]之后加上Sleep(10000);,我认为下面的#import指令应该提高2行

 
STARIJ:

最简单的方法是在Time_0 = Time[0];之后插入Sleep(10000);,我认为下面的#import指令应该提高2行。

是的,这将是一个专家顾问...你不能在睡眠 指标中这样做,唉。
 
STARIJ:
创建对象 时,我使用一个前缀,即一个名字的开头。例如:ObjectCreate("777_a" ...ObjectCreate("777_z"),然后我删除该组ObjectsDelete(0, "777_")

谢谢你的回答,不,你不明白,我有其他对象附在对象上,如果你删除指标,那么一切正常,但如果你右击并删除,那么正好删除1个对象,需要所有附在对象上的对象,我希望你明白)

 
Dmitry Ivkin:

谢谢你的回答,不,你不明白,我有其他对象附在对象上,如果你删除指标,那么一切都很好,但如果你右击并删除,那么1个对象将被删除,我需要所有附在对象上的对象,我希望你明白)

定期(每次打勾?)检查主对象的存在,如果不存在,则通过前缀删除子对象。
 
werter 是的,好吧,如果是专家...你不能在睡眠指标中,唉。
datetime Time_0=0;

void ...
{
   if (Time_0 < TimeCurrent())
   {
      Alert(TimeCurrent());
      Time_0 = Time[0]+PeriodSeconds()+10; 
   }
 

我已经很久没有用MQL4写作了,现在我需要从MQL5重写我的EA。应该在EA所在的符号上开1笔交易的代码,是否正确?

在策略测试器中,由于某种原因,有两个交易被打开了

...
if(!Orderex(_Symbol))
{
   OrderSend(NULL,OP_SELL,lot,Bid,30,Bid+stop*Point,Bid-take*Point,NULL,magicf,0,clrRed);
}
...
bool Orderex(string symbol)
{
   for(int i=OrdersTotal(); i>0; i--)
      {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==symbol && OrderMagicNumber()==magicf) return true;
      
      
      
      }


   return false;
}
 

我遇到了另一个我之前没有想到的细微差别

1)我们有很多的专家顾问安装在对上

2) 当任何专家顾问以自己的设置开立订单时(例如一些EA开立0.1或0.5),这条记录将出现在EA行中

3) 读取 "专家 "一行,如果有超过x手的开仓,其他机器人会自行删除。


问题是如何读取和处理它? 它不包括在日志文件中。