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

 

我已经根据好心人提供的代码建立了我的第一个专家顾问(特别感谢MakarFX_ 的激励和代码)。

一切都在正常工作,但有一个问题。我不知道该去哪里找。

该算法如下。

有一个信号 - 订单打开

使用点数的止损或止盈订单来关闭它,或者在盈利和亏损限制实现后,在存款货币CountLoss和CountProfit。(以先到者为准)

如果是止损--下一个有保证金的订单,如果是获利,CountProfit,CountLoss--手数被重置为初始手数。

如果止损设置为CountLoss,那么下一个订单将以最小手数开仓,而不是以起始手数为例。

在外部变量中,起始手数0.02被设定,在CountLoss的下一个订单将是手数0.01。

谁能告诉我错误在哪里?

MakarFX
MakarFX
  • 2021.03.19
  • www.mql5.com
Профиль трейдера
附加的文件:
oilim1p11.mq4  17 kb
 
законопослушный гражданин:

我已经根据好心人提供的代码建立了我的第一个专家顾问(特别感谢MakarFX_ 的激励和代码)。

一切都在正常工作,但有一个问题。我不知道该去哪里找。

该算法如下。

有一个信号 - 订单打开

使用点数的止损或止盈订单来关闭它,或者在存款货币CountLoss和CountProfit中达到利润和亏损限额后关闭。(以先到者为准)

如果是止损--下一个有保证金的订单,如果是获利,CountProfit,CountLoss--手数被重置为初始手数。

如果止损设置为CountLoss,那么下一个订单将以最小手数开仓,而不是以起始手数为例。

在外部变量中,起始手数0.02被设定,在CountLoss的下一个订单将是手数0.01。

谁能告诉我错误在哪里?

看看我在函数double Lots()中做了什么改动

附加的文件:
oilim1p11.mq4  17 kb
 
MakarFX:

当出现无利可图的交易时,将打印一次

谢谢你的想法。我比较了当前订单的关闭时间和前一个订单的关闭时间,一切都按计划进行。我还做了一个功能,在相反的方向上开了一个订单,并设置了止损,尽管这没有什么帮助。
 
Petronet:
谢谢你,我明白了。我比较了当前订单的关闭时间和前一个订单的关闭时间,一切都按部就班。我还做了在相反方向开立订单的功能,并设置了止损,尽管这没有什么帮助。

更具体地说...

 

大家下午好。试图用ATR指标实现利润和止损计算。停机工作正常。但利润总是被设定为相同的值。以下是利润计算的代码

  if(Tip_tp == en_TP_po_atr)// ЕСЛИ ПРОФИТ ПО АТР//-------------------------------------------------------------------------------------------------+
  {
  tp =NormalizeDouble(iATR(NULL,PeriodForWork_sl,atr_sl_period,1),Digits);// ПРИСВАЕВАЕМ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      if(tp<stoplevel)  // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
        {
         tp=NormalizeDouble(tp*1.5,Digits); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
        } 
  }
  tp= NormalizeDouble(tp*Point, Digits());// НОРМАЛИЗУЕМ ПРОФИТ, ЧТОБЫ РАБОТАЛО НА ЛЮБЫХ КАТИРОВКАХ
  

  
  
  //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+

利润总是有相同的值,这个错误是什么?嗯?

 
DanilaMactep:

大家下午好。试图用ATR指标实现利润和止损计算。停机工作正常。但利润总是被设定为相同的值。以下是利润计算的代码

利润总是有相同的值,这个错误是什么?嗯?

   // ЕСЛИ ПРОФИТ ПО АТР//-------------------------------------------------------------------------------------------------+
   if(Tip_tp == en_TP_po_atr)
     {
      tp =NormalizeDouble(iATR(NULL,PeriodForWork_sl,atr_sl_period,1),Digits);// ПРИСВАЕВАЕМ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      if(tp<stoplevel)  // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
        {
         tp=NormalizeDouble(tp*1.5,Digits); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
        } 
     }
   //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+
 
MakarFX:
谢谢你的帮助--我改了一段代码,就都成功了。但你能用语言描述一下错误是什么吗,因为我无法用眼睛去看它的前面?
 
MakarFX:

看看我在double Lots()函数中改变了什么

超级!非常感谢

 
DanilaMactep:
谢谢你的帮助--我改了一段代码--一切正常。但你能用语言描述一下错误是什么吗,因为我无法用眼睛去看它。

你的代码已被分割

В этой части кода ты задаешь tp значение АТР
  if(Tip_tp == en_TP_po_atr)// ЕСЛИ ПРОФИТ ПО АТР//-------------------------------------------------------------------------------------------------+
  {
  tp =NormalizeDouble(iATR(NULL,PeriodForWork_sl,atr_sl_period,1),Digits);// ПРИСВАЕВАЕМ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      if(tp<stoplevel)  // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
        {
         tp=NormalizeDouble(tp*1.5,Digits); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
        } 
  }
А в этой части ты обнуляешь предыдущее действие и задаешь непонятно что...
  tp= NormalizeDouble(tp*Point, Digits());// НОРМАЛИЗУЕМ ПРОФИТ, ЧТОБЫ РАБОТАЛО НА ЛЮБЫХ КАТИРОВКАХ
 
下午好!请帮助我使我的终端运行起来--市场不工作了。我想从市场上下载一个免费指标,但我不能。

我改变了密码,重新启动,但没有任何效果。

该程序记录了以下内容

2021.08.23 11:54:18.236 MQL5市场 下载产品'MACD日内趋势'失败(www.mql5.com:443 发送失败[426: ])。


问候,奥尔加