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

 

下午好。

突破了我的大脑,为什么下面的算法不起作用。它没有将一个数组传入函数。起初我一直在寻找原因,但我在这个测试例子中成功地找到了它。

报告: "无法在'TestLib.ex4'中找到'functest'" 然后 "未解决的导入函数调用"。

Test.mq4文件的内容

#属性严格
#include <TestLibx.mqh>。

int质量[5]。

int OnInit() { return(INIT_SUCCEEDED); }
void OnDeinit(const int reason) { }

空白的OnTick()
{
(质量)。
int c=0。
for (c=0;c<5;c++) Print (" mass[",c,"]=",mass[c]," " ) 。
睡眠(2000)。
}

TestLibx.mq4库文件的内容

#属性库
#属性严格
空白的functest(int &massx[])。
{
int c=0。
while (c<5)
{
massx[c]=MathRand()。
c++;
}
返回。
}
TestLibx.mqh库文件的内容

#属性严格
#import "TestLibx.ex4"
void functest (int &massx[])。
##进口

将原始文件附在档案中。

请帮助我了解如何在MQL4中向库函数传递数组。

谢谢你。

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Дифференциальный индикатор Султонова Уважаемые...
附加的文件:
MQL4.zip  11 kb
 
Alexey Viktorov:
值的差异大于10*Point,但我们需要考虑差异将是正的还是负的。

谢谢你。我想转移到交换点和佣金。这有什么不对吗?

double OrderSwap_Commission(int mn=-1)
  {
   int i=0;
   double sum=0,lots=0;
   double pips=0;//своп, комисся в пунктах
   for(i=0; i<OrdersTotal(); i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderMagicNumber()!=mn) continue;
      if(OrderType()==OP_SELL || OrderType()==OP_BUY)
        {
         lots=lots+OrderLots();
         sum=sum+OrderSwap()+OrderCommission();
        }
     }
   if(lots!=0)
     {
      pips=NormalizeDouble(MathAbs((sum)/(SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/lots))*_Point,_Digits);
      pips=(MathRound(pips*MathPow(10,Digits)))/MathPow(10,Digits);
     }
   return(pips);
  }
//
 
bij:

谢谢你。我想转移到交换点和佣金。怎么了?

int  pipsProfitOrder = (int)MathFloor( ( OrderProfit() + OrderSwap() + OrderCommission() ) / (SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );
 
Konstantin Nikitin:

谢谢你。

Op,你改变了你的答案,我不需要知道利润。交换和佣金,可以有一个以上的位置。

 
bij:

谢谢你。

Op,你改变了你的答案的东西,我不需要知道利润。互换和委托。

只是,你有除数,你需要乘数。

SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*OrderLots()

该原则本身显示了我所使用的。而将其应用于你的代码是非常简单的。

 
Konstantin Nikitin:

只是,你有除数,你需要乘数。

该原则本身显示了我所使用的。而将其应用于你的代码是非常容易的。

我明白了,谢谢你。
 

你好!

问题:该指标创建了图形对象(OBJ_ARROW),但其中一些对象只有在编译或改变时间框架后才出现。编译过程中没有任何错误或警告。在测试器中,Print("Error calling ObjectCreate():",GetLastError());0, Print("Error calling ObjectCreate():",GetLastError() );4200。

如果你不介意回答一个傻子的话!

 
测试人员如何以编程方式加载不同(较小)时间范围内的报价?
 
Juer:
测试人员如何以编程方式加载不同(较小)时间框架的报价?
高位的时间框架是基于低位的数据。所以,这是没有必要的。
 
bij:
如果当前时间=开盘时间 加5分钟,则平仓;如果图表周期为M5,则在新条形的开盘时平仓。

谢谢你。它变得更好。但现在又有一个问题。测试仪一直给我100%的结果。但这不是它的工作方式。根据日志,许多交易被打开,通常在指定时间后关闭。然而,根据我们可以看到开仓和平仓时刻的结果图,并非所有的交易都是盈利的。什么原因会导致这样一个100%的左侧?

也感谢Artem!