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

 
Alexey Viktorov:


你试图打印的东西是不正确的。正确的方法是这样的。

下面是详细情况。

42是一个数字标识符:ACCOUNT_MARGIN_FREE

也就是说,我们可以从常数中得到自由利润率

AccountInfoDouble(ACCOUNT_MARGIN_FREE)

或通过其数字标识符。

AccountInfoDouble(42)

谢谢你!

 
killer67:

下面是详细情况。

42是一个数字标识符:ACCOUNT_MARGIN_FREE

也就是说,我们可以从常数中得到自由利润率

或通过其数字标识符。

谢谢你!

第一个版本的写作内容更丰富。

 

https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants

这可能是一个愚蠢的问题,但这些函数可以在MQL4中使用吗?只是MQL4的工具比较有限。

如何在MQL4中获得数据。

符号_session_deals

当前时段的交易数量

符号_session_buy_orders

目前买入订单的总数量

符号_session_sell_orders

目前卖出订单的总数量

SYMBOL_VOLUME

成交量 - 最后一笔交易的成交量

符号_高容量

当天的最大成交量

符号_音量低

当天的最低成交量

SYMBOL_BID

出价--最佳出价

SYMBOL_BIDHIGH

当天的最高出价

SYMBOL_BIDLOW

当天的最低出价

SYMBOL_ASK

询问--最佳出价

SYMBOL_ASKHIGH

当天的最大询问量

SYMBOL_ASKLOW

当天的最低要求

符号_session_volume

当前时段的总交易量

符号_session_turnover

本届会议的总营业额

符号_session_interest

未结头寸的总数量

符号_session_buy_orders_volume

目前买入订单的总数量

符号_session_sell_orders_volume

目前卖出订单的总数量

符号_session_open

会议开盘价

符号_session_close

收盘价


这是一个有用数据的宝库,一气呵成。唯一的问题是如何在MQL4中做到这一点。 可能会出现这样的问题,为什么我不研究MQL5,因为它有更广泛的功能。这很简单。并非所有的经纪人都支持它。目前,MQL4仍然是最受欢迎和需求量最大的。

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Для получения текущей рыночной информации служат функции SymbolInfoInteger(), SymbolInfoDouble() и SymbolInfoString(). В качестве второго параметра этих функций допустимо передавать один из идентификаторов из перечислений ENUM_SYMBOL_INFO_INTEGER, ENUM_SYMBOL_INFO_DOUBLE и ENUM_SYMBOL_INFO_STRING соответственно. Некоторые символы (как...
 
Gilmor:

https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants

这可能是一个愚蠢的问题,但这些函数可以在MQL4中使用吗?只是,MQL4的工具更加有限。

如何在MQL4中获取数据。


它是一个一键式的有用数据的宝库。但如何在MQL4中做到这一点。本文还将包含一些关于如何在MQL5中准备学习的提示。这很简单。并非所有的经纪人都支持它。目前,MQL4仍然是最受欢迎和需求量最大的。

在mql4的文档中,所有不工作的都被标记出来。

SYMBOL_BID

出价--最佳出价

SYMBOL_BIDHIGH

不支持

SYMBOL_BIDLOW

不支持

SYMBOL_ASK

询问--最佳购买条件

SYMBOL_ASKHIGH

不支持

SYMBOL_ASKLOW

不支持

SYMBOL_LAST

不支持

符号_lasthigh

不支持

SYMBOL_LASTLOW

不支持

符号_POINT

单点值

这不是整个表格。文档中不止一个,你只需按下F1就可以阅读。

 
Alexey Viktorov:

在mql4文档中,所有不工作的都被标记出来。

谢谢你。
 
帮助理解,不能正确设置止损。
日志行:
2019.11.16 12:38:40.660 2019.01.02:35:00 要计算止损,从经纪人那里取值=30
2019.11.16 13:20:18.791 2019.01.02:03:00 开单:价格=1.14595,止损=1.14565,止盈=1.14625
2019.11.16 13:20:18.791 2019.01.02 02:03:00 在1.14595处即时购买0.01欧元兑美元失败 sl:1。14565 tp: 1.14625 [无效止损]
2019.11.16 13:20:18.792 2019.01.02:03:00CTrade::OrderSend: Instant buy 0.01 EURUSD at 1.14595 sl: 1.14565 tp: 1.14625 [无效止损]


现在对这种情况稍作说明:
在开单前的代码中,我计算:
价格=买入的最佳市场价格,取决于订单,在这种情况下是买入。
SL = 计算一个正确的止损(经纪人允许从价格上至少止损30个单位)即
价格(1.14595)- 0.0003 = SL(1.14565)
TP = 计算一个正确的止损(经纪人允许从价格上至少止损30个单位)即
价格(1.14595)+ 0.0003 = TP(1.14625)
嗯,一切看起来正确,我持有30点,但我得到一个设置错误。

如果我们设定SL=0,那么一切都很好,订单和TP都被设定了。
我在计算SL时出现了错误,错误在哪里?
 
killer67:
帮助我理解,我无法正确设置止损。
日志线。
2019.11.16 12:38:40.660 2019.01.02 02:35:00 为了计算止损,从经纪人那里取值=30
2019.11.16 13:20:18.791 2019.01.02 02:03:00 开单:价格=1.14595,止损=1.14565,获利=1.14625
2019.11.16 13:20:18.791 2019.01.02 02:03:00 未能即时买入0.01欧元兑美元,价格为1.14595 sl: 1.14565 tp: 1.14625 [无效的停止]
2019.11.16 13:20:18.792 2019.01.02 02:03:00 CTrade::OrderSend: instant buy 0.01 EURUSD at 1.14595 sl: 1.14565 tp: 1.14625 [无效止损]


现在对这个案子有了一些了解。
在代码中,我在开单前进行了计算。
价格 = 买入的最佳市场价格,取决于订单,在这种情况下是买入。
SL = 计算一个正确的止损点(经纪人允许止损点距离价格至少30个单位),即
价格(1.14595) - 0.0003 = SL(1.14565)
TP = 计算正确的止损(经纪人允许的止损距离价格至少有30个单位),即
价格 (1.14595) + 0.0003 = TP (1.14625)
嗯,一切似乎都是正确的,我持有30个点,但我得到一个设置错误。

我们设置SL=0,那么一切都很好,订单和TP都被设置了。
原来是SL的计算错误,错误在哪里?

什么类型的价格?

 
Iurii Tokman:

什么类型的价格?

购买时 价格=SYMBOL_ASK

销售价格 = SYMBOL_BID

 
killer67:

购买时 价格=SYMBOL_ASK

当销售价格=SYMBOL_BID时

你是否尝试过添加一个散页?

 
Iurii Tokman:

你是否尝试过添加一个散页?

这样固定下来了。

double CheckSetSL(ENUM_ORDER_TYPE OrderT, double price)
  {
   if(InpSL != 0)
     {
      double CalcSL = 0.0;
      double SL = 0.0;
      if(InpSL < 0.0003)
        {
         CalcSL = 0.0003; // Если SL в настройках указано меньше 30 (установки брокером) то ставим минимально допустимую.
        }
      else
        {
         CalcSL = InpSL;
        }

      // Формируем стоп-лимит.
      if(OrderT == ORDER_TYPE_BUY)
        {

         SL = SymbolInfoDouble(_Symbol,SYMBOL_BID) - CalcSL;

        }
      else
        {

         SL = SymbolInfoDouble(_Symbol,SYMBOL_ASK) + CalcSL;

        }

      return SL;
     }

   return 0.0;
  }
原因: