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

 
Tapochun:
我不认为你在这里问的是问题。创建一个单独的主题,将指标的代码附在那里,希望有人能提供帮助。没有代码...不太可能有人会帮助你。
指标不买也不卖)。
 
在写ToR的时候,我遇到了一个情况,我不明白如何正确描述算法。你能告诉我在EA的工作中,是否可以部分平仓
 
Nikolay Lampickiy:
在写ToR的时候,我遇到了一个情况,我不明白如何正确描述算法。您能否告知在EA的工作中 部分平仓 的可能性?
为了做到这一点,在平仓指令中,指定一个小于该仓位手数的手数(这是在MT4中,在MT5中,你可以用更小的手数开一个相反的仓位,它们最后会重叠)。剩余地段的位置将保留在市场上。
 
Nikolay Lampickiy:
在写ToR的时候,我遇到了一个情况,我不明白如何正确描述算法。你能告诉我,在EA的工作中,是否可以部分平仓
这有什么好复杂的?如果仓位不平均(如0.09),则关闭大部分仓位(0.05),并将止损点移至盈亏平衡点,然后再关闭另一半仓位(0.02),并将仓位放至盈利,反之亦然,直至整个仓位被关闭或盈亏平衡。该步骤可以是固定的,也可以从任何范围内计算,取决于交易系统。
 
Vladimir Zubov:
这有什么好复杂的?如果仓位不平均(例如0.09),那么就关闭大部分(0.05),并将止损点移至盈亏平衡点,然后再一次关闭距离,并再次留下一半(0.02),将止损点移至正数的下一个关闭步骤,如此反复,直到整个仓位被关闭或达到止损点。该步骤可以是固定的,也可以从任何范围内计算,取决于交易系统。

我弄得对吗?MQL4编程语言允许将只有一半的市场订单量的关闭正式化...如10手,当价格达到一定水平时,关闭5手。

还是有可能关闭1/3?

或者,通过下不同的订单,在EA中实现这个想法会更容易。当价格达到要求的水平时,一个订单被关闭,另一个则保留部分关闭市场订单量的位置。你怎么看?

 
Vitalie Postolache:
要做到这一点,您需要在平仓单中指定一个小于该仓位手数的手数(这是在MT4中,在MT5中您可以用更小的手数建立相反的仓位,最后它们会重叠)。剩余地段的位置将保留在市场上。
我不满意相反的立场......。谢谢你的答复。
 
Nikolay Lampickiy:

我弄得对吗?MQL4编程语言允许将只有一半的市场订单量的关闭正式化...如10手,当价格达到一定水平时,关闭5手。

还是有可能关闭1/3?

或者,通过下不同的订单,在EA中实现这个想法会更容易。当价格达到要求的水平时,一个订单被关闭,另一个则保留部分关闭市场订单量的位置。你怎么看?

我们可以同时进行。OrderClose允许你关闭对其指示的量。https://docs.mql4.com/ru/trading/orderclose

当然,你可以用不同的盈利水平开几个订单。 在连接失败的情况下,它将更加可靠,因为TP水平存储在服务器上,如果价格与它们相交,将被执行。

OrderClose - Документация на MQL4
  • docs.mql4.com
OrderClose - Документация на MQL4
 
Vladimir Zubov:

你可以同时进行。OrderClose允许平仓,这是对它的指示。https://docs.mql4.com/ru/trading/orderclose

当然,你也可以用不同的盈利水平开几个订单。 在连接失败的情况下,这将更加可靠,因为TP水平存储在服务器上,如果价格越过它们,将被执行。

谢谢你的答复)))
 

大家好,我正面临一个问题,我想听听专业人士或更有经验的MT5用户的意见。我写了一个指标 和CEventBase类,它允许指标产生事件。当运行早晚处理这些事件的专家顾问时,在实时运行时,我得到了错误。4001, 4102, 4104.当它们开始 "堆积 "时,它们不会停止这样做)我附上Generate函数的代码,它实际上是所有这些麻烦的来源。非常高兴听到您的意见......)

大家好!


bool CEventBase::Generate(long _chart_id, int _id_ind, SEventData &_data,
                          const bool _is_custom=true)
  {
   bool is_generated = true;
   // если индекс id события в массиве не верен
   if (_id_ind < 0 || _id_ind >= aEvents.Total())
    {
     Print("Не верно задан индекс ID события");
     return (false);
    }
   // заполняем поля 
   CEvent *event = aEvents.At(_id_ind);
   this._id = (ushort)(CHARTEVENT_CUSTOM+event.id);
   this._data = _data;
   this._data.sparam = event.name; // сохраняем имя события
   
   if(_is_custom)
     {
      ResetLastError();
      is_generated = EventChartCustom(_chart_id, event.id, this._data.lparam,
                                      this._data.dparam, this._data.sparam);
      if(!is_generated && _LastError != 4104)
         {
          Print("is_generated = ", is_generated);
          PrintFormat("%s Error while generating a custom event: %d", __FUNCTION__,_LastError);
          Print( ChartSymbol(_chart_id)," ",PeriodToString(ChartPeriod(_chart_id)), "Ошибка! _chart_id =", _chart_id, " event.id = ", event.id, " data.dparam = " ,this._data.dparam, " data.sparam = ", this._data.sparam);
          
         }
     }
   return is_generated;
  }


 
dariamap:

大家好,我正面临一个问题,我想听听专业人士或更有经验的MT5用户的意见。我写了一个指标 和CEventBase类,它允许指标产生事件。当运行早晚处理这些事件的专家顾问时,在实时运行时,我得到了错误。4001, 4102, 4104.当它们开始 "堆积 "时,它们就不会停止发生)我附上Generate函数的代码,它实际上是所有这些问题的来源。我将非常高兴听到你对它的意见......)

大家好!

很明显,你提出的方法是一种过境方法。错误很可能不在其中。从你提出的数据来看,并不清楚发生了什么。可能有几个变种。

  • 图表标识符不正确(这就是4101错误所说的)。
  • 查询过于频繁。
  • 其他参数不正确(例如,事件ID)。

从你写的代码水平来看,我们可以说,错误可能在任何地方、任何时间出现。