开放项目 - 内部测试器-优化器

 
我有一个想法,以指标的形式写我自己的测试器。要求--以最小的返工,专家顾问 必须适用于标准和自写的测试器。这是通过在标准常量和函数中添加前缀my 来实现的。优化也是可以接受的。
模板写好了,有必要通过写自己的函数来实现交易功能。
谁善于此道--加入我们。通过数组操作实现交易功能。我们还需要一位在图表上绘制对象的专家--用箭头/图画来表示开仓、止损和获利水平。
此外,我们还需要在一个文件中组织订单历史和数字系列的输出,以便在Excel中打开图表。总的来说,一切都很严肃 :)

我在原则上已经想到了一切,但我不是一个普遍主义者。

如果有人愿意,我可以建议一些想法。此外,在某些性能优化的情况下,自制的变体有可能会超过内置的变体。

//+------------------------------------------------------------------+
//|                                                   SelfTester.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 DarkBlue
#property indicator_color3 LawnGreen
//---- input parameters
extern int       mySpread=4;
extern int       BeginYear=2002;
extern int       BeginMonth=1;
extern int       BeginDay=1;
extern string    ReportName="report";
extern int       Param1=8;
extern int       Param2=13;
extern double    myDepo=10000.0;
extern double    mylots=0.1;
extern int       myTakeProfit=100.0;
extern int       myStopLoss=80.0;
extern int       myTrailingStop=20;
//---- buffers
double myBalance[];
double myEquity[];
double myProfit[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,myBalance);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,myEquity);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,myProfit);
   double TradeOrdersArray[100][14];
   double ClosedOrdersArray[2000][14];
   int myOrdersTotal=0;
   double myOrderOpenPrice=0.0;
   double myOrderLots=0.0; 
   string myOrderComment=""; 
   int myOrderMagicNumber;
   int myOrderOpenTime;
   double myOrderProfit=0.0;
   double myOrderStopLoss=0.0;
   double myOrderTakeProfit=0.0;
   int myOrderTicket;
   int myOrderType; 

   int myOP_BUY=0;
   int myOP_SELL=1;
   int myOP_BUYLIMIT=2;
   int myOP_BUYSTOP=3;
   int myOP_SELLLIMIT=4;
   int myOP_SELLSTOP=5;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+




 
我不知道出现了什么样的胡言乱语。如果有人想要,我会在另一个论坛的某个地方发布。
 
2 罗什
我不太清楚你想用这个预设来表达什么。在我看来,你想得到一套能同时计算利润和在图表上标记进入/停止点的函数?而决策引擎对他们每个人来说都会不同?

还有一些提示。
extern int       BeginYear=2002


最好由

extern string       BeginDate="2002.01.01 18:00"


- 有可能立即用一种类型的结构来工作

Time[i] > StrToTime(BeginDate)



是的,可能还有像这样的事情

double myOrderOpenPrice=0.0;
double myOrderLots=0.0; 


也会更方便地存储为

#define LOTS 0;
#define OPEN_PRICE 1;

double MyOrder[2] = {0.0, 0.0};
.....................
MyOrder[OPEN_PRICE] = Open[i];
.....................
 


但这只是一些小事...

 
菲林,你已经超出了你的深度。你为什么要定义常数
#define LOTS 0;

这是测试器的输入变量。

这是从哪里来的?

#define OPEN_PRICE 1;


你是否注意到,所有这些变量(用函数定义可能更好)

double myOrderOpenPrice=0.0;
double myOrderLots=0.0; 

是内置的mql-4的双胞胎。我写道,目标是让我们的测试人员和嵌入式测试人员以最少的返工了解
EA。

决策引擎是EA代码。而且它将很容易被整合到这个EA中。而测试器的引擎是函数,我建议
"覆盖"--即我们采取标准的内置函数,例如OrderSend(),并使用它,写一个完全类似的函数--myOrderSend()。以此类推。
我今晚会写这个函数,让它更清晰。

