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

 

为什么这个循环没有结束,当...(当我意识到循环是无限的时候,我添加了i<2000的第二个条件)MQL4

cv * tvp * (double)stop < ml


double tvp  = SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE_PROFIT),
          vm   = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),
          vs   = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP),
          ml   = AccountEquity() * (risk / 100.0),
          cv   = -1.0;
   
   for(int i = 0; cv * tvp * (double)stop < ml && i < 2000; i++)
     {
      if( (vm + vs * (double)i) * tvp * (double)stop < ml ) { cv = vm + vs * (double)i; Print(i," ",cv,"/",ml); };
     };


 
Alexandr Sokolov:

为什么这个循环没有结束,当...(当我意识到这个循环是无限的时候,我添加了第二个条件,即i < 2000)



循环将不会结束,直到

cv * tvp * (double)stop < ml

为了使循环在满足这个条件时结束,我们可以在循环的主体中写下以下内容

for(int i = 0; i < 2000; i++)
{
  if(cv * tvp * (double)stop < ml)
    break
  ...
}

for(int i = 0; cv * tvp * (double)stop >= ml; i++)
{
  if(i >= 2000)
    break;
  ...
}
 
Mihail Matkovskij:

在MQL4中只有这种方式。

结果。


再次感谢您的帮助。如果您能同时告诉我如何进行以下工作,我将非常感激...
可以用什么函数或语言结构来计算一个数组元素 的索引值,该元素在排序前具有该索引。

这里,我有排序前的数组A[](上面一行)和排序后的相同数组。一个在排序前数值为5的元素在索引9
,而一个排序后数值为5的元素在索引3。

我在排序的数组中找到一个值为5的单元格,该函数将该单元格在排序的数组中的索引号 保存为W,等于索引3

ArraySort(А,10,0,MODE_ASCEND)。

W = ArrayBsearch( A,5,WHOLE_ARRAY,0,MODE_ASCEND) 。

问题:在ArrayBsearch()之后,如何将数值为5的单元格的索引值存储在一个具有未排序 数组的变量中。

即保存9的值。
谢谢你的帮助。

 

大家好。谁知道如何在自定义指标 中设置一个负值,并使其发挥作用?即 "将指标相对于价格图表进行移动"。

例如:如果你在移动平均线指标中放入一个-4的数值,它就会相对于图表向左移动--并且发挥作用。

但如果你把这个值放在指标的代码中--那么指标就会停止工作,并显示所有TF值为红色。

附加的文件:
 
ANDREY:

再次感谢您的帮助。如果您能同时告诉我如何进行以下工作,我将非常感激...
可以用什么函数或语言结构来计算一个数组元素的 索引值,这个元素在排序前的索引值。

这里,我有排序前的数组A[](上面一行)和排序后的相同数组。一个在排序前数值为5的元素在索引9
,而一个排序后数值为5的元素在索引3。

我在排序的数组中找到一个值为5的单元格,该函数将该单元格在排序的数组中的索引号 保存为W,等于索引3

ArraySort(А,10,0,MODE_ASCEND)。

W = ArrayBsearch( A,5,WHOLE_ARRAY,0,MODE_ASCEND) 。

问题:在ArrayBsearch()之后,如何将数值为5的单元格的索引值存储在一个具有未排序 数组的变量中。

即保存9的值。
谢谢你的帮助。

但不要随意对数据进行分类,也不要不顾全局。

从目前的项目来看:取一个(短)数组,输出将是按正确顺序排列的元素索引。

void BubleSortIndex5(double &data[5],int &index[5])
{
   for(int i=0;i<5;i++)
      index[i]=i;
   for(int i=0;i<4;i++) {
      for(int j=1;j<5;j++) {
         if (data[index[i]]>data[index[j]]) {
            int tmp=index[i];
            index[i]=index[j];
            index[j]=tmp;
         }
      }
   }
}


对于较大的数组,我们需要改变排序算法(冒泡法对较大的数组不起作用)--改变它。

主要的信息是:不要碰源数据。可以用引用操作,也可以用数组索引操作,效果更好。否则就会丢失信息,而这些信息在以后是非常需要的。

 
ANDREY:

再次感谢您的帮助。如果您能同时告诉我如何进行以下工作,我将非常感激...
可以用什么函数或语言结构来计算一个数组元素的 索引值,这个元素在排序前的索引值。

