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

 

大家好!

1) 编制了EA。

2) 在测试器中运行它。

3)日志中有三个条目。

2020.10.25 20:06:08.484 2020.09.24 00:00:00 OVERLOAD test started

2020.10.25 20:06:07.015 TestGenerator: 当前使用了7个价差。
2020.10.25 20:05:51.296 Expert UPDATE GBPUSD,M1:加载成功


4)视觉化保持原位。

不管可能犯了什么逻辑错误,交易都不会被执行,比如说,测试人员应该开始计算条数。但图表冻结了,静止了。

我已经试过其他几个专家顾问,他们都能工作。

当我运行这个时,一切都停止了。

有人遇到过这样的问题吗?如何解决这个问题?

 
Andrey Ilinykh:

如果你把计算值写日志或文件中,这有什么帮助?

找到错误,形成算法。

 
Alexey Viktorov:

那么,你可以用切线来计算角度。而且你并不真的需要一个角度本身,你只需要一个切线。

切线在任何情况下都是每小时一公里或每英里一个点或每天一千点,这就是速度。图形的维度。而其上的切线是与序数和尾数维度相联系的角度。这就是开始的地方。

 
Aleksei Stepanenko:

是的,同样的,速度只有单位:每分钟点数。至于周末和洞,我已经决定:图表上的蜡烛就是时间间隔,没有的(天/小时)就不存在。因为如果我们考虑到周末,而价格在那个时候保持不变,那么速度会毫无理由地明显下降。但话又说回来,那是各取所需。)

为什么害怕速度。这只是一个给类型的惯例。
作为角度定义函数的一个变体。

struct PointPriceTime
  {
   double            price;
   datetime          time;
                     PointPriceTime(double p, datetime t) { price=p; time=t; };
   void              Set(double p, datetime t){ price=p; time=t;};
                     PointPriceTime(PointPriceTime &p){ price=p.price; time=p.time; };
                     PointPriceTime() { price=0.0; time=0; };
  };

double Angle(PointPriceTime &p1,PointPriceTime &p2) // возвращает угол в градусах в приведенной системе координат price-price, где по оси X 
  {                                                 // расстояние между x1 и  x2  = N*_Point, где N - количество минутных баров во временном промежутке отрезка. 
   static int tf[9]= {PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1,PERIOD_W1,PERIOD_MN1};
   int i=0;
   while(i<9 && SeriesInfoInteger(_Symbol,tf[i],SERIES_FIRSTDATE)>p1.time)
      i++;
   if(i==9)
     {
      Print("Время левой границы вне диапазона исторических данных");
      return DBL_MAX;
     }
   int bar1 = iBarShift(_Symbol,tf[i],p1.time);
   int bar2 = iBarShift(_Symbol,tf[i],p2.time);
   if(bar1==bar2)
      return 0.0;
   return atan((p2.price-p1.price)/((bar1-bar2)*PeriodSeconds(tf[i])*_Point/60))*180/M_PI;
  }

在MT5之后,MT4的感觉实在是太糟糕了。对历史的访问在某种程度上被阉割了。我甚至不是在说虱子。



附加的文件:
Angle.mq4  11 kb
iCanvas.mqh  49 kb
 

请告知是否有可能通过程序管理在图表上显示交易水平描述。是否可以使用MQL4工具禁用它们(同时在图表上保留交易水平)或改变它们?


我需要直观地标记一些交易水平,为它们提供自己的描述。为此,我创建了与交易水平风格相似但颜色不同的水平线。 我为它们设置了一个描述(OBJPROP_TEXT),并启用在图表上显示对象描述(ChartSetInteger(0,CHART_SHOW_OBJECT_DESCR,true))。在这种情况下,我创建的描述被叠加在截图中显示的内容上,结果是两者都无法辨认。

是否可以禁用或改变终端所创建的交易水平的描述?这些描述是否可以从MQL程序中获得?

 
Janis Ozols:

请告知是否有可能通过程序管理在图表上显示交易水平描述。是否可以使用MQL4工具禁用它们(同时在图表上保留交易水平)或改变它们?


我需要直观地标记一些交易水平,为它们提供自己的描述。为此,我创建了与交易水平风格相似但颜色不同的水平线。 我为它们设置了一个描述(OBJPROP_TEXT),并启用在图表上显示对象描述(ChartSetInteger(0,CHART_SHOW_OBJECT_DESCR,true))。在这种情况下,我创建的描述被叠加在截图中显示的内容上,结果是两者都无法辨认。

是否可以禁用或改变终端所创建的交易水平的描述?这些描述是否可以从MQL程序中获得?

是的,有。

取消复选框。

1

 
Alekseu Fedotov:

你可以,
,取消勾选。

如果你不勾选这个框,那么交易水平(线)本身和它们的描述一起从图表中消失。

通过提出这个问题,我想强调的是,我不想删除这些线条,我只需要改变或删除图表中的描述(截图中的箭头所示)。

 
Janis Ozols:

如果你不勾选这个框,那么 交易水平(线)就会和它们的描述一起从图表中消失

通过提出这个问题,我想强调的是,我不想删除这些线条,我只需要改变或删除图表中的描述(截图中的箭头所示)。

你不需要它们,你在这些地方创造你的线条。

 
Vitaly Muzichenko:

你不需要它们,你在这些地方创造你的线条。

我只想突出现有的一些层次(对于截图中所示的例子 最上面的那个),而让其他的层次保持原样。

如果无法以编程方式访问这些级别的描述,那么我们可能必须禁用这些级别本身,然后在每次打勾时,通过用另一种颜色突出适当的级别并为它们提供不同的描述,来对终端进行独立绘制。而且,不仅有开放 水平,还有止损和止盈,也必须要画出来。

也许有一个更琐碎的方法来禁用交易水平的描述(只留下线条)或改变它们?

 

能否请你用通俗易懂的语言解释一下这些功能之间有什么区别?

//+------------------------------------------------------------------+
int    CountOrder(int Order_Type) 
   {
    int Orders=0;
    for(int a=OrdersTotal()-1;a>=0;a--)
    {
     if(OrderSelect(a, SELECT_BY_POS, MODE_TRADES)==false) continue;
     if(OrderSymbol()!=_Symbol) continue;
     if(Order_Type == OrderType() || Order_Type == -1) Orders++;
    }
    return Orders;
   }
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
  {
   int cnt=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      if(OrderSelect(pos,SELECT_BY_POS)==true)
         if(OrderSymbol()==_Symbol)
            if(OrderType()==order_type)
               cnt++;
   return (cnt);
  }
//+------------------------------------------------------------------+
原因: