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

 
Zorian43:
大家晚上好!我不知道我是否写在正确的主题里,如果我写错了,请原谅。当我在安卓系统上安装Metatrader 5 时,自动创建了一个模拟账户,每次我启动应用程序时都会连接到该账户。当我想连接另一个账户时,这次是来自我的经纪人,我找不到模拟账户的密码。我按了 "重置密码",之后我就无法连接到模拟账户。有什么办法可以恢复对模拟账户的访问吗?
不,开一个新的模拟账户。
 

你好!

请告诉我为什么CAccountInfo::MarginCheck()方法可以在测试器中返回所需的保证金为零?它只在为ORDER_TYPE_BUY_LIMIT 限价买入订单调用时返回0。

工具 Si-9.18 - 来自 MICEX 的美元期货。

在测试项目中,测试器中的下一个调用给出的不是零,而是90--一个很小的数值,这看起来相当不靠谱。

ENUM_ORDER_TYPE     orderType   = NULL;
uint                orderVolume = 1;
double              orderPrice  = gvTick.last;
double marginRequired = 0;

orderType       = ORDER_TYPE_BUY_LIMIT;
marginRequired  = gnCAccountInfo.MarginCheck( gsIns, orderType, orderVolume, orderPrice);
Print("  Требуемая маржа ", marginRequired);
日志输出: 2018.09.01 13:38:56.040 2018.06.13 12:10:00 所需保证金 90.0
 
rel18:

你好!

请告诉我为什么CAccountInfo::MarginCheck()方法可以在测试器中返回所需的保证金为零?它只在为限价买单ORDER_TYPE_BUY_LIMIT 调用时返回0。

工具 Si-9.18 - 来自 MICEX 的美元期货。

在测试项目中,测试器中的下一个调用给出的不是零,而是90--一个很小的数值,这看起来相当不靠谱。

我怀疑是因为只有

订单_类型_购买

市场购买订单

销量

市场卖出订单

 
Vladimir Karputov:

我怀疑这是因为只有

订单_类型_购买

市场购买订单

销量

市场卖出订单

下面是同一例子的测试器中买入限价单的结果。90的利润率是非常小的。 真的是这样吗?


而在这里,我们在测试器中的保证金为零。



所有的历史测试都是用一个真实的账户进行的。
 

指示器停止工作,帮助编译
谢谢你。

附加的文件:
VP-Range-v6.mq5  44 kb
VP-v6.mq5  42 kb
 
rel18:

下面是同一例子的测试器中限价买入订单的结果。90的利润率是非常小的,是这样的吗?


也许是模拟账户的问题?在同一经纪商的真实账户上试一试。

 
Aliaksei Karalkou:

指标停止工作,帮助编译
谢谢。

由于1861年的版本有一个 内置的iBarShift函数,它不能作为一个自定义函数使用。请重新命名该功能。

 

你好!请帮助我完成这项任务。有一个格式为"PERIOD_M1""PERIOD_M2""PERIOD_M3"的字符串类型 的值,等等。我们需要用ENUM_TIMEFRAMES类型的值来替换这些值--分别是PERIOD_M1、PERIOD_M2、PERIOD_M3,等等。

在下面的例子中,一切都很好,但我们不能在switch 语句中使用一个字符串变量,我们应该怎么做?我们可以直接使用if....else结构,但我认为有更优雅的方法。有什么建议吗?谢谢!

//+------------------------------------------------------------------+
//| Преобразует строку в таймфрейм                                   |
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES StringToTimeframe(string timeframe)
  {
   ENUM_TIMEFRAMES tfr=Period();
   switch(timeframe) 
     {
      case "M1"  : tfr=PERIOD_M5;  break;
      case "M2"  : tfr=PERIOD_M6;  break;
      case "M3"  : tfr=PERIOD_M5;  break;
      }
//---
   return(tfr);
  }
 
Tango_X:

你好!请帮助我完成这项任务。有一个格式为"PERIOD_M1""PERIOD_M2""PERIOD_M3"的字符串类型 的值,等等。我们需要用ENUM_TIMEFRAMES类型的值来替换这些值--分别是PERIOD_M1、PERIOD_M2、PERIOD_M3,等等。

在下面的例子中,一切都很好,但我们不能在switch 语句中使用一个字符串变量,我们应该怎么做?你可以直接使用if....else结构,但我认为有更优雅的方法。有什么建议吗?谢谢!

使用if()结构

 
Tango_X:

你好!请帮助我完成这项任务。有一个格式为"PERIOD_M1""PERIOD_M2""PERIOD_M3"的字符串类型 的值,等等。我们需要用ENUM_TIMEFRAMES类型的值来替换这些值--分别是PERIOD_M1、PERIOD_M2、PERIOD_M3,等等。

在下面的例子中,一切都很好,但我们不能在switch 语句中使用一个字符串变量,我们应该怎么做?你可以直接使用if....else结构,但我认为有更优雅的方法。有什么建议吗?谢谢!

//+------------------------------------------------------------------+
//| Преобразует строку в таймфрейм                                   |
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES StringToTimeframe(string timeframe)
  {
   return
     (
      timeframe == "M1"   ?  PERIOD_M1  :
      timeframe == "M2"   ?  PERIOD_M2  :
      timeframe == "M3"   ?  PERIOD_M3  :
      timeframe == "M4"   ?  PERIOD_M4  :
      timeframe == "M5"   ?  PERIOD_M5  :
      timeframe == "M6"   ?  PERIOD_M6  :
      timeframe == "M10"  ?  PERIOD_M10 :
      timeframe == "M12"  ?  PERIOD_M12 :
      timeframe == "M15"  ?  PERIOD_M15 :
      timeframe == "M20"  ?  PERIOD_M20 :
      timeframe == "M30"  ?  PERIOD_M30 :
      timeframe == "H1"   ?  PERIOD_H1  :
      timeframe == "H2"   ?  PERIOD_H2  :
      timeframe == "H3"   ?  PERIOD_H3  :
      timeframe == "H4"   ?  PERIOD_H4  :
      timeframe == "H6"   ?  PERIOD_H6  :
      timeframe == "H8"   ?  PERIOD_H8  :
      timeframe == "H12"  ?  PERIOD_H12 :
      timeframe == "D1"   ?  PERIOD_D1  :
      timeframe == "W1"   ?  PERIOD_W1  :
      timeframe == "MN1"  ?  PERIOD_MN1 : 
      PERIOD_CURRENT
     );
  }
//+------------------------------------------------------------------+