错误、漏洞、问题 - 页 623

 
MetaDriver:
你会得到一个粗暴的唤醒......:))

可能是这样。

我看了问题的实质,我不明白为什么每个指标都要有一个定时器,为什么有这么多的指标。

是否有可能直接在EA定时器中获得所需仪器的出价,并将其放在总装配中。

如果你想使用一个指标,你将需要很多指标,因为分辨率会很好。

间谍则不同--他们没有时钟,所有工具的事件可能在很长一段时间内都不会发生,或者它们可能一个接一个地开始计时。

例如,在有最后价格的交易中,Bid数据不一定有,所以要检查并写上Bid或Last。

 

MetaDriver:

我提出了一个折中的办法:你用间谍来捕捉刻度线,并立即将其发送到头部的专家顾问,并加上毫秒标签(GetTickCount())。专家顾问根据它们的标签进行排列,并将其切成第二块。

这不是很简单,但它会很准确。

这不是一个糟糕的变体。在我看来,这是唯一值得作为依据的。

Urain

顺便说一下,在有最后价格的交易中,Bid数据并不总是存在,所以要检查并写入Bid或Last。

澄清得好,我没有遇到过这样的情况。必须要考虑到这一点。
 

MetaDriver:

Предлагаю компромисс: ловишь тики шпионами и сразу отправляешь в головной эксперт, снабдив милисекундной меткой(GetTickCount()). Эксперт их упорядочивает в соответствии с метками и нарезает секундные блоки.

Не очень просто, зато с точностью будет порядок.

有趣的 是。

不是一个坏的选择。在我看来,这是唯一值得作为依据的。

澄清得好,没有遇到过这种情况。必须要考虑到这一点。

这可能不是一个糟糕的变体,但在终端中没有发送ticks的机制。试着想一想,在16对的情况下,5-10次/秒。再一次--它已经消失了))。

而且你不需要这么高的精确度--1秒就够了。

感谢你们所有人--这个主题已经完成。

 

由于在遥远的历史上用更高的时间段的条形图代替了分钟条形图,当时还没有逐分钟的历史记录,这个问题非常令人不快。我想到的唯一解决办法是将假条复杂地转换为真条,而且不能保证准确性。与其说是复杂,不如说是对这种转换的准确性产生了怀疑。

最初的任务是检查正在建立的斐波那契 时间区的相关性。如果该区太过遥远,而且其所有子区的工作宽度(默认情况下最多为34个基数宽度)太窄,以至于右边缘达不到此刻,那么我们就不建立它,否则就在图表上创建一个对象。试图用两种类似的方法来解决这个问题,其中一种我引用了。唯一不同的是,在第一种方式中,我从故事的开始就在跳舞,使用的是

   datetime firstDate=(datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_FIRSTDATE);
但在第二种情况下--相反(我引用了这种方法),其本质和结果是绝对相同的。我在NZD/USD 上测试了它。

如果你有一个假的历史在2009年以外的日期结束,就像我一样,重新安排两个飞博时区,使其中一个经过那个临界日期,而第二个已经完全在历史的右边,那里所有的柱子都是真的。在这种情况下,不要忘记改变脚本中startTime1、endTime1的值,如果有必要,也可以改变startTime2、endTime2的值;你可以不调整价格--这并不重要。现在你可以测试它...结果将是可悲的:如果两个时区的检查算法保持不变,它将只对转折点日期前一脚和后一脚的时区正确工作,该算法将错误地过滤掉它,并阻止我们建立它。请注意,这两个区都相当接近,而且宽度相似,这两个宽度延伸到很远的未来,并将在很长一段时间内相关,事实上这两个区都不应该被过滤掉(注释掉条件,看到两个时区都被建立)。

void OnStart()
  {
   datetime startTime1=D'2009.07.08 18:00:00';
   datetime endTime1=D'2009.11.03 12:17:00';
   datetime startTime2=D'2009.06.30 08:00:00';
   datetime endTime2=D'2009.10.21 20:16:00';

   double startPrice1=0.61930;
   double endPrice1=0.70948;
   double startPrice2=0.65470;
   double endPrice2=0.76300;

   int FTZ1pos1,FTZ2pos1,bandwidth;
   datetime Arr[],time1;

   CopyTime(_Symbol,PERIOD_M1,0,1,Arr);
   time1=Arr[0];

   FTZ1pos1=CopyTime(_Symbol,PERIOD_M1,time1,startTime1,Arr);
   bandwidth=CopyTime(_Symbol,PERIOD_M1,endTime1,startTime1,Arr)*(34+2); // +2 - небольшой запас общей ширины
                                                                         // зоны на всякий случай

   if(FTZ1pos1<=bandwidth)
      ObjectCreate(0,"FTZ1",OBJ_FIBOTIMES,0,
                   startTime1,startPrice1,
                   endTime1,endPrice1
                  );


// ---
   FTZ2pos1=CopyTime(_Symbol,PERIOD_M1,time1,startTime2,Arr);
   bandwidth=CopyTime(_Symbol,PERIOD_M1,endTime2,startTime2,Arr)*(34+2); // +2 - небольшой запас общей ширины
                                                                         // зоны на всякий случай

   if(FTZ2pos1<=bandwidth)
      ObjectCreate(0,"FTZ2",OBJ_FIBOTIMES,0,
                   startTime2,startPrice2,
                   endTime2,endPrice2
                  );
  }

