初学者的问题 MQL5 MT5 MetaTrader 5 - 页 730

 
Artyom Trishkin:
酒吧[]
如果可以,请给我看一下代码。
 
Vitaly Muzichenko:

称其为Bars,编译器把它骂到天上去了。你有没有测试过这种设计,或者只是假设它应该工作,还是我做错了什么?

是的,我的错误。命名吧。一般来说,我们的想法是给变量起一个有表现力的名字,那么你就不需要创建额外的变量,这些变量的存在并不总是合理的。
 
Vasiliy Sokolov:
是的,我的错误。命名吧。一般来说,我们的想法是给变量起一个有表现力的名字,那么你就不需要创建额外的变量,这些变量的存在并不总是合理的。

原因不是为了表达什么,而是为了在使用它们时缩短代码。

if(open1<close1 && close2>close3 && close1>close2 &&

其余的以同样的方式,否则线的长度会 增加

谢谢大家的澄清!

 
Vitaly Muzichenko:

我打电话给他们不是为了表达什么,而是为了在与他们合作时减少代码。

if(open1<close1 && close2>close3 && close1>close2 &&

其余的以同样的方式,否则线的长度会 增加

谢谢大家的澄清!

如果你想把代码减少到最低限度,可以直接引用数据阵列

//+------------------------------------------------------------------+
//|                                                       test09.mq5 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"

MqlRates bars[]; // массив для хранения данных цен OHLC
int start_bar=0; // с какого бара копируем
int count_bar=4; // сколько баров копируем
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArraySetAsSeries(bars, true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(CopyRates(Symbol(),PERIOD_CURRENT, start_bar, count_bar, bars)<count_bar) return;
  
   if(bars[1].open<bars[1].close && bars[2].close>bars[3].close && bars[1].close>bars[2].close)
   {
  
   }
  }
//+------------------------------------------------------------------+

...
 

下午好!

在卸载(删除)专家顾问时,在哪里以及如何正确删除已下订单和未结头寸?如果这不难,请分享一个例子。

谢谢你。

 

其中一个EA有一些奇怪的胡说八道。正常测试EA,点击 "运行单个测试 "只运行一个,第一次。然后,当你点击单个测试或点击优化中的任何一行,它就会显示在日志中。

2017.02.08 13:31:05.165 测试人员无法获得4234087422336号通行证的输入。

2017.02.08 13:31:34.829 测试人员无法获得4076312468706号通行证的输入。

2017.02.08 13:31:47.973 测试员无法获得通行证1004506640527的输入。

其他EA表现正常。会是什么呢?

 

先生们,记录一个巨大的10000*10000矩阵

      if(count==0)
        {
         //--- запишем файл
         ResetLastError();
         int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
         //---
         if(handle!=INVALID_HANDLE)
           {
            for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
              {
               for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);
              }
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError()," handle ",handle);
        //---
         count=1;
        }

你认为这种算法在速度方面的效率如何?

因为当矩阵是1000*1000时,速度是几秒钟,当增加到10000*10000时,系统就会上升。

 
Top2n:

先生们,记录一个巨大的10000*10000矩阵

      if(count==0)
        {
         //--- запишем файл
         ResetLastError();
         int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
         //---
         if(handle!=INVALID_HANDLE)
           {
            for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
              {
               for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);
              }
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError()," handle ",handle);
        //---
         count=1;
        }

你认为这种算法在速度方面的效率如何?

因为当矩阵是1000*1000时,速度是几秒钟,当增加到10000*10000时,系统就会上升。

如果不允许超过四维的数组,你怎么能得到这样的矩阵?
是否有任何混淆?
Документация по MQL5: Операции с массивами
Документация по MQL5: Операции с массивами
  • www.mql5.com
Операции с массивами - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
如果不允许超过四维的数组,怎么可能得到这样的矩阵呢?
难道没有任何混淆吗?

10000 x 10000不是一个二维矩阵吗?

double arr[10000][10000];

和所有这些...

 
Alexey Viktorov:
如果不允许超过四维的数组,怎么可能得到这样的矩阵呢?
是否有任何混淆?
是的,它是二维的,所以我说得不对,我说它是一个数组,不是一个矩阵。矩阵是否意味着多维性?