你必须更彻底,更彻底... :)

 
我不知道出现了什么样的胡言乱语。如果有人想要,我就把它贴在另一个论坛的某个地方。

这是不久前出现的。当从MQL传输文本时,俄文字母以这种方式出现。FronPage对俄罗斯字母也是如此。
 
我以为在我复制和粘贴到指标文件时,草书字母会被转换回俄文字母。事实证明并非如此。我今晚会在另一个论坛上发布
我将发布链接。
 
罗什。
你就不能擦掉这些垃圾吗?
这是不可能看的。
这一定是论坛、主机或MT在复制带有俄罗斯文字的脚本时出现的故障。
 
以这种方式进行测试是可能的。而且这已经很不错了。但是,不幸的是,你不会得到普遍主义。
我已经花了几个星期的时间进行这种测试。乍看之下,这似乎很简单。你得到一套标准功能就可以走了。
但这套东西只不过是一个种子:开盘/平仓,盈亏计算,画箭头/破折号。
最主要和最重要的是开仓/平仓的算法,比如说,在一些专家顾问中已经描述过了。你不能拖放这种算法
在其全部内容中。你只能分批进行。然后跟踪所产生的代码的 "无错误"...另外,与这个过程相关的各种曲折......。
各种各样的修补工作...简而言之,我们最终要第二次就同一主题从头开始编写一个单独的程序。做完这一切后,在1秒钟内你会得到
要么是不满意的结果,要么是箭头在错误的地方,或者在错误的地方关闭。然后你再回到程序文本中去,再试一次...
你的大脑工作,而不是一个调试器,你变成了一个监视器,有一段时间...最终,在第三天,测试运行
似乎很好,但你变得相信这个策略 "不好"。而在这一点上,几乎就是这样了!因为以这种方式测试下一个策略
没有欲望去测试下一个策略。我为什么要写这些呢?这个想法很吸引人。而在原则上,它是有效的。但是,相信我,这不是什么
这是不可能的。如果我们谈论的是一个模板,它必须是一个非常基本的模板,也就是一个非常体面的、经过深思熟虑的设计。一般来说。
该方案不是最简单的。如果有人在读完这部著作后,不会在所描述的框架内折断一根矛,即用这个我的
如果有人利用我的一点,但仍然是实际的经验,不浪费时间地继续前进,那么有些事情可能会成功。那么所有正在受苦的人
(包括我自己)会凑钱为作者建一个纪念碑。:)
 
好的,我晚上会做一个功能(如约),一切都会更清晰。目前,我的观点是,如果有一个设计合理的测试器,就有可能做到
使用本地的专家顾问系统,并进行一些外观上的修改。第一个 "受害者 "是MACD_sample.mq4 .
 
Rosh,<br / translate="no">这些垃圾不能被擦掉吗?
这是不可能看的。
这一定是论坛、主机或MT在复制带有俄罗斯文字的脚本时出现的故障。


"垃圾 "被删除。程序员可能知道写(评论)有多无聊 :) 。

有谁知道--我已经根据标准正确定义了这些常数?
  int myOP_BUY=0;
   int myOP_SELL=1;
   int myOP_BUYLIMIT=2;
   int myOP_BUYSTOP=3;
   int myOP_SELLLIMIT=4;
   int myOP_SELLSTOP=5;


意味着具体的价值。

 
我是个傻瓜,为什么要重新发明车轮。让我们把事情简单化。

   int myOP_BUY=OP_BUY;
   int myOP_SELL=OP_SELL;
   int myOP_BUYLIMIT=OP_BUYLIMIT;
   int myOP_BUYSTOP=OP_BUYSTOP;
   int myOP_SELLLIMIT=OP_SELLLIMIT;
   int myOP_SELLSTOP=OP_SELLSTOP;


但是,我事先不知道编译器的反应,它是否会让指标主体中的交易常量 通过?
最有可能的是,它将会。