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

 
Maxim Kuznetsov:
感觉原文来自一个平行宇宙,被google-translate翻译了两次,然后被Alice重述了一遍 :-)

好的。有一个函数可以用来寻找最后一批。它被称为FindLastLots。 但我想做一个函数,不只是搜索最后一批,而是在它的帮助下你可以改变地段。也就是说,如果extern lots = 0.01;我想用这个 函数将lot = 0.01,比如说,改为0.04。而在这里,我需要帮助,以了解如何能在一般情况下实现它。

double FindLastLots()
  {
   double oldlots=0;
   int oldticket;
   int ticket=0;

   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            oldticket=OrderTicket();
            if(oldticket>ticket)
              {
               oldlots= OrderLots();
               ticket = oldticket;
              }
           }
        }
     }
   return(oldlots);
  }
Общие принципы - Торговые операции - Справка по MetaTrader 5
Общие принципы - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит...
 
Corvin85:

...

将地段=0.01,比如说改为0.04,不使用乘法。

...

嗯...如果乘法是一个问题,你可以通过加法得到想要的结果。

 
Alexey Viktorov:

嗯...如果乘法是一个问题,你可以通过加法得到你想要的结果。

-:)

不言而喻
 
我是否可以在这个函数中加入一个while循环,这样我就可以在选定的订单 中逐一浏览外部变量?但我怎样才能拉出 "返回值 "并使用它?
 
Alexey Viktorov:

嗯...如果乘法有问题,你可以通过加法得到所需的结果。

我理解你的讽刺,但在乘法或计算的情况下,应该有多少个乘法器就有多少个外部变量Lots。这不是一个摆脱困境的办法。虽然我说实话,我也想过......

 
你好!!我正在做一个基于M5时间框架的EA....,但信号被触发(例如在9:33,12:11)等.....,你能告诉我,如果信号是在当前的蜡烛 上,如何在新的蜡烛 上开单?
 
Corvin85:

我理解你的讽刺,但在乘法或计算的情况下,应该有多少个乘法器就有多少个外部变量Lots。这不是一个摆脱困境的办法。虽然我说实话,我也想过这个问题。

我现在不记得细节了,但我被命令做一些复杂的计算Lots的工作。因此,找到了一个计算公式,并据此进行了计算。

也许你最好详细说明一下顺序?那么有人可以建议这个公式。

 
Alexey Viktorov:

我现在不记得细节了,但我被命令在计算这批货时做一些精心设计的工作。其结果是一个用来计算的公式。

也许你最好详细地说明一下这个顺序?那么有人可以建议这个公式。

#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lot  = 0.01;
extern double Lot2  = 0.02;
extern double Lot3  = 0.05;
extern double Lot3  = 0.07;
//----------- И так далее-------//

洛特有几个外部变量。如果一个订单被止损关闭,一个新的订单将以外部变量中指定的新手数被打开。(也许,这就是我们最初应该写的方式)。我只是不知道如何在代码中正确地书写它。而且正如我在上面写的,没有乘法或计算,没有外部的乘法器会有帮助。我们需要以某种方式通过已关闭订单的数据...

 
Corvin85:

有几个外部变量Lot。如果一个订单被StopLoss关闭,那么一个新的订单将以新的手数打开,该手数在外部变量中指定。(也许,这句话最初应该是这样写的)而这里有一个小插曲。我只是不知道如何在代码中正确地书写它。而且正如我在上面写的,没有乘法或计算,没有外部的乘法器会有帮助。我们需要以某种方式从已关闭的订单中检索数据...

当打开一个订单时,在注释中写上规则/变量的编号。

然后当你检查历史记录时--获取这个数字,在它上面加1,得到一个新的规则编号

 
Corvin85:

有几个外部变量Lot。如果一个订单被StopLoss关闭,那么一个新的订单将以新的手数打开,该手数在外部变量中指定。(也许,这句话最初应该是这样写的)而这里有一个小插曲。我只是不知道如何在代码中正确地书写它。正如我在上面写的,没有乘法或计算,没有外部乘法器会有帮助。我们必须以某种方式查看已关闭订单的数据。

用这段代码做实验,也许这就是你需要的东西

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict

input double Lot_01  = 0.1;
input double Lot_02  = 0.2;
input double Lot_03  = 0.3;
input double Lot_04  = 0.4;
input double Lot_05  = 0.5;
input double Lot_06  = 0.6;
input double Lot_07  = 0.7;

double GetNextLot(const double last_lot)
{
   if(last_lot>=Lot_07) return(Lot_07);
   if(last_lot>=Lot_06) return(Lot_07);
   if(last_lot>=Lot_05) return(Lot_06);
   if(last_lot>=Lot_04) return(Lot_05);
   if(last_lot>=Lot_03) return(Lot_04);
   if(last_lot>=Lot_02) return(Lot_03);
   if(last_lot>=Lot_01) return(Lot_02);
   return(Lot_01);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   Print(Lot_01," ---> ",GetNextLot(Lot_01));
   Print(Lot_02," ---> ",GetNextLot(Lot_02));
   Print(Lot_03," ---> ",GetNextLot(Lot_03));
   Print(Lot_04," ---> ",GetNextLot(Lot_04));
   Print(Lot_05," ---> ",GetNextLot(Lot_05));
   Print(Lot_06," ---> ",GetNextLot(Lot_06));
   Print(Lot_07," ---> ",GetNextLot(Lot_07));
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
void OnTick()
  {

   
  }
//+------------------------------------------------------------------+

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.7 --> 0.7

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.6 --> 0.7

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.5 ---> 0.6

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.4 --> 0.5

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.3 ---> 0.4

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.2 --> 0.3

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.1 ---> 0.2

在我的函数GetNextLot()中,你输入最后一个平仓订单的数量,它将返回Lot_XX设置的下一个值。

这段代码的唯一限制是,很多设置应该是升序的 - 我认为这段代码简单明了,你可以根据你的需要修改它。

原因: