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

 
multiplicator:
由于某些原因,终端不显示错误)

你不能自己做吗?

 
multiplicator:
由于某些原因,终端没有显示错误)

终端与此有什么关系?你必须在你的计划中考虑到量的分级。

尝试以编程方式发送订单,以0.000001手,或0.12345678手,或100000.1手等开仓

 
Алексей Тарабанов:

你不能自己做吗?

什么,它没有显示。
 
Artyom Trishkin:


试着发送一个程序化的订单,打开一个 手数为0.12345678的仓位

以0.12号地块开盘。

问题是,是否正常化或不正常化。

 
Artem,你为什么不把它们忘掉呢?
 
Alekseu Fedotov:

试试这个。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot(double lo, bool ro=False, string sy="") {
  double l, k;
  if (sy=="" || sy=="0") sy=Symbol();
  double ls=MarketInfo(sy, MODE_LOTSTEP);
  double ml=MarketInfo(sy, MODE_MINLOT);
  double mx=MarketInfo(sy, MODE_MAXLOT);

  if (ml==0) ml=0.1;
  if (mx==0) mx=100;

  if (ls>0) k=1/ls; else k=1/ml;
  if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;

  if (l<ml) l=ml;
  if (l>mx) l=mx;

  return(l);
}


这就是不清楚的地方。
  if (ls>0) k=1/ls; else k=1/ml;
地段间距比零或更小有什么区别。
 
Алексей Тарабанов:
Artem,你为什么不把它们忘掉呢?
去你的。
去睡觉。
 
multiplicator:

以0.12的手数开盘。

问题是正常化或不正常化。

我已经厌烦了。这批货与他开出的价格有什么关系呢,你这个病人?

 
Алексей Тарабанов:

我已经厌烦了。这批货与你开出的价格有什么关系呢,你这个病人?

老头子,没人问你什么,去睡觉吧。

当我在论坛上看到你的帖子时,我想 "这个人的大脑很脆弱"。
 
Alekseu Fedotov:

试试这个。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot(double lo, bool ro=False, string sy="") {
  double l, k;
  if (sy=="" || sy=="0") sy=Symbol();
  double ls=MarketInfo(sy, MODE_LOTSTEP);
  double ml=MarketInfo(sy, MODE_MINLOT);
  double mx=MarketInfo(sy, MODE_MAXLOT);

  if (ml==0) ml=0.1;
  if (mx==0) mx=100;

  if (ls>0) k=1/ls; else k=1/ml;
  if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;

  if (l<ml) l=ml;
  if (l>mx) l=mx;

  return(l);
}

它在这里除以手数大小,丢弃剩余部分,然后取其中的多少手数。

这里可能有一个错误。

例如,我们把数值放在函数中:7手。
该经纪人的最小手数为5,手数为2。


他将用7除以地段增量。 他将采取整数部分的数量。然后再乘以地段增量。结果将是6手。 他将尝试用这个量开立一个订单。
但是,只有在5、7、9等量级的情况下才能打开订单。


最好是用我们的地块(7)减去最小的地块面积(5)。并带着剩余的部分去工作。

用余下的部分执行所有行动,即它有一个功能。

数一数有多少个完整的台阶,地段台阶的大小。然后将步骤数乘以批量步骤大小。这给我们带来了2。

然后将这个2再次加到最小手数(5)上。结果是5+2=7。


但这是一个奇妙的例子。
经纪商现在的最小手数和手数增量为0.01
或最小手数和手数增量为0.1

原因: