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

 
Ihor Herasko:

简单。

给出了一个错误

 
Aleksandr Lishchenko:

错误信息

错误在哪里?什么样的错误?

 

你好。我有一个任务是检查用户 指定的输入 交易量参数 是否正确,即指定的手数应该是换手步骤的倍数。要做到这一点,找到除法的实际余数,并将其与零或非常接近零的数值进行比较(例如,0.000000001)。

void OnStart()
{
   double volume = 0.03;
   Alert("Результат деления ", volume/MarketInfo(Symbol(), MODE_LOTSTEP));
   Alert("Шаг изменения лота ", MarketInfo(Symbol(), MODE_LOTSTEP));
   Alert("Вешественный остаток ", fmod(volume, MarketInfo(Symbol(), MODE_LOTSTEP)));
}

结果。

/*
   Вещественный остаток 0,009999999999999998
   Шаг изменения лота 0,01
   Результат деления 3,0
*/

同时附上一张截图。

我认为余数应该是零或一个非常小的数字,但由于某些原因,结果几乎是0.01?那么,如果用户错误地设置了0.001,我怎样才能检查输入参数呢?

附加的文件:
4npm6qh.png  8 kb
 
Aleksandr Teleguz:

你好。我有一个任务是检查用户 指定的输入 交易量参数 是否正确,即指定的手数应该是换手步骤的倍数。要做到这一点,找到除法的实际余数,并将其与零或非常接近零的数值进行比较(例如,0.000000001)。

结果。

同时附上一张截图。

我认为余数应该是零或一个非常小的数字,但由于某些原因,结果几乎是0.01?那么,如果用户错误地设置了0.001,我怎样才能检查输入参数?

这有点不对。首先要做的是计算出最接近的正确值(基于设定值),然后检查得到的数值之间的差异。如果它等于零(或不超过DBL_EPSILON),则一切正常。

void OnStart()
{
   double volume = 0.03;

   double fVolumeMin = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN);   
   double fVolumeMax = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MAX);   
   double fVolumeStep = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_STEP); 

   double fNearestCorrectVolume = VolumeCast(volume, fVolumeMin, fVolumeMax, fVolumeStep);
   if (fabs(fNearestCorrectVolume - volume) > DBL_EPSILON)
      Alert("Ошибка");
   else
      Alert("Все ОК");
}

VolumeCast功能可以从这里 获取。

 
Ihor Herasko:

它在哪里出了问题?它发出的错误是什么样的?

1个错误(s), 0个警告(s) 2 1
如果'--表达式在全局上是不允许的

 

下午好!!!。

伙计们,你们能告诉我将一个EA绑定到一个账户的代码吗(针对最新的MT4更新)。

非常感谢你。

 
Aleksandr Lishchenko:

下午好!!!。

伙计们,你们能告诉我如何将一个EA链接到一个账户的代码吗(对于最新的MT4更新)。

非常感谢你。

你已经得到了密码。

你自己犯了错误--在错误描述中写到,你在全局变量 区域输入了代码,而不是在OnTick()或OnInit()中。

'if' - expressions are not allowed on a global scope

有了这样的知识,你还在试图保护你的代码不被别人发现?
 
Artyom Trishkin:

你已经被告知了密码。

你自己犯了错误--在错误描述中写到,你在全局变量 区域输入了代码,而不是在OnTick()或OnInit()内。

'if' - expressions are not allowed on a global scope

有了这些知识,你还想保护你的代码不被别人发现?

我只是在学习!

不要评判!;)

 
Aleksandr Lishchenko:

1个错误(s), 0个警告(s) 2 1
如果'--表达式在全局上是不允许的

让我看看你是如何应用这个代码的。你只是复制了我写的东西吗?

 
Ihor Herasko:

让我看看你是如何应用这个代码的。你只是复制了我写的东西吗?

我做到了:)))

原因: