多币种顾问问题 - 页 4

 

好的,VassaV,知道了 !

下面是另一个问题。在通常的代码中,当一个位置被打开 时,它被显示出来。

//---------проверяем условие на покупку----------------------------
  if   ( бла-бла-бла  )
   {
  Lots=GetSizeLot(); 
  ticket=OrderSend("GBPUSD",0,Lots,Ask,Slippage,Bid-SL_long*Point,Ask+TP_long*Point,
                                                         "мульти",MagicNum,0,CLR_NONE);
  if    (ticket<0) { Print("Ошибка открытия ордера BUY #", GetLastError()); return (0); }  
 ... ... ...

这里我们有 "门票 "价值。在我的EA中,该计划有些不同,像这样。

if (GBP) {     //если  "выключатель" включен
if (!ExpertOrder(MagicGBP)) { //если ордеров по паре GBPUSD нет
 
//-------Проверяем условие на покупку-------------
if  (    бла-бла-бла     )
    {  
  //---- Цикл открытия ордера  -------------------------------------------                      
int Cnt=1;
  while (Cnt <= 5) 
  { //-----покупаем--------------
    Lots=GetSizeLot();
   if (OrderSend("GBPUSD",OP_BUY,Lots,ask_GBP,3,bid_GBP - sl_GBPUSD_long*point_GBP,
           ask_GBP+tp_GBPUSD_long*point_GBP,"M_1", MagicGBP, 0, Blue) > 0)  break;    
    else 
{ Print ("Ошибка открытия Buy #", ErrorDescription( GetLastError() ),
                                                  " попытка ", Cnt);
                               
        if (Cnt==5) return(0);  //если за 5 попыток не закрыли - выходим
        Cnt++;
        Sleep(15000); // ждём 15 секунд
      }   
    }
  }

但我也需要 "票 "的价值!对于这一对。我不可能一上午都在做这个!谁知道呢 - 请告诉我怎么做?

 

对所有希望得到建议但没有时间回应的人来说,谢谢你们!

我想我自己已经解决了(今天下午)。它是这样的。

 //---- Цикл открытия ордера  -------------------------------------------                      
int Cnt=1;
  while (Cnt <= 5) 
  { //-----покупаем--------------
    Lots=GetSizeLot();
   ticketGBP = OrderSend("GBPUSD",OP_BUY,Lots,ask_GBP,3,bid_GBP - sl_GBPUSD_long*point_GBP,
           ask_GBP+tp_GBPUSD_long*point_GBP,"M_1", MagicGBP, 0, Blue);
         if (ticketGBP > 0)  break;    
    else 
{ Print ("Ошибка открытия Buy #", ErrorDescription( GetLastError() ),
                                                  " попытка ", Cnt);
                               
        if (Cnt==5) return(0);  //если за 5 попыток не закрыли - выходим
        Cnt++;
        Sleep(15000); // ждём 15 секунд
      }
 

在锦标赛上测试专家顾问5分钟的条件,在学期结束前只有3个星期,结果对每个人来说几乎都是BEGINNING !

个别而言,我的专家顾问是在12个月的历史上对一个货币对进行测试,--不超过3-4分钟。它对所有蜱虫都有效。

但当我把几个EA合并成一个多币种EA时,测试时间就会增加到7-10分钟!

而且我禁用了所有的配对,除了我运行的一个。

我想请专业人士(不仅仅是)分享他们的经验和减少测试时间的方法。

专家顾问结构 如下。

 
//---- input parameters---------
 
ЗАДАЕМ ВНЕШНИЕ ПАРАМЕТРЫ ПО КАЖДОЙ ПАРЕ
 
int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
 
//*********************************************************************
 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПЕРВОЙ ПАРЕ 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ВТОРОЙ ПАРЕ
... ... ... ...
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПОСЛЕДНЕЙ ПАРЕ
 
 =========================================================
 
int Orders=OrdersTotal ();     //получаем кол-во открытых ордеров
if (Orders<3)                 //если  открытых ордеров <3
  { 
if (выключатель 1 вкл) {ОТКРЫВАЕМ ПЕРВУЮ ПАРУ } 
if (выключатель 2 вкл) {ОТКРЫВАЕМ ВТОРУЮ ПАРУ } 
... ... ... 
if (выключатель N вкл) {ОТКРЫВАЕМ ПОСЛЕДНЮЮ ПАРУ }  
  }
//========================================================================
for (int x=0; x<OrdersTotal(); x++)                                             {
    if (OrderSelect(x, SELECT_BY_POS, MODE_TRADES)) 
{       
if (UseTrailing 1) - ТРЕЙЛИНГ ПЕРВОЙ ПАРЫ
... ... ...
if (UseTrailing N) - Трейлинг последней пары
}
//======================================================================
   return(0);
  }
 
rid:

在结束前的短短3周内,在锦标赛上测试专家顾问5分钟的条件,对每个人来说几乎都是一个开端!

我的专家顾问单独在一个货币对上对12个月的历史进行测试,不超过3-4分钟。它对所有蜱虫都有效。

但当我把几个EA合并成一个--多币种EA时,测试时间就会增加到7-10分钟!

我禁用了所有的配对,除了一个--我正在测试。

我想请专家(不仅仅是)分享他们减少测试时间的方法和途径。

专家顾问的结构 是这样的。

 
//---- input parameters---------
 
ЗАДАЕМ ВНЕШНИЕ ПАРАМЕТРЫ ПО КАЖДОЙ ПАРЕ
 
int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
 
//*********************************************************************
 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПЕРВОЙ ПАРЕ 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ВТОРОЙ ПАРЕ
... ... ... ...
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПОСЛЕДНЕЙ ПАРЕ
 
 =========================================================
 
int Orders=OrdersTotal ();     //получаем кол-во открытых ордеров
if (Orders<3)                 //если  открытых ордеров <3
  { 
if (выключатель 1 вкл) {ОТКРЫВАЕМ ПЕРВУЮ ПАРУ } 
if (выключатель 2 вкл) {ОТКРЫВАЕМ ВТОРУЮ ПАРУ } 
... ... ... 
if (выключатель N вкл) {ОТКРЫВАЕМ ПОСЛЕДНЮЮ ПАРУ }  
  }
//========================================================================
for (int x=0; x<OrdersTotal(); x++)                                             {
    if (OrderSelect(x, SELECT_BY_POS, MODE_TRADES)) 
{       
if (UseTrailing 1) - ТРЕЙЛИНГ ПЕРВОЙ ПАРЫ
... ... ...
if (UseTrailing N) - Трейлинг последней пары
}
//======================================================================
   return(0);
  }

它的测试速度很慢,主要原因是指标

它们在这个结构中是不可见的,但你很可能有它们,否则它们最多需要一分钟的时间来测试。

指标必须被改变或移到EA的代码中。

 

洛基。

我对你的理解正确吗?

我的指标是我设置变量的地方。而显然,他们

double ЗАДАЕМ ПЕРЕМЕННЫЕ (индикаторов) ПО ПЕРВОЙ ПАРЕ

也许应该把它移到里面的

if (выключатель 1 вкл) {ОТКРЫВАЕМ ПЕРВУЮ ПАРУ }

对每一对进行相应的?

 
Prototype-IX 为例,看一看。一个多货币专家顾问的例子。

它允许你在12种货币对中的任何一种上进行测试,并在多个时间段进行测试。
15:18:05 ProtoType-IX输入: EMN=10000; Slippage=3; RiskDelta=5; PeriodWPR=8; CriteriaWPR=25; ATRPeriod=40; kATR=0.5; ZeroBar=8; MinTargetinSpread=5; TP_SL_Criteria=2; MaxOpenedOrders=3; MaxOrderSize=5; <br / translate="no"> 15:18:05 2006.10.17 09:38 ProtoType-IX EURUSD,M15: indexPeriod=2 PeriodTesting=15 Symbol index=3 SymbolTesting=EURUSD
15:18:05 2006.10.17 09:38 NRTR_GATOR EURUSD,M15:加载成功
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,M30:加载成功
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,H1:加载成功
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,H4:加载成功
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,Daily:加载成功。
15:18:09 2007.01.02 00:00 NRTR_GATOR EURUSD,M30: 注意,趋势未定义。从4月底开始的酒吧
15:18:09 2007.01.02 00 00:00 NRTR_GATOR EURUSD,M30: 警告!趋势没有被定义,它不能被定义。
15:18:09 2007.01.02 00:00 NRTR_GATOR EURUSD,H1: 警告!趋势没有被定义,它不能。从1的末尾开始的酒吧
15:18:09 2007.01.02 00:00 NRTR_GATOR EURUSD,H1: 警告!趋势没有被定义,它不能被定义。
......................................

15:18:23 2007.08.17 22:17 测试员:止损#242在1.3483(1.3483 / 1.3485)。
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,Daily: 删除
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,H4: 已删除
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,H1: 已删除
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,M30: 已删除
15:18:23 2007.08.17 22:59 ProtoType-IX EURUSD,M15: 测试完毕


在 "Every ticks "模式下,对15分钟进行测试需要18秒。
 

感谢那些回答问题的人。事情正在逐渐明朗化。 把火鸡塞进了屋里。而现在已经达到了极限。

Rosh,--已经尝试了十几次来接近你所说的专家。但是......每次我退缩的时候......。以我微薄的知识,我仍然无法掌握代码和它的结构。我很困惑,不太清楚从哪里开始,如何安排它的研究。 有许多不确定因素,我不能一下子搞定所有的事情。我开始了解一切,很快我就停下来思考--我从哪里开始,为了什么......。

借此机会,我有一个关于 "创建专家顾问的例子 "的问题^

 
klerk:
多币种专家顾问的原理大致如下。
1.在计算指标时要指定具体货币和时间间隔,例如:iRSI("GBPUSD",60,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i); //但这里有一个错误
2.使用MarketInfo获得价格、点数等。
3. 使用iLow(...)而不是Low[0],例如
并适用于所有货币对。
好运。
唯一不方便的是,所有交易的符号必须有其时间框架的开放图表。

如果图表没有打开,或者打开的时间段与使用的时间段不同,你必须不断执行

检查每一个喷嚏 - 甚至iRSI可能不工作...直到终端复位...

尊敬的 - S.D.
 

在网上,我在专家顾问中(在指数中)对所有货币对设置了timef=1分钟(以检查性能)。

我把它放在第一对的图表上,时间为1分钟。但在其他的EA对上,时间框架往往是不同的。尽管如此,EA对所有的交易都是以时间-分钟为单位进行操作的,就像它在代码中实现的那样!

或者是我没有正确理解你的意思?

 
klerk:
多币种专家顾问的原理如下。
1.在计算指标时指定具体货币和时间间隔,例如:iRSI("GBPUSD",60,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i); //但这里有一个错误
2.使用MarketInfo获得价格、点数等。
3.使用iLow(...)而不是Low[0],例如
,并
在所有货币对上写入。
好运。


请你告诉我,替换的结构是否正确。

H=High[iHighest("USDJPY", PERIOD_H4, MODE_HIGH, 50, 1)];

在多币种专家顾问代码中,当在别人的工具上工作时,在这样的一个工具上。

double H_current, H_previous;
H_current=0; H_previous=0;
 
for (int n=1; n<51; n++)
  {
    H_previous=H_current;
    H_current=iHigh("USDJPY", PERIOD_H4, n);
    H=MathMax(H_previous, H_current);
  }

如果没有,请告知错误在哪里,如何正确操作?

预先感谢你。