[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 348

 
FAQ:
为什么你不记得订单的票据,而不记得它的位置。如果没有这样的订单,在直接转账中会发生什么?你会删除这个零订单吗?


我已经试过了。这也是行不通的。

//+-------------------------------------------------------------------------------------+
//| Удаление несработанных отложеннык шортов                                            |
//+-------------------------------------------------------------------------------------+
void DeletePendingSells(int& amountOfCurrPending)
{
   int total = OrdersTotal() - 1,
       ordersToDelete = level - amountOfCurrPending,  // Количество отложек, которые требуется удалить
       s_ticket = 1,                                  // Тикет искомого ордера
   amountOfCurrPendingBuys = 0;                       // Количество текущих отложек на покупку
   amountOfCurrPendingSells = 0;                      // Количество текущих отложек на продажу

   double OOP = 20.0;                                  // Зададим значение цены открытия отложки, которой не может быть..
   
   if (ordersToDelete == 0) return (0);

   for (int i=total; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if(OrderType() != OP_SELLSTOP) continue;         // Работает только с шортовыми ордерами
      
      if (OOP > OrderOpenPrice())
      {
          OOP = OrderOpenPrice();                  // Ищется ордер, с минимальной ценой открытия
          s_ticket = OrderTicket();                // Получаем тикет ордера с минимальной ценой открытия
      }
   }
   if (s_ticket != -1)
   {
      OrderDelete(s_ticket,Black);
   }
   return (0);
}
 
hoz:


我以前也试过这样做。这也行不通。

你必须更加小心。
//+-------------------------------------------------------------------------------------+
//| Удаление несработанных отложеннык шортов                                            |
//+-------------------------------------------------------------------------------------+
void DeletePendingSells(int& amountOfCurrPending)
{
   int total = OrdersTotal() - 1,
       ordersToDelete = level - amountOfCurrPending,  // Количество отложек, которые требуется удалить
       s_ticket = 1,                                  // Тикет искомого ордера
   amountOfCurrPendingBuys = 0;                       // Количество текущих отложек на покупку
   amountOfCurrPendingSells = 0;                      // Количество текущих отложек на продажу

   double OOP = 20.0;                                  // Зададим значение цены открытия отложки, которой не может быть..
   
   if (ordersToDelete == 0) return (0);

   for (int i=total; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if(OrderType() != OP_SELLSTOP) continue;         // Работает только с шортовыми ордерами
      
      if (OOP > OrderOpenPrice())
      {
          OOP = OrderOpenPrice();                  // Ищется ордер, с минимальной ценой открытия
          s_ticket = OrderTicket();                // Получаем тикет ордера с минимальной ценой открытия
      }
   }
   if (s_ticket != -1)
   {
      OrderDelete(s_ticket,Black);
   }
   return (0);
}
 

它终于起作用了!原则上说,它是有效的,以前的版本也是如此。主要的错误是在函数调用 中,而不是在函数本身。

从专业的角度来看,所有的变量在进入函数时都应该被清零,除非它们是静态的,也就是说没有必要保持它们的具体数值,对吗?

 
hoz:

它终于起作用了!原则上说,它是有效的,以前的版本也是如此。主要的错误是在函数调用中,而不是在函数本身。

从专业人士的角度来看,所有的变量在进入函数时都应该被清零,除非它们是静态的,也就是说没有必要保持它们的具体数值,对吗?

用不会导致函数发生故障和最难发现错误的值来初始化函数中的变量。

我通常使用0或-1,这取决于该变量的目的。如果函数中的变量将存储找到的位置索引,那么将其初始化为-1。如果你把它初始化为0,那么在寻找正确的位置和它不存在之后,你仍然可以选择 索引为0的位置,尽管它不会是你要寻找的位置。 在-1时,这个位置将不会被选择。这是很难发现错误的所有可能的例子之一--函数中的一切似乎都是正确的,但输出却完全错误......。而EA并没有按照我们预期的顺序/位置工作......。

 

一个函数必须是简短的(可有可无,但可取)和完全清晰的(其目的)。比如2*2=4。也就是说,程序员必须清楚地了解它的用途和执行的操作。然后,他应该把它放在脑海中,忘记它里面有什么,把它当作一个 "黑盒子"。

一个函数所使用的所有变量都必须作为参数传递给它。使用全局变量 而不把它们作为参数传递,只有在它们是,例如,Externs(在MT的情况下),才是合理的。在一个函数中改变globals是不可接受的,如果缺少一个返回值,在参数列表中通过引用传递变量。

也就是说,如果你不得不扔掉这个函数,那么你就不必记住为什么剥离后的版本不能工作,因为这个函数中的任何globals都被修改了。所有这些都是为了确保如果你不得不重做,也不会引起连锁反应

 

大家好!

测试庞德-恩。

该订单应该在止损点之前的获利点关闭。

但由于某些原因,我的订单在获利时没有关闭。

问题:为什么我的订单没有按照交易功能 中的规定在获利时关闭?

建模方法--所有蜱虫。

链接中的例子

http://clip2net.com/s/55pdDU

注意.这样的情况--不经常发生.在大多数情况下,交易在10个点的止损点被关闭.及时。

也就是说,在我看来,它可能与价格和止损之间的最小可接受距离没有关系。

还有什么原因呢?

谢谢你。

 

帮助从一个指标中获取数据进入全局变量

大约。

6.5美元

6.6欧元

3.3英镑

等。

提前感谢您的帮助 !

/*取消了反编译。警告*/。

 
FAQ:

一个函数必须是简短的(可有可无,但可取)和完全清晰的(其目的)。比如2*2=4。也就是说,程序员必须清楚地了解它的用途和执行的操作。然后,他应该把它放在脑海中,忘记它里面有什么,把它当作一个 "黑盒子"。

一个函数所使用的所有变量都必须作为参数传递给它。使用全局变量而不把它们作为参数传递,只有在它们是,例如,Externs(在MT的情况下),才是合理的。在一个函数中改变globals是不可接受的,如果缺少一个返回值,在参数列表中通过引用传递变量。

也就是说,如果你不得不扔掉这个函数,那么你就不必记住为什么剥离后的版本不能工作,因为这个函数中的任何globals都被修改了。这样做的目的是,如果我不得不重做,就不会引起连锁反应。


谢谢你,还有,阿蒂姆,当然了!"。你让我看到了这些观点,这些观点在原则上是合乎逻辑的,但有时由于缺乏经验而没有注意到。

只是有一些其他的误解。你写道,如果EA中存在全局变量,那么它们在函数中只能作为参数传递使用,对吗?

我只是想了解,有没有理由创建全局变量(不是外部变量)......如果它们必须只通过参数传递,那么一长串的依赖函数会收集很多参数,有参数的函数的名字会非常长。

再说一遍,你可以创建一个全局变量,通过引用将其传入一个函数,并对其做任何你想做的事情,然后通过引用将其返回到全局,对吗?

当我今天看到你的帖子时,我开始思考这个问题,并把一些变量从全局转移到一个函数。然后我意识到,这些变量需要在另一个函数中使用,而这个函数与我声明这些变量的地方没有关系。如果你在这里听你的。"改变globals和函数是不能接受的",那么事实证明,直接获得所需变量的函数应该在不同的地方调用?但它已经使代码,可以说,不好看。你希望这个函数在你需要的时候被调用,而不是比你需要的更频繁。例如,搜索所有订单、买单和卖单的功能。我们有理由认为,它应该在每次打勾时只被调用一次,而且不超过一次。但是,如果它在开始时被调用,并不是每个使用订单搜索函数返回的这些变量的函数都可以通过其参数传递。然后我们还是回到全局变量,还是什么?

 

请帮助解决 iHigh(Symbol(),timeframe,shift)中的shift值限制问题 ,它被限制在数字1000

iTime(Symbol(),timeframe,1001)给出1970.01.01 00:00
 
到底如何关闭警报????????,为什么按下空格键后,它?(!%"?:?一直在响??????????。