如何将AccountBalance()存储到变量中?

时间:2019-07-16 06:29:47

标签: mql4 trading algorithmic-trading forex

if(Total_sell_pos() == 0 && Total_buy_pos() == 0) {
      double previous_balance = AccountBalance(); //usd1000
}

if (AccountEquity() > previous_balance + (previous_balance *0.05)){ //usd1000 + 50 = usd1050
      CloseSellOrders();
      CloseBuyOrders();
      Delete_Pendings();
}

如果净值超过usd1050,则删除待处理订单和订单。

但是为什么在运行代码时,即使当权益少于以前的余额时,它仍保持待处理的删除并立即下订单?

以下代码是问题所在,我将其替换:

AccountEquity() > previous_balance + (previous_balance *0.05)

使用

AccountEquity() > 1050

然后只有它起作用。我确实尝试检查该值:

double check_value = previous_balance + (previous_balance *0.05);
printf (check_value); //1050

我可以知道为什么不能使用以下代码吗?

AccountEquity() > previous_balance + (previous_balance *0.05)

1 个答案:

答案 0 :(得分:0)

  

问:如何将AccountBalance()存储到变量中?

让我们从变量开始-声明它:

    double aPreviousBALANCE;

声明范围由封闭的代码块边界驱动。 MQL4 / 5可以在“全局”范围内声明一个变量,该变量可能在其他代码块内部可见,但是如果变量名与“全局”范围定义的变量名相同,则在本地声明(显式在代码中,或者在调用签名规范的函数参数声明中引入)将“屏蔽”对在“全局”范围内声明的变量的访问。您必须检入原始代码,并且MQL4 / 5-IDE可能在编译过程中警告您发生此类冲突(请参阅编译器警告消息)。

让我们以实际状态存储它,我们在这里将有更多步骤:

    RefreshRates();                                          // Force a state-update
    aPreviousBALANCE = AccountInfoDouble( ACCOUNT_BALANCE ); // Store an updated value
  

问:我可以知道为什么我不能使用以下代码吗?

任何语言(MQL4 / 5都不例外)具有执行数学运算符的某种顺序。 MQL4不必也没有与我们可能已有一些经验的任何其他语言使用同一语言的保证。因此,在此始终要非常明确,即通过明确的括号指定所有顺序,当语言解析器/编译器会突然更改运算符的优先级并出现突然的噩梦时,这将为您节省更多的“意外”。一次发生这样的震惊都不值得:

   if ( ( ( a * b ) + c ) < fun() ) // is EXPLICIT and a way safer, than

   if (     a * b   + c   < fun() ) // is DEPENDENT on not having {now|in future}
                                    //              a binary boolean (<)-operator
                                    //              a higher priority than (+)-op

所以,要始终保持明确,您会保持更安全的态度。

最后,测试:

    RefreshRates();                                          // Force a state-update
    if ( ( aPreviousBALANCE * 1.05 ) < AccountInfoDouble( ACCOUNT_EQUITY ) )
    { 
         ...
         }

还要检查,如何从Broker端预置您的设置-他们会运行一条支持热线,让您询问其设置:

  

股本计算取决于交易服务器设置

Print( "Profit calculation mode for SYMBOL[ ",
        Symbol(),
       " ] is ",
        MarketInfo( Symbol(), MODE_PROFITCALCMODE ),
       " { 0: mode-FOREX, 1: mode-CFD, 2: mode-FUTURES }."
        );

我的 AccountBalance() 功能在哪里?

最近的终端版本使用一组新的呼叫类型:

 AccountInfo{Integer|
              Double|
              String}( <anEnumDrivenItemIDENTIFIER>
                       )

  SymbolInfo{Integer|
              Double|
              String}( <aSymbolNAME>,
                       <anEnumDrivenItemIDENTIFIER>
                       )

仅举几例,因此请重新阅读文档以采用最新更改。总是。当您的终端更新了新的内部版本时,将显示为ALAP(在为MQL4-IDE和/或终端加载新版本的帮助文件时可能会看到)。

好吧,这发生了。 MQL4不断发展,我们曾经使用的某些功能已不复存在,开始突然产生不准确或不确定的结果或改变其行为(MQL4-er仍然记得那天, string 数据类型不再只是静默的string,而突然变成了 struct 。好吧,它在更新的帮助的几乎不相关的页面的深处被提到文件,但代码崩溃很痛苦,而且调试,分析和重构的时间很长)