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

 
朋友们,我有更多关于信号设置的问题。
问题如下:当提供者的订单被关闭时,签约人的订单仍被保留。显然是因为传播的差异。当签约人的交易在供应商那里被关闭时,我应该如何使其立即关闭?应该改变什么设置?
 
Leo59:
谢谢你,Alexey!!!! for 4))))

所以......我找到了我的旧火鸡,并从中剪出我需要的东西。我不会为你写)),但它可以作为一个开端。我在那里加了注释,变量的名称从名字上就可以看出来。

datetime date[]; // тут будем хранить данные времени баров, которые видны на экране
// если нужны другие данные баров, заводим соотв. массивы 

void DoWork(bool redrawAll = false)
{
    int visibleBars = 1, firstVisibleBars = 0;
    visibleBars = (int)ChartGetInteger(0, CHART_VISIBLE_BARS);
    firstVisibleBars = (int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR);
    
    ArrayResize(date, visibleBars + 10); // выделяем память с запасом

    // так можно узнать масштаб графика, может пригодится
    int scale = (int)ChartGetInteger(0, CHART_SCALE);
    // копируем данные времен баров 
    if (CopyTime(Symbol(), Period(), startpos, visibleBars, date) == -1)
    {
        Print("Не удалось скопировать значения времени! Код ошибки = ", GetLastError());
        return;
    }

    //--- определим шаг, если надо работать с масштабом
    int step = 1;
    switch (scale)
    {
    case 0:
        step = 12;
        break;
    case 1:
        step = 6;
        break;
    case 2:
        step = 4;
        break;
    case 3:
        step = 2;
        break;
    }
    double priceMin = ChartGetDouble(0,CHART_PRICE_MIN,0);
    double priceMax = ChartGetDouble(0,CHART_PRICE_MAX,0);

    for (int i = visibleBars - 1; i >= 0; i--)
    {
        /*
        проходимся по всем видимым барам и ищем стрелки, искать можно путями:
        1. Изначально при создании стрелок надо формировать имена стрелок с привязкой ко времени, например
        string name = "UpArrow"  + IntegerToString(TimeCurrent());
        тогда тупо ищем стрелку с таким именем и далее двигаем, куда надо
        2. Заносить стрелки в структуры и класть их в хештаблицу, первый проще
        */
    }
    
}
 
Artem Prischepa:
我的朋友,我有一个关于信号设置的问题。
问题如下:当供应商的订单被关闭时,它们仍然保留在签约人的一个订单上。显然是因为传播的差异。当签约人的交易在供应商那里被关闭时,我应该如何使其立即关闭?应该改变什么设置?

这笔交易也应该几乎瞬间完成。问题。

  1. 用户的终端在这个时候是否开启?
  2. 请附上问题日的终端日志文件。
 
Alexey Volchanskiy:

所以......我找到了我的旧火鸡,并从中剪出我需要的东西。我不会为你写)),但它可以作为一个开端。我在那里加了注释,变量的名称从名字上就可以看出来。

此外,我也许应该在这一行中加入指标子窗口的编号?我只是不知道到底需要什么

ChartGetDouble(0,CHART_PRICE_MIN,0);
 
Alexey Volchanskiy:

补遗,你也许应该把指标子窗口的编号放在这一行?我只是不知道到底需要什么

哎呀,今天早上心不在焉,没有复制代码中的图表事件处理

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
    if(id == CHARTEVENT_CHART_CHANGE)
    {
        DoWork(true);
        ChartRedraw();
    }    
}
 
Alexey Volchanskiy:

所以......我找到了我的旧火鸡,并从中剪出我需要的东西。我不会为你写)),但它可以作为一个开端。我在那里加了注释,变量的名称从名字上就可以看出来。

谢谢阿列克谢的帮助!

而在哪里附加的步骤,以及在一般情况下其功能,关于什么?

    //--- определим шаг, если надо работать с масштабом
    int step = 1;

还有这个。

        2. Заносить стрелки в структуры и класть их в хештаблицу, первый проще

我从来没有做过。如果可以的话,请给我一个代码例子,这样我就能理解、明白和应用。

 
Alexey Volchanskiy:

哦,今天早上心不在焉,没有复制代码中的图形事件处理

我希望我有你的心不在焉和你的知识))。
当你知道的时候,这就很容易了。只要你有愿望和手段,就可以敲打键盘。
而当你不知道而你又在挖掘的时候......那就很麻烦了......而如果有更多的暗示,你就完蛋了,没有神经了。
因此,感谢你的提示!!!!
 
Leo59:
感谢Alexey的帮助!

你在什么地方搞砸了投球,以及它的功能一般,关于什么?

还有这个。

我从来没有做过。如果可以的话,请给我一个代码例子,这样我就能理解、明白和使用它。

当我们水平压缩图形时(+/-键),会改变比例,有时图形对象会相互重叠。我引用了这个代码,以备不时之需,如何确定规模。

我不会引用带有哈希值的代码--我没有它,只是想到了它。最好是做变体1,它更简单。

关于知识--我建议每个学习的人,在闲暇时阅读帮助,只要在各部分跳一跳,一切都在那里。就是说,不要填鸭式的,我就是这样一个填鸭式的人,没有好处。你只需要知道,至少是大致上知道,有这样那样的...至少是节/分节。然后,当问题出现时,脑子里的齿轮就会旋转,并出现搜索的方向。原则上说,帮助并不完美,但也不错,有很多例子。

因为语言本身很简单,所以并不难学。在API方面出现困难,在哪里寻找什么,如何应用

 
你好!

乍一看,这项任务似乎和三分钱一样简单。但是!....
在指标窗口中有一条任何震荡器的线,它相对于 "0 "以不同的振幅摆动。
实际的问题是。
- 在从下到上的 "0 "交叉处,在指示器窗口的底部边界画一个箭头。
- 在 "0 "处从上往下交叉,在指示器窗口的上边界 附近画一个箭头。
- 在指标窗口中的振荡器图表的自我缩放中,箭头应自动保持在指标窗口的边界上。
即,在历史上前后滚动图表,或改变其水平比例,箭头应始终自动保持在指标窗口的边界上。

不要给任何提示,"在财务上帮助我"))。请附上这种功能的源代码,或链接到它。

提前感谢!
 

请帮助我理解!

我需要找到 每一天(任其发展)的最大 跌幅(每天向文件写入一次) - MT4终端。

最大缩水是图表上从峰值到当前资金缩水的距离,资金缩水是当前的损失。

我写了以下代码

   if(Analiz_Prosadki==true)
     {
      if(ContolSavaTXT==1)
        {
         ProfitNew=0;
         ProfitMin=0;
         ContolSavaTXT=0;
        }

      if(ContolSavaTXT==0)
        {
         ProfitNew=AccountInfoDouble(ACCOUNT_PROFIT);
         BalansNew==AccountInfoDouble(ACCOUNT_BALANCE);  //Текузее значение баланса
         if (BalansNew>BalansMax) BalansMax=BalansNew;
         if (ProfitNew<ProfitMin && BalansNew>=BalansMax) ProfitMin=ProfitNew;
         if (ProfitNew<ProfitMin && BalansNew<BalansMax) ProfitMin=ProfitNew-(BalansMax-BalansNew);
        }

      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitMin);   // Пишем информацию в файл - функция возвращает 1
     }

但它在一些图表中是正确的,而在另一些图表中是不正确的。 同时,这些图表在视觉上是一样的。

我一定是在代码或逻辑上犯了一个错误,但我不明白是哪种错误。