这里,我有排序前的数组A[](上面一行)和排序后的相同数组。一个在排序前数值为5的元素在索引9
,而一个排序后数值为5的元素在索引3。

我在排序的数组中找到一个值为5的单元格,该函数将该单元格在排序的数组中的索引号 保存为W,等于索引3

ArraySort(А,10,0,MODE_ASCEND)。

W = ArrayBsearch( A,5,WHOLE_ARRAY,0,MODE_ASCEND) 。

问题:在ArrayBsearch()之后,如何将数值为5的单元格的索引值存储在一个具有未排序 数组的变量中。

这是为了保存9的值。
谢谢你的帮助。

为此,你需要回答两个问题。如果是这样,你会怎么做。

1.在数组的不同单元中会有多个5的值。

2.数组中不会有值5。

因为ArrayBsearch 函数(用于排序数据),在第一种情况下,将给出找到的第一个单元格值为5的索引,在第二种情况下,它将给出一个接近5值的元素我不清楚你要如何处理一个没有排序的数组。

 
sla100:

大家好。谁知道如何在自定义指标 中设置一个负值,并使其发挥作用?即 "将指标相对于价格图表进行移动"。

例子:如果你在移动平均线指标中放一个-4的值,它就会相对于图表向左移动--并且发挥作用。

但如果你把这个值放在指标的代码中,指标就会停止工作。并显示所有TF的红色数值。

设置IndexShift

移位 也在iMA中指定。

iMA

返回移动平均技术指标

doubleiMA(
stringsymbol,// 符号名称
inttimeframe,// 时间框架
intma_period,//周期
intma_shift,//转移平均数
intma_method,// averaging method
intapplied_price,//价格类型
intshift// shift

参数

标志

[in] 符号名称,该符号的数据将用于计算指标。NULL 表示当前符号。

时限

[in] 期间。可以是枚举ENUM_TIMEFRAMES 中的一个值。0表示当前图表的周期。

阶段

[in] 计算指标的平均周期。

硕士班

[in] 指标相对于价格图表的移动。

硕士方法

[in] 平均法。可以是ENUM_MA_METHOD 枚举中的任何一个值。

应用价格

[in] 价格适用。可以是ENUM_APPLIED_PRICE 枚举的任何值。

移位

[in] 从指标缓冲区获得的数值的索引(相对于当前条形图,向后移动指定的周期数)。

返回的值

移动平均线技术指标的价值

例子。

AlligatorJawsBuffer[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i)

https://docs.mql4.com/ru/indicators/ima

这里有一个现成的例子,但在MQL5中:https://www.mql5.com/ru/docs/indicators/ima 。

这可以很容易地翻译成MQL4。

SetIndexShift - Пользовательские индикаторы - Справочник MQL4
SetIndexShift - Пользовательские индикаторы - Справочник MQL4
  • docs.mql4.com
При положительном значении изображение линии смещается вправо, при отрицательном - влево. Значение, рассчитанное на текущем баре, рисуется с указанным смещением относительно текущего бара.
 

指标设置 上没有任何转变。我进入代码,在代码中输入shift-4,指标就停止工作了--它显示所有TF都是红色的。我坐在这里想知道为什么。

Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Среди программ для автоматического трейдинга можно выделить две большие категории: торговые роботы и индикаторы. Первые предназначены для совершения торговых операций на рынках, а вторые — для анализа котировок и выявления закономерностей в их изменении. При этом индикаторы могут использоваться непосредственно в роботах, образуя полноценную...
 
Mihail Matkovskij:

要做到这一点,你需要回答两个问题。你会怎么做,如果

1.在数组的不同单元中会有几个5的值。

2.值5不会出现在数组中。

因为ArrayBsearch 函数(用于排序数据),在第一种情况下,将给出找到的第一个单元格值为5的索引,在第二种情况下,它将给出一个接近5值的元素我不清楚你要如何处理一个未排序的数组。

非常感谢您的快速回复。在我的案例中,数组元素的 每个值都是唯一的,并且存在于一个实例中。也就是说,数值5和其他数值一样,并不重复。

在我的例子中,值5可能不存在于一个未排序的数组中。这意味着,未排序数组中的一些单元格可能是空的。
,但如果值5不在未排序数组中,那么我就不能指定值5作为ArrayBsearch() 函数的第二个参数。只有未排序数组中必然存在的值才能进入该函数
谢谢你的帮助