对MT5的祝愿 - 页 14

 
stringo:
梳理了一下,修好了。谢谢你。

   do
     {
      rates_total=CopyRates(Symbol(),PERIOD_M1,time1,time2,rates);
      err++;
     }

谢谢你的纠正,几乎不错,为什么几乎...

在帮助中说

start_time [in] 第一个元素对应的酒吧时间

而第一个元素是0。

但最后一个元素是好的。

如果这是它的原意,请修复帮助。

 
vdv2001:

谢谢你的纠正,几乎不错,为什么几乎...

在帮助中说

start_time [in] 第一个元素对应的酒吧时间

而第一个元素是0。

但最后一个元素是好的。

如果这是它的本意,请修复帮助。

情况是,日期到日期变量中的start_time和stop_time可以是任何东西--在任何情况下它们形成一个范围。让我们试着在文档中更清楚地说明这一点
 
stringo:
情况是,在日期到日期的情况下,start_time和stop_time可以是任何 - 在任何情况下,它们形成一个范围。让我们试着在文件中更具体地说明这一点

也就是说,你是说Copy*函数在日期到日期的情况下会返回所有的元素,除了开始的那个?所以我需要这样写表达式。

   do
     {
      rates_total=CopyRates(Symbol(),PERIOD_M1,time1-PeriodSeconds(PERIOD_M1),time2,rates);
      err++;
     }

这个问题对我非常重要。

 

请注意,当你切换到新的一天时,就会发生这样的事情。

更新之后,一切都归于平静。

观察过渡到新的一天的形成,我经常注意到这种转变,最有趣的是在第二天更新图表的第一个条形图形成的时刻没有带来结果。(我可能是错的,但我认为我以前的帖子也与此有关)。

 

Bild 252.

主菜单:<图形>-<图形工具> 时间段显示。

 
uncleVic:

不幸的是,最新版本的CAccountInfo并没有进入构建。

在附件中,你会发现FreeMarginCheck方法(到目前为止只针对SYMBOL_CALC_MODE_FOREX)。

如果你有任何意见和(或)想法,请来信。

我发现,FreeMarginCheck方法需要改进。

1.我们来考虑SYMBOL_CALC_MODE_FOREX的情况。

work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency()。
bid=SymbolInfoDouble(work,SYMBOL_BID)。
保证金=出价*成交量*合约大小/杠杆。
margin=free_margin。
突破。

如果SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)和Currency()的两个和值变成相等,那么bid变量得到0的数值,margin变量得到free_margin的数值。

为了解决这个问题,我做了以下工作。

case SYMBOL_CALC_MODE_FOREX:

bid=1.0。

如果(SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)!=Currency())

{

work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency()。
bid=SymbolInfoDouble(work,SYMBOL_BID)。
}

保证金=出价*成交量*合约大小/杠杆。
margin=free_margin。
突破。

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

请问,Copy*()函数何时能正常工作?

在每个新建筑中,它们都停止工作,难道没有人使用它们吗?

 
vdv2001:

谢谢你的纠正,几乎不错,为什么几乎...

在帮助中说

start_time [in] 第一个元素对应的酒吧时间

而第一个元素是0。

但最后一个元素是好的。

如果这是你的本意,请修正帮助。

从你的例子中不清楚时间1的价值是如何获得的。重现这种情况的尝试并不成功。

附加的文件:
 
Yedelkin:

发现FreeMarginCheck方法需要完善。

谢谢你的评论。纠正了。
 
Yedelkin:

发现FreeMarginCheck方法需要完善。

2.另一个问题如下。再次考虑SYMBOL_CALC_MODE_FOREX的情况。
work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency()。
bid=SymbolInfoDouble(work,SYMBOL_BID)。

如果符号 变量的基础货币不是直接报价的货币(例如CADJPY),SymbolInfoDouble(work,SYMBOL_BID)将输出0。

2.1 此外,不清楚为什么在计算第二个变量(出价)时要使用投标价格。毕竟,我们需要确保计算出价 的货币是以牺牲存款货币为代价 购买的,即 "买入保证金货币,卖出存款货币"而如果在某一货币对中,存款货币处于第二位,那么我们就必须使用ASK价格来执行指定的操作。

为了纠正这种情况,我做了以下工作。

双重课程。
//---
switch(SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE))
{
case SYMBOL_CALC_MODE_FOREX:
课程=1.0。

//---检查存款货币是否为当前货币对的基础货币。
//对。如果是,那么课程变量的值将保持为1.0。
如果(SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)!=Currency())
{
work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency()。

//-----检查是否有一个货币对的基础货币与
//当前货币对的基础货币,且报价货币与入金货币相同
//(即,如果存款是美元,请查看直接报价)
如果(SymbolInfoDouble(work,SYMBOL_ASK)!=0)
课程=SymbolInfoDouble(work,SYMBOL_ASK)。

//---- 如果不满足上述条件,改变符号的顺序
//工作变量中的货币没有得到满足,我们得到了一个带有基础货币的货币对。
//与存款货币相匹配,报价货币与基础货币相同。
//当前货币对(如果存款是美元,我们获得具有反向报价的货币对)。
否则
{
work=Currency()+SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)。
course=1/SymbolInfoDouble(work,SYMBOL_BID)。
}
}
保证金=课程*数量*合同_大小/杠杆。
margin=free_margin。
突破。

Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5
原因: