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

 
ilnur17021992:
SELL_Lvl是卖出网格的膝盖(订单)数量,SELL_NoLossLevel 是这些订单的CU的总水平(价格)。好吧,想法是这样的:我们需要在买入线的水平上画一条线,并在新的线被打开时分别重画。我不知道该怎么做。

不明白如何确定所有订单的BU线?

 

你能告诉我如何写下它以节省资源并获得最新的价格吗?

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

还是像这样?

 SymbolInfoTick(symb,Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...
 
Vitaly Muzichenko:

你能告诉我如何写下它以节省资源并获得最新的价格吗?

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

还是像这样?

SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


第一个选项比较正确。在第二个选项中,你应该写这一行SymbolInfoTick(symb,Last_Tick); <<<<
 
Vitaly Muzichenko:

你能告诉我如何写下它以节省资源并获得最新的价格吗?

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

还是像这样?

SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


我想说这取决于OrdersTotal() 的大小和周期内价格变化的概率。

在我看来,直接在循环中获得新鲜数据是更正确的。

而且我认为额外的变量(在代码中强调)是绝对不必要的。

 
Alexey Viktorov:

文档中有一个例子。

也许更好的做法是在循环中浏览订单,只要下一个订单比上一个订单低,就选择它来进一步处理。因此,退出循环后,要删除的订单 将被选中

或者,你可以先保存它在循环中的订单列表中的位置,然后在退出循环后用循环中保存的索引选择它。

要同时设置高阶和低阶并不那么容易,如果
 
Sergey Gritsay:
第一个选项比较正确。 第二个选项应该写成SymbolInfoTick(symb,Last_Tick); <<<<

是的,我只是复制了它,没有注意到。

我想知道SymbolInfoTick 是否是放在循环里面的正确方式,如果需要放在那里,或者是否可以放在循环之前。用于追踪止损,可拉动网格达50个百分点。

 
Vitaly Muzichenko:

是的,我只是复制了它,没有注意到。

我在想,如果需要的话,SymbolInfoTick 是放在循环里面的正确方式,还是可以放在循环之前。用于追踪止损,可以拉动高达50个百分点的网格。

对于跟踪止损,当然最好是在周期前放一次。
 
Alexey Viktorov:

搞不清楚如何确定所有订单的BU线?

我知道如何确定BU,我需要在这个水平上画线
 
Alexey Viktorov:
对于跟踪止损来说,当然是在周期前一次更好。

我现在慢慢改写为5.我的意思是,价格可能变化很快,水平可能小于止损值,这将导致错误。我的意思是,价格可能会变化得非常快,水平会低于允许的止损水平,这将导致错误。

我理解,这个"SymbolInfoTick"的帽子是需要用来获取实际价格的?

 
通过比较价格解决的问题