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

 

如果市场上有其他订单,但规模不同,似乎就会出现这种故障。

假设我们有4次卖出1手,4次买入1手。而1买0.5手。

如何避免这种情况?我认为这个函数需要一个循环。

 
EgorKim:

如果市场上有其他订单,但规模不同,似乎就会出现这种故障。

假设我们有4次卖出1手,4次买入1手。而1买0.5手。

如何避免这种情况?也许,这个函数中应该有一个循环。

我不知道 "drubashka "在哪里。通过标准库 工作是他的专长。我不知道它在挑选什么。

      if(m_position.SelectByIndex(i))

而且会懒得去整理。

如果是我,我会用不同的方式来解决这个问题。我会用买入和卖出仓单分别创建两个数组,并在第二个循环中成对平仓。

或者我们可以创建一个二维数组。但在分发索引时必须非常注意。这样就不会有差距了...

 
Alexey Viktorov:

某处的鼓手已经消失了。这是他通过标准库 工作的事情。我不知道他在选择什么。

是的,而且我也懒得去研究了。

如果是我,我会用不同的方式来解决这个问题。我将创建两个数组,分别包含买入和卖出的仓单,并在第二个循环中成对地关闭它们。

或者我们可以使用一个二维数组。但我在分配索引时必须非常注意。这样就不会有差距了...

我自己也曾想过这个问题。你能分享有两个数组的代码吗?我不能自己做。

作为一个临时解决方案,我创建了一个有限的循环。我不知道这个代码是否正确,但它可能是一些东西。的确,它以分割地段的方式奇怪地关闭。

显然,即使是计数器的体积也应该进行比较,以避免分裂。我放弃了。

void CloseBy()
  {
   int s=10;
   do // цикл
     {
      s--;
      ulong ticket_buy=ULONG_MAX;
      ulong ticket_sell=ULONG_MAX;
      for(int i=0;i<PositionsTotal();i++) // ATTENTION! Here, specially began a detour with "0"
         if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY && ticket_buy==ULONG_MAX)
               ticket_buy=m_position.Ticket();

            if(m_position.PositionType()==POSITION_TYPE_SELL && ticket_sell==ULONG_MAX)
               ticket_sell=m_position.Ticket();
           }
      if(ticket_buy!=ULONG_MAX && ticket_sell!=ULONG_MAX)
         m_trade.PositionCloseBy(ticket_buy,ticket_sell);
     }
   while(s>1);// цикл
   return;
  }
 
EgorKim:

我自己也曾想过这个问题。你能分享 有两个数组的代码吗

没有,有几个原因。

1.我自己不使用反封闭。

2.没有现成的代码,也没有专门编写代码的愿望。

3.昨天我有这样一个想法。昨天我有这样一个想法。今天我又有了一个,明天,上帝保佑,我还会有一个。因此,我只写当下我心中的东西。

而主要的原因--我认为,帮助和做别人的工作,这是两个很大的区别。

我只能提供帮助。但我无法帮助你,我几乎不使用标准库,要理解你的代码,我需要理解SB。

 

大家好

你能给我一个指标或函数的例子,让你创建一个指标,只在图表上的某个范围或区域内显示结果!你能给我一个例子吗?

例如,从1:00到2:35的终端时间,而这个选择应该用鼠标直接在图表上做出。


我特别需要计算所选范围内的白烛或卖烛的数量。

 
Milhail Novgorodcev:

大家好

你能给我一个指标或函数的例子,让你创建一个指标,只在图表上的某个范围或区域内显示结果!你能给我一个例子吗?

例如,从1:00到2:35的终端时间,而这个选择应该用鼠标直接在图表上做出。


我特别需要计算选定范围内的买入或卖出蜡烛图的数量。

首先想到的是。

  • 一个脚本,两个输入参数--时间从--和时间到--。
  • 手动绘制一个矩形,启动脚本时应在输入参数中加入矩形名称。
  • 专家顾问或指标,跟踪创建一个具有给定名称的矩形...

 
Milhail Novgorodcev:

大家好

你能给我一个指标或函数的例子,让你创建一个指标,只在图表上的某个范围或区域内显示结果!你能给我一个例子吗?

例如,从1:00到2:35的终端时间,而这个选择应该用鼠标直接在图表上做出。


我特别需要计算选定范围内的买入或卖出蜡烛图的数量。

问题是什么?

OnChartEvent() 中,依次 给两个变量 分配鼠标点击的时间(不是当前时间,而是你所点击的条形图的时间),只要这两个变量不为零,这个范围就被计算出来。在这些变量的输出之后,它们被重置为零,并等待下一次的鼠标点击。

我看到的唯一问题是,如果第一次点击是错误的,如何撤消它。但是,我认为在阅读文档后,有可能仔细地想出一些东西。例如,按一个键或滚动鼠标滚轮...

 

请帮助我们!

厌倦了修复历史上的截图的脚本。脚本应该是每天滚动到早上8点,然后进行截图。

脚本没有发挥它应有的作用。

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ChartSetInteger(0,CHART_SHIFT,false);
   ChartSetInteger(0,CHART_AUTOSCROLL,false);
   int _bars=Bars(Symbol(),0);
 
   for(int i=0; i<_bars; i++)
     {
      MqlDateTime time_now;
      //datetime candle_time=iTime(NULL,_period,0);
      TimeToStruct(iTime(NULL,_Period,i),time_now);  // change time to struct

      if(time_now.hour==8 && time_now.min==0)
        {
         //--- прокрутим на 10 баров вправо от начала истории 
         ChartNavigate(0,CHART_BEGIN,i);
         Sleep(5000);
         //--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
         long first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
         Print(first_bar);
         string name=_Sumbol_N(string(Symbol()))+"_"+Symbol()+"_"+TFMigrate(Period())+" "+string(time_now.year)+"."+string(time_now.mon)+"."+string(time_now.day)+" "+string(time_now.hour)+"."+string(time_now.min);

         ChartScreenShot(0,name+" 2560_1600.PNG",2560,1600,ALIGN_LEFT);
         //i=5;
        };
     };

//Print(iTime(NULL,_Period,0));

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string _Sumbol_N(string ft)
  {
   if(ft ==  "EURUSD" ) return("01");
   if(ft ==  "GBPUSD" ) return("02");

   return "";
  }
//+------------------------------------------------------------------+
string TFMigrate(int tf)
  {
   switch(tf)
     {
      case 0: return("CURRENT");
      case 1: return("M1");
      case 5: return("M5");
      case 15: return("M15");
      case 30: return("M30");
      case 60: return("H1");
      case 240: return("H4");
      case 1440: return("D1");
      case 10080: return("W1");
      case 43200: return("MN1");

     }
  }
//+------------------------------------------------------------------+
 
oleg360:

请帮助我们!

厌倦了修复历史上的截图的脚本。脚本应该是每天滚动到早上8点,然后进行截图。

脚本没有发挥它应有的作用。

到目前为止,滚动功能的工作是不稳定的(或者说是不可预测的工作)。管理员正在进行整理。

 
Vladimir Karputov:

到目前为止,滚动功能出现了故障(或者说工作不稳定)。管理员正在进行整理。

谢谢你!

原因: