mql5语言的特点、微妙之处以及技巧 - 页 133

 
Alexey Viktorov:
为什么?
已经试过了
 
Nikolai Semko:
已经试过了

但在这里

关于交易、自动交易系统和交易策略测试的论坛

mql5的特殊性,技巧和窍门

Nikolai Semko, 2019.04.03 22:33

是的,谢谢你,阿列克谢。我已经忘记了这个功能。以前见过,但从未使用过。

试过了。有些事情出了问题。它删除了它,但删除后,一切都冻结了。

我只是在计算指标 前的DrawSetup()函数中添加了一行代码,参数如下。

IndicatorRelease(handle);
handle=iMA(_Symbol,_Period,per1,0,MaMethod,PriceBase);
for(int i=0;i<N;i++) handle=iMA(_Symbol,_Period,per2,0,MaMethod,handle);

指标根本停止工作,我还不明白原因。

我绝对同意你的观点。它只是一个无用的玩具。


完全不是这样的。
 
Alexey Viktorov:

但在这里


根本不是这样的。
我以前也试过,由于不成功,我把自己的代码删除了。
 
你也可以尝试从埋得最深的那一个开始,把所有的手牌连起来放出去。
 
Andrey Khatimlianskii:
你也可以尝试释放一个链条中的所有手柄,从埋得最深的一个开始。

好吧,这是不可行的。或者,如果它确实起作用了,就会有一些刹车的作用。

void BuildMaFromMa()
  {
   static int h[];
   for(int i=0;i<ArraySize(h);i++) IndicatorRelease(h[i]);
   handle=iMA(_Symbol,_Period,per1,0,MaMethod,PriceBase);
   ArrayResize(h,N);
   if (N>0) h[0]=handle; 
   for(int i=0;i<N;i++)
     {
      handle=iMA(_Symbol,_Period,per2,0,MaMethod,handle);
      h[i]=handle;
     }
  }

如果你用IndicatorRelease 来记录这一行 那么一切都能正常工作,但否则就会出现一些刹车,我不明白发生了什么。

附加的文件:
 

关于交易、自动交易系统和测试交易策略的论坛

指标:MaFromMa

Nikolai Semko, 2019.04.04 01:00

我想比较递归和迭代的性能。

事实证明,递归的速度是原来的两倍多...

可能是因为堆栈的速度比较快...

这是一件了不起的事情。我预期会有相反的效果。))

#define  size 1000000
uint sum1=0,sum2=0;
int i;
int X[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   ArrayResize(X,size);
   for(i=0;i<size;i++) X[i]=rand();

   ulong t=GetMicrosecondCount();
   i=0;
   while(i<size) { sum1+=X[i]; i++;}
//Recursion();
   ulong t1=GetMicrosecondCount()-t;

   t=GetMicrosecondCount();
   i=0;
//while(i<size) { sum1+=X[i]; i++;}
   Recursion();
   ulong t2=GetMicrosecondCount()-t;
   Print("время выполнения цикла    = "+string(t1)+" , контрольная сумма = "+string(sum1));
   Print("время выполнения рекурсии = "+string(t2)+" , контрольная сумма = "+string(sum2));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Recursion()
  {
   sum2+=X[i];
   i++;
   if(i<size) Recursion();
  }
//+------------------------------------------------------------------+
2019.04.03 19:06:40.776 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1667 , контрольная сумма = 3510404212
2019.04.03 19:06:40.776 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 697 , контрольная сумма = 3510404212
2019.04.03 19:06:41.697 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1653 , контрольная сумма = 3492310620
2019.04.03 19:06:41.697 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 699 , контрольная сумма = 3492310620
2019.04.03 19:06:42.549 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1529 , контрольная сумма = 3510953577
2019.04.03 19:06:42.549 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 696 , контрольная сумма = 3510953577
2019.04.03 19:06:43.332 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1559 , контрольная сумма = 3512212419
2019.04.03 19:06:43.332 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 698 , контрольная сумма = 3512212419
2019.04.03 19:06:44.098 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1707 , контрольная сумма = 3497178596
2019.04.03 19:06:44.098 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 472 , контрольная сумма = 3497178596
2019.04.03 19:06:44.839 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 2088 , контрольная сумма = 3485051380
2019.04.03 19:06:44.839 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 482 , контрольная сумма = 3485051380
2019.04.03 19:06:45.538 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1612 , контрольная сумма = 3487817581
2019.04.03 19:06:45.538 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 448 , контрольная сумма = 3487817581
2019.04.03 19:06:46.397 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1742 , контрольная сумма = 3475121003
2019.04.03 19:06:46.397 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 497 , контрольная сумма = 3475121003
2019.04.03 19:06:47.262 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1701 , контрольная сумма = 3485556615
2019.04.03 19:06:47.262 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 701 , контрольная сумма = 3485556615

 

你们有没有一个成熟可靠的MT5的手数计算功能,不设止损

分享...

 
在优化过程中,你可能会在测试员日志中遇到以下信息
Tester  OnTesterInit failed. Optimization cannot be started.


从这个信息中几乎不可能了解原因,因为根本就没有提到终端日志。这就是你需要寻找原因的地方。


下面是这样一个EA的例子

input int Range = 0; // 1..9

int Tmp = 1 / Range;

void OnTesterDeinit() {}

double OnTester()
{
  return(Tmp);
}


专家顾问在Range不达到零的范围内进行优化。但与此同时,优化工作也失败了。

原因是专家顾问的框架模式总是以EX5中硬性规定的输入参数启动。在这种情况下,帧模式的结果是除以零

如果OnTesterDeinit被从源代码中删除,优化程序的运行将不会有任何问题。


如果在这种情况下,TesterJournal能参考TerminalJournal,那就更好了。否则就不可能总是了解(在优化过程中调试是不可用的),发生了什么。

 

你可能会遇到一种情况,即EA不在图表上启动。

左边是将EA拖动到图表上时常用的光标。右边的是我们的案例。


日志中不会有任何条目。一般来说,条形光标是这类图表的唯一视觉标识。


如果你保存tpl模板,这些图表将以一行字来区分

tester=1

这可能是识别图表类型的唯一程序化选项。这是个框架图。


因此,如果你想保护自己免受自动交易的影响,你可以只用这些图表来工作。

 

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

Nikolai Semko:

如果符号名称以点开始(或包含点),合成工具公式会出现错误 "未知解析错误"。

斯拉瓦, 2019.04.19 06:08

如果一个字符名称 包含一个句号、一个破折号或其他你不理解的东西("RTS-12.19 "怎么样?),那么这个名称必须用撇号包围起来