期望的结果。必须有两个飞博时区

在第一条和第二条0基线之间的某个地方,有一个临界点,将假的分钟条和真的分钟条分开。

如果你拒绝以条数计算,而一切以日期计算,那么它肯定不会给出所需的准确性,因为你必须减去周末(+/-收市/开市一小时)、节假日等,更不用说在没有超过一分钟的刻度和与时间线相背离的情况下缺少条数。

你建议采用什么可靠的解决方案?

 

在专家顾问中加载文件出错。 找到10个不同点。第一个代码指的是脚本,第二个指的是专家顾问,它们是相同的Ctrl-C Ctrl-V。该代码在脚本中起作用,在专家顾问中不起作用。

#include <\\MyClass\RegulFind-v1-1.mqh>
#include <Trade\Trade.mqh>
int hMa,hRsi ;
double mMa[],mRsi[];                             
Kohonen  koh;
CTrade trade ;
void OnStart()
  {
   koh.LoadMap("KitMaRsi.csv") ;
   hMa=iMA(_Symbol,Period(),10,0,MODE_EMA,PRICE_CLOSE) ;
   if(hMa ==INVALID_HANDLE)
      Print("Ошибка загрузки машки====================== ",GetLastError());
   hRsi=iRSI(_Symbol,Period(),10,PRICE_CLOSE);
   if(hRsi ==INVALID_HANDLE)
      Print(" Ошибка загрузки РСИ ==========");   
   
  }
#include <\\MyClass\RegulFind-v1-1.mqh>
#include <Trade\Trade.mqh>
int hMa,hRsi ;
double mMa[],mRsi[];                             
Kohonen  koh;
CTrade trade ;
int OnInit()
  {
   koh.LoadMap("KitMaRsi.csv") ;
   hMa=iMA(_Symbol,Period(),10,0,MODE_EMA,PRICE_CLOSE) ;
   if(hMa ==INVALID_HANDLE)
      Print("Ошибка загрузки машки====================== ",GetLastError());
   hRsi=iRSI(_Symbol,Period(),10,PRICE_CLOSE);
   if(hRsi ==INVALID_HANDLE)
      Print(" Ошибка загрузки РСИ ==========");   
   return(0);
  }
 
ivandurak:

在专家顾问中加载文件出错。 找到10个不同点。第一个代码指的是脚本,第二个指的是专家顾问,它们是相同的Ctrl-C Ctrl-V。该代码在脚本中起作用,在专家顾问中不起作用。

测试人员有一个不同的文件沙盒。如果你想让Expert Advisor在测试器中以正常方式处理一个*.csv文件,把它放到公共 目录中,用FILE_COMMON 修改器打开文件。


P.S. 要把它放在公共文件夹中,你必须写一个带有修饰符
FILE_COMMON文件 ,或者找到像这样的东西(XP的变体):

C:\Documents and Settings\All Users\Application Data\MetaQuotes\Terminal\Common\Files\



 
x100intraday:

你建议采用什么可靠的解决方案?

返回到MT4。

我曾 就这个问题的未来联系过开发商,但他们一直保持沉默,所以我个人对未来不确定。

 

带字符变量的开关似乎不起作用......。

而不是。

string type = "Buy";

switch(type)
{
case "Buy" : {direction = ORDER_TYPE_BUY;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK); break;}
case "Sell": {direction = ORDER_TYPE_SELL; price = SymbolInfoDouble(zSymbol,SYMBOL_BID); break;}
default: {return(lot_value);}
}

'type' - 非法开关表达式类型
'买'--常量表达不是积分

我必须这样画。

if(zShift == "Buy")  {direction = ORDER_TYPE_BUY;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK);}
if(zShift == "Sell") {direction = ORDER_TYPE_SELL; price = SymbolInfoDouble(zSymbol,SYMBOL_BID);}
if(zShift != "Buy" || zShift != "Sell") {return(lot_value);}

它不是那么清晰,而且是歪的。

它在其他语言中的效果也很好。

我应该用另一种方式来写吗?

 
awkozlov:

切换似乎对字符变量不起作用......


文件中说(强调是后加的)--切换操作员

将表达式的值与所有 情况下的常量 进行比较 ,并将控制权传递给与表达式的值相匹配的运算符 每个 案例 变体 可以用一个整数常数 、一个字符常数或一个常数表达式来标记。 一个常量表达式不能包括变量或函数调用。 开关 运算符的表达式 必须是整数 类型。

 
awkozlov:

它在其他语言中也适用...

它能在其他语言中工作是一个特点。切换最初只针对积分类型。这里没有这样的功能。