Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithmic trading 回溯测试时的空白结果_Algorithmic Trading_Mql4_Forex - Fatal编程技术网

Algorithmic trading 回溯测试时的空白结果

Algorithmic trading 回溯测试时的空白结果,algorithmic-trading,mql4,forex,Algorithmic Trading,Mql4,Forex,我是MQL4代码的新手 我来自C++背景,我正在努力学习MQL4语言和约定。 我写了一个简单的专家顾问,这是我有史以来的第一次。它可以编译,但是,当我尝试测试它时,它没有结果。我附加代码以更好地说明我正在尝试做的事情: //+------------------------------------------------------------------+ //| MyFirstExpert.mq4

我是MQL4代码的新手

<>我来自C++背景,我正在努力学习MQL4语言和约定。 我写了一个简单的专家顾问,这是我有史以来的第一次。它可以编译,但是,当我尝试测试它时,它没有结果。我附加代码以更好地说明我正在尝试做的事情:

//+------------------------------------------------------------------+
//|                                                MyFirstExpert.mq4 |
//|                                                  Leonardo        |
//|                            http://investinmarkets.altervista.org |
//+------------------------------------------------------------------+
#property copyright "Leonardo "
#property link      "http://investinmarkets.altervista.org"
#property version   "1.00"
#property strict
input int BarCount = 3;
      int Ticket   = 0;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() { 
     int    BarCountTemp = BarCount + 1;
     double bars[];
     ArrayResize( bars, BarCountTemp );
     for ( int i = 0; i < BarCountTemp; i++ ) {
           bars[i] = Close[i + 1];
     }
     int   i = 0;
     bool  is_p;
     do
     {
        if ( bars[i] > bars[i+1] && i < BarCountTemp ) is_p = true;
        else is_p = false;
        i++;
     }
     while ( is_p );

     if ( is_p == true && Ticket == 0 ) {
          Ticket = OrderSend(_Symbol,OP_SELL,0.1,Bid,0,0,0,"Sell Order Custom",110);
          Alert("Sell order opened to match found.");
          Comment("Sell order opened #"+Ticket+".");
     }
     if ( Ticket != 0 ) {
          bool select = OrderSelect(Ticket,SELECT_BY_TICKET);
          if ( Close[1] > Close[2] ) {
               bool close = OrderClose(Ticket,OrderLots(),Ask,0,clrGreen);
               Alert("Sell order closed.");
               Comment("Sell order closed #"+Ticket+".");
               Ticket = 0;
          }
     }
  }
//+------------------------------------------------------------------+
我只想简单地计算用户输入的条数,然后进行检查:例如,如果3条条都是正数,则打开一个销售订单,目前仅此情况。如果开盘,下一栏检查是否仍为正值,如果未成交

我总是得到空白的结果

提前谢谢你

欢迎来到MQL4世界,莱昂纳多 让我们回顾一下语法:

for ( int i = 0; i < BarCountTemp; i++ ) {
      bars[i] = Close[i + 1];
     }
     int   i = 0;
     bool  is_p;
     do
     {
        if ( bars[i] > bars[i+1] && i < BarCountTemp ) is_p = true;
        else is_p = false;
        i++;
     }
     while ( is_p );
最后:为可能出现错误的情况包括异常处理程序
谢谢@user3666197!谢谢你的回答。我试图通过MQL4中C++背景下的“可以/不能正确”来练习,但比我预期的要简单。此外,我非常喜欢MQL4中的代码组织方式。再次感谢你!很高兴听到你说,莱昂纳多,你越喜欢这个密码。是的,在低强度HFT中,必须尽可能减少纳秒,因此代码纯度和值的重复使用非常有帮助。在运行时,要尽可能降低处理延迟。有些功能甚至可以更好地从MQL4到GPU,到云/网格,以便更快地实现。我同意。我已经在许多大学学习了多年,这就是我希望实际做的事情!我很高兴能找到一个有时在对StackOverflow感到困惑时能提供帮助的人!再次感谢你!
bool is_p = True;                          // FYI: FALSE if not initialised
                                           // WARNING: "New"-MQL4 has changed variable visibility-scope to be limited just to the innermost syntax-construct and variables easily "cease" exist outside that syntax-construct boundary ... for(){bool is_p ...visible...} ...invisible...
for ( int  i = 0;                          // .SET
           i < BarCountTemp;               // .TEST: [**]
           i++ ) {                         // .INC
           if (  Close[i+1] > Close[i+2]   // avoid TimeSeries' replica(s)
           // && i          < BarCountTemp // ALWAYS TRUE [^**]
              ) continue; // ---------------------------- LOOP-^
           else {
                is_p = False;
                break;    // ---------------------------- EXIT-v
}
int   Ticket =  EMPTY;                        // Rather initialise as = EMPTY;

if (  is_p   == True
   && Ticket == EMPTY                         // un-ambiguous meaning
   ) {
      Ticket =  OrderSend( _Symbol,           // .SYM
                           OP_SELL,           // .OP
                           0.1,               // .LOTs check sizing, MarketInfo()
                           Bid,               // .PRICE
                           0,                 // .SLIPPAGE
                           0,                 // .SL
                           0,                 // .TP
                          "Sell Order Custom",// .COMMENT
                           110                // .MAGNUM
                           );
      if (  Ticket == EMPTY ){                // EXC. HANDLER
                  ...
      }
      else {
            Alert(   "Sell order opened to match found." );     // .NOP if isTesting()
            Comment( "Sell order opened #" + Ticket + "." );    // .GUI is visible????
      }
}
 if (  Ticket   != EMPTY               // TEST 1st,
    && Close[1] >  Close[2]            // TEST 2nd, prevent dbPool-ops, if not True
    ) {
             bool select = OrderSelect( Ticket, SELECT_BY_TICKET );
             if (!select ){           // EXC. HANDLER
                  ...
             }
             bool close  = OrderClose(  Ticket,
                                        OrderLots(),
                                        Ask,
                                        0,
                                        clrGreen
                                        );
             if (!close ){           // EXC. HANDLER
                  ...
             }
             Alert(   "Sell order closed." );
             Comment( "Sell order closed #" + Ticket + "." );
             Ticket = EMPTY;                            // .SET EMPTY
       }
 }