[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 970

 
Vinin:

谢谢你。
 
AlexSTAL:
警告

我的母语是乌克兰语。但感谢你的关注。
 

帮助!如果我有两个吊坠,其中一个被 "获利"关闭,我需要删除第二个吊坠。我怎么写呢?代码中的错误在哪里?

int pos;
for (pos=0; pos<OrdersTotal(); pos++)
{
if (OrderSelect(pos, SELECT_BY_POS))
{
if (OrderClosePrice() >= OrderTakeProfit())
{
int i;
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrderDelete(OrderTicket()))
{
Print("Ордер удален");
       }
      }
     }
    }
break;
   }
  }
 }
return(0);
}
 

晚上好(我在以前的帖子中忘记打招呼了)。你能告诉我用哪个函数来做以下事情吗?在专家顾问中,指标在当前的蜡烛上开了一个订单(让它变成数字=9)。如果在开盘后,它(指标)重新绘制(而收盘后蜡烛9没有出现),那么我需要在收盘后将蜡烛9的订单关闭。

 

有输入参数。

bool Mart - 如果为真,意味着在一个停止上有一个关闭的订单,因此做了一个加倍。

TradeInf -交易许可,如果为真,意味着没有交易的订单,我们可以交易)

有以下代码:
if (Mart == true && TradeInf==true)
{
Alert("double the lot");
LotS=NormalizeDouble(LotS*martin,2);
Alert("lot size",LotS);
}
if (Mart == false && TradeInf==true)
{
Alert("Reset lot");
LotS=lot;
}

然后在OpenOrder命令中,批量大小=LotS。

因此,如果它发现一个地段关闭的地段,地段大小变成了-9315605757223323600
为什么? 什么原因?

 

你好,我正在根据不同的原则从一个平衡值中计算出很多...

我最后得到的数字是0.2345,我如何在不四舍五入的情况下削减双倍,我是说。

到一位数 - 0.2

到两位数 - 0.23

到三 - 0.234,以此类推...

 
akacuk21:

你好,我正在根据不同的原则从一个平衡值中计算出很多...

我最后得到的数字是0.2345,我如何在不四舍五入的情况下削减双倍,我是说。

到一位数 - 0.2

到两位数 - 0.23

到3-0.234等...


double lot =NormalizeDouble(LOT,2)

批量 - 用于下订单

LOT - 订单计算公式

"2" - 四舍五入到小数点后2位。

 
谢谢你的回答,但在NormalizeDouble 的情况下,像0.29这样的数字四舍五入后将是0.3,而我需要它是0.2。
 
这违反了四舍五入的规则,所以让我们等着听长老们怎么说。
 
Sys15975382:
这是违反圆规的,让我们等待老同志们的意见。

呃...先生们。你不能把这样的事情正常化......。:)这里有一点帮助。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}


原因: