新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1948

 
Vitaly Muzichenko #:

你必须考虑到项目的成本

我可以给你代码,但要理解它需要很长时间,它很大,也考虑到了保证金的最大可能手数。

如果我做不到,我就问问题)))当然,你必须考虑到点值,而且这个公式不是一个2步的公式。我有困难,不完全理解这些术语,测试假设的正确性需要时间)))。合约的价值=1手货币的价值日计算))))

 

日安,请告知如何从一个文本形式的常量列表中返回一个值。

例如,HistoryDealGetInteger函数在请求事件时返回ENUM_DEAL_TYPE 列表中的int值。我们怎样才能从返回的数字中获得信息,即它是 "DEAL_TYPE_CREDIT - 贷方应计。那么在调试之后,这个值当然就不需要了,int就足以处理事件了,但是在调试过程中,完全不清楚函数返回的数字3或5是什么意思。

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Свойства сделок - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Кирилл Якимов #:

日安,请告知如何从一个文本形式的常量列表中返回一个值。

例如,HistoryDealGetInteger函数在请求事件时返回ENUM_DEAL_TYPE 列表中的int值。我们怎样才能从返回的数字中获得信息,即它是 "DEAL_TYPE_CREDIT - 贷方应计。那么在调试之后,这个值当然就不需要了,int就足以处理事件了,但是在调试过程中,完全不清楚函数返回的数字3或5是什么意思。

string s = EnumToString((ENUM_DEAL_TYPE) x)

 
Maxim Kuznetsov #:

string s = EnumToString((ENUM_DEAL_TYPE) x)

非常感谢你,这对你有帮助。
 

请告诉我如何解决:

1)我没有加载历史记录,在在线过程中的图表窗口,我有时间加载70 000分钟的条形图。我在策略测试器中 加载我的专家顾问,万一我写了某个模式的最小条数,它的回答是 "没有足够的条数进行分析"。我打印了iBars,它说是1200条。我加载了历史(8 000 000条)。重新启动,设置在窗口和历史记录中显示 "999999999 "条。诺瓦写道:"没有足够的历史"。打印iBars,又是1200。这是什么情况,如何解决?

2)在多货币分析中,如果当前图表上的报价突然被冻结,而OnTick没有调用检查,我怎样才能迫使该指标不错过其他货币对的新进入的ticks?我试过OnTimer,但它在测试器中不起作用。

 
在这个脚本中,我正在试验调整具有不同索引方向 的动态数组的大小--为了了解增加数组大小后,新的单元格出现在哪一边
void OnStart()
  {
   
   int a[], b[], size = 5, new_size = size + 5;
   
   if( ArraySize( a ) != size )
     ArrayResize( a, size, 0 );
   
   if( ArraySize( b ) != size )
     ArrayResize( b, size, 0 );
   
   if( ArrayGetAsSeries( a ) )
     ArraySetAsSeries( a, false );
   
   if( !ArrayGetAsSeries( b ) )
     ArraySetAsSeries( b, true );
   
   for( int i = 0; i < size; i++ )
     {
      a[i] = i;
      b[i] = i;
     };
   
   ArrayResize( a, new_size, 0 );
   ArrayResize( b, new_size, 0 );
   
   for( int i = 0; i < new_size; i++ )
     {
      Alert( "a", i, " ", a[i] );
      Alert( "b", i, " ", b[i] );
      Alert(" ");
     };
   
  }

下面是结果


结果发现,数组b[](有反向索引)在增加大小后不知何故重复了它的值

。为什么?我是否遗漏了什么,或者我犯了什么错误?
 
Alexandr Sokolov 索引方向 的动态数组的大小--以了解在增加数组大小后哪一方出现新的单元 ,这就是结果 ,结果发现数组b[](具有反向索引)在增加大小后不知为何出现了重复值 ,为什么?我是否遗漏了什么,或者我犯了什么错误?






在任何情况下,我们都不能依赖新数组单元中的任何值--这些是未初始化的变量,可以包含任何垃圾。

 
Alexandr Sokolov 索引方向 的动态数组的大小--以便了解在增加数组大小后,哪一边出现了新的单元 ,这就是结果 ,结果发现数组b[](具有反向索引)在增加大小后不知为何出现了重复值 ,为什么?我是否遗漏了什么,或者我犯了什么错误?






你必须在数组被填满后将其翻转。

 
JRandomTrader #:

在任何情况下,我们都不能依赖新数组单元中的任何值--这些是未初始化的变量,可以包含任何垃圾。

是的,但是有2个但是
1)在任何其他大小的情况下都可以观察到镜像,而不仅仅是在我的例子中--5
2)如果一个数组有反向索引,那么新的单元格应该出现在数组的开头--但事实并非如此。

 
Alexey Viktorov #:

你必须在填充阵列后翻转它。

我也想到了这一点--至少我目前没有看到任何其他解决办法