初学者的问题 MQL5 MT5 MetaTrader 5 - 页 492

 
Евгений:
有什么办法能检查出开场 脚本在周末是否有效?
没有。只有专家顾问可以在周末在策略测试器中检查。
 
Karputov Vladimir:
只有指标在OnCalculate()中处理所有的ticks。没有任何跳过。
诶不。而且它跳过了。但比其他人少。但它跳过了。
 
Victor Nikolaev:
呃,没有。而他却失手了。但比其他人少。但它跳过了。
只有当指标在OnCalculate() 中的每次输入都使用资源密集型计算时,指标才能跳过tick。
 
kashi_ann:

这很好,谢谢你。

另一个问题。

顺序选择

选择一个订单,以便对其进行进一步工作。在函数成功完成时返回true。如果函数失败,返回false。你需要调用GetLastError() 函数来获取错误的信息。

顺序选择(OrderSelect)
ulong ticket// 订单的票据
);

参数

门票

[命令的票据。

这张票是如何分配的?我在哪里可以得到它?或者我如何设置它?

在帮助中,它说

订购取票

返回相应订单的票据,并自动选择订单,以便使用函数进一步操作。我们必须按索引查看所有的订单,并在必要时获得票据。虽然这个功能也会选择订单本身。这张票是由经纪人设定的,我们无法改变它。

ulong  OrderGetTicket( 
   int  index      // номер в списке ордеров 
   );
 

大家好!

我写了一个函数,它应该每天在图表上画出 "非交易时间区"。
但这里有一个问题--当我启动它时,模块OnInit的画法应该是这样的,但当我在模块OnTimer中触发它时,不知什么原因,变量date保持了模块OnInit中分配的值。

问题:为什么?

int OnInit()

  {

    EventSetTimer(1);

    MqlDateTime date;

    TimeLocal(date); 

    offtimeCreate(date); // Рисуем на графике заполненный прямоугольник (не торговая зона) с 21:00 до 23:59 в день указанный в переменной date

    return(INIT_SUCCEEDED); 

  } 

 ...

void onTimer()

  {

    MqlDateTime date;

    TimeLocal(date);

    if (date.hour==9 && date.min==0 && date.sec==0)  offtimeCreate(date); // Каждое утро, в 9:00, рисуем новую "не торговую зону" для дня указанного в переменной date

  } 

...
 
INGFX:

大家好!

我写了一个函数,它应该每天在图表上画一个 "非交易时间区"。
但是有一个问题--当在模块OnInit中执行时,它画出了应该有的日期,但是当在模块OnTimer中执行时,由于某种未知的原因,日期变量保持了模块OnInit中分配的值。

问题:为什么?

关于交易、自动交易系统和策略测试的论坛

虫子,虫子,问题

Karputov Vladimir, 2016.01.09 20:51

是什么让你认为在定时器变量date中传递的是之前在OnInit()中定义的值?

你需要看一下你画区的函数。

已完成。

正确地说,应该是OnTimer,而不是onTimer。

 

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

ingfx, 2016.01.09 21:20

因为A)我直观地看到,"时区 "不是从今天21:00画到23:59,而是从昨天21:00画到今天23:59。

B)如果我打开图形对象的属性(阴影矩形-"时区"),我看到第一个变量没有变化,即它的值与昨天的21:00相同。

...
bool offtimeCreate(MqlDateTime &stm)
  {
    color clr=Black;
    datetime tm1,tm2;
    tm1 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 21:00");
    tm2 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 23:59");

    RectangleCreate(0,"offtime",0,tm1,0,tm2,200,clr); // chrart_id,object_name,sub_window,time1,price1,time2,price2,color

    return(true);
  }
...

 
Karputov Vladimir:
正确答案是OnTimer,而不是onTimer
是的,是OnTimer,我把它复制到这里时犯了一个错误 ...代码本身是正确的。
 
INGFX:
是的,OnTimer,在这里重写的时候犯了一个错误......代码本身是正确的

你会检查你的代码。厌倦了把你的零碎东西拼接在一起 - 所以在这里,检查代码。在OnTimer中,用你的本地时间 代替,比较初始化时和定时器中的打印结果。

//+------------------------------------------------------------------+
//|                                                       TestEA.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1);
   MqlDateTime date;
   TimeLocal(date);
   offtimeCreate(date); // Рисуем на графике заполненный прямоугольник (не торговая зона) с 21:00 до 23:59 в день указанный в переменной date
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   MqlDateTime date;
   TimeLocal(date);
   if(date.hour==22 && date.min==33 && date.sec==00)
      offtimeCreate(date); // Каждое утро, в 9:00, рисуем новую "не торговую зону" для дня указанного в переменной date
  }
//+------------------------------------------------------------------+
/*void offtimeCreate(MqlDateTime &struct_date)
  {
   string text="";
   text=IntegerToString(struct_date.hour)+":"+
        IntegerToString(struct_date.min)+":"+
        IntegerToString(struct_date.sec);
   Comment(text);
//ChartRedraw();
  }*/
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool offtimeCreate(MqlDateTime &stm)
  {
   color clr=Black;
   datetime tm1,tm2;
   tm1 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 21:00");
   tm2 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 23:59");

   Print(tm1+"      "+tm2);
//RectangleCreate(0,"offtime",0,tm1,0,tm2,200,clr); // chrart_id,object_name,sub_window,time1,price1,time2,price2,color

   return(true);
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:

你会检查你的代码。

弗拉基米尔,感谢你的耐心和帮助!你是谁?
真的在代码中犯了一个错误......
我以后会更加小心。