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

 

下午好!

如何强制重绘图表(类似于右键单击图表上的"刷新 "功能)。

下面的代码不起作用,没有更新。


void OnStart()
  {
   long currChart, prevChart = ChartFirst();
   int z = 0, limit = 100;
   while(z < limit && !IsStopped())
     {
      currChart = ChartNext(prevChart);
         ChartRedraw(currChart);
      if(currChart == 0)
         break;
      prevChart = currChart;
      z++;
     };
   ChartRedraw(0);
  }
 

我想下载免费的智能交易系统到 MQL5。我进入智能交易系统,然后进入免费智能交易系统。问题: 我是否可以在我的真实账户 中使用 "免费 "部分中的所有智能交易系统,或者是否有任何限制? 如果智能交易系统上显示

"已经购买",是否可以将其放在真实账户上?

 
mikhail2929 Кравченко 真实账户 中使用 "免费 "部分中的所有智能交易系统吗? 如果智能交易系统上写着

"已经购买",是否可以放在真实账户上?

您好!如果您下载了一个免费的智能交易系统,并且有信息显示它已经被购买,那么您就可以使用它。问题不同--它有多可靠?为此,在真实账户上使用之前,最好先测试一下 Expert Advisor!

弗拉基米尔

 
MrBrooklin #:

您好!如果下载了免费的智能交易系统,并且有信息表明该系统已被购买,那么您就可以使用该系统。问题不同--它的可靠性如何?为此,在真实账户上使用之前,最好先测试一下 Expert Advisor

弗拉基米尔

谢谢您,弗拉基米尔。我知道测试和优化是必要的。也就是说,"免费 "版块中的所有智能交易系统都可以下载并安装到真实账户中,不受任何限制。我的理解正确吗?

 
下午好,我正在寻求帮助。在编写 MT5Expert Advisor 时,我使用 CTrade 类修改 TP 和 SL。问题是,仓位初始设置为 TP 和 SL,TP 更改后,SL 应保持不变,执行时结果是这样的 :
 for(int i = 0; i <= PositionsTotal(); i++)
      if(a_position.SelectByIndex(i))
         if(a_position.Magic() == MagicNumber && a_position.Symbol() == a_symbol.Name())
            if(PositionGetString(POSITION_COMMENT) == Comment_2)
              {
                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && PositionGetDouble(POSITION_TP) != TP_Buy)
                  a_trade.PositionModify(PositionGetInteger(POSITION_TICKET),PositionGetDouble(POSITION_SL),TP_Buy);

                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && PositionGetDouble(POSITION_TP) != TP_Sell)
                  a_trade.PositionModify(PositionGetInteger(POSITION_TICKET),PositionGetDouble(POSITION_SL),TP_Sell);
              }

TP_Buy 和 TP_Sell 被正确计算。在测试器中,它给出了错误 4756。CTrade::OrderSend: modify position #4 GBPUSD (sl: 1.35950, tp: 1.34860) [invalid stops] failed modify #4 sell 0.05 GBPUSD sl: 1.35950, tp: 1.34860 -> sl: 1.35950, tp: 1.34860 [Invalid stops]。据我所知,这是 SL 设置错误,最有可能的错误原因是 SL 位于同一位置。但这正是我需要的。CTrade 手册中写道:"如果不需要更改,则使用之前的值"。如何克服这个错误,请告诉我。

 
mikhail2929 Кравченко #:

谢谢你,弗拉基米尔。我知道测试和优化是必要的。也就是说,放在 "免费 "版块中的所有智能交易系统都可以下载并安装到真实账户中,不受任何限制。我的理解是否正确?

我想我刚才已经回答了您的问题。是的,您的理解是正确的。

谢谢,弗拉基米尔。

 
rexMetaL 编写 MT5Expert Advisor 时,我使用 CTrade 类来修改 TP 和 SL。问题是,在修改 TP 后,仓位初始设置为 TP 和 SL,但 SL 应保持不变:

TP_Buy 和 TP_Sell 的计算是正确的。在测试器中,它给出了错误 4756。CTrade::OrderSend: modify position #4 GBPUSD (sl: 1.35950, tp: 1.34860) [invalid stops] failed modify #4 sell 0.05 GBPUSD sl: 1.35950, tp: 1.34860 -> sl: 1.35950, tp: 1.34860 [Invalid stops]。据我所知,这是 SL 设置错误,最有可能的错误原因是 SL 位于同一位置。但这正是我需要的。CTrade 手册中写道:"如果不需要更改,则使用之前的值"。如何克服这个错误,请告诉我。

您好!

首先,去掉循环中的等号,这样就会变成这样:

for(int i = 0; i < PositionsTotal(); i++)

我没有进一步查看您的代码。

再见,弗拉基米尔

 
MrBrooklin #:

你好

首先,去掉循环中的等号:

我还没有进一步查看您的代码。

再见,弗拉基米尔

没有任何变化,问题主要出在 SL/TP 中
 for(int i = 0; i < PositionsTotal(); i++)
      if(a_position.SelectByIndex(i))
         if(a_position.Magic() == MagicNumber && a_position.Symbol() == a_symbol.Name())
            if(PositionGetString(POSITION_COMMENT) == Comment_2)
              {
                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && PositionGetDouble(POSITION_TP) != TP_Buy)
                  a_trade.PositionModify(PositionGetInteger(POSITION_TICKET),PositionGetDouble(POSITION_SL),TP_Buy);

                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && PositionGetDouble(POSITION_TP) != TP_Sell)
                  a_trade.PositionModify(PositionGetInteger(POSITION_TICKET),PositionGetDouble(POSITION_SL),TP_Sell);
              }
 
MrBrooklin #:

你好

首先,去掉循环中的等号,这样就会变成这样:

我没有进一步查看您的代码。

再见,弗拉基米尔

感谢您抽出时间,通过简单的按工具取整 SL/TP 就解决了问题。出错的原因是 SL/TP 取自指标。

谢谢。

 
mikhail2929 Kravchenko#:

谢谢你,弗拉基米尔。我知道测试和优化是必要的。也就是说,"免费 "版块中的所有智能交易系统都可以下载并安装到真实账户中,不受任何限制。我的理解正确吗?

最好不要这样做:)

原因: