任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 130

 
skyjet:

谢谢你!从哪边开始数,即第三小节,这不重要吗?

对于你的例子来说,这实际上并没有什么区别,但无论如何你必须指定数组的开始和结束。

for (int x=3; x>1; x--)
{
 if(Open[x]==Open[x-1]) continue;
 if(Open[x]<Open[x-1])
   {
   //--- action
   }
}
如果数组很大,开头确实很重要。例如,如果条件是在数组的末端触发的,作为一个规则,你最好从末端开始。这个例子是典型的顺序/位置搜索。当然,如果你在这种情况下先进行搜索,程序无论如何都会到达这一点,但会占用更多的资源。
 
Danila_mactep:
大家好!请就这个问题给我建议......我想在水平标签中转移MA水平。 如果我想把它转移到798,对许多货币对来说,计算起来太复杂了。 如何写一个指标,要么画出转移的移动平均线的价格,要么在数据窗口中显示,而我不必手动计算?
你可以在其输入数据中创建一个带有MA移位的指标。而该指标将计算出价格水平,并立即在图表上显示其对象。
 
chief2000:
这样的问题--有一个一维数组,其大小可以变化。 如何循环浏览数组元素的所有可能的相互组合?元素的顺序并不重要,即123==213==321...。下面是一个有4个元素的数组的例子:






这对你的大脑来说是个好任务。你可以这样试一试:
int start(){
 double array[4];
 int k,N[];
 k=ArraySize(array);
 ArrayResize(N,k);
 for (int i=0;i<k;i++)N[i]=-i-1;// Заполнили массив элементов массива отрицательными
//
 int j=0;
 while(N[k-1]<k){
  if(N[j]<k-1){
   N[j]++;
   bool NewComb=false;
   for(i=0;i<k-1;i++){
    if(N[i]>N[i+1]){NewComb=true;}else{NewComb=false;break;}
   }
//
   if(NewComb){
// Получили новую комбинацию в массиве N размерностью k    
    string temp="";
    for(i=0;i<k;i++){// Перебираем массив N. Если N[i] то элемент array[N[i]] не участвует в выборке.
                     // Например, для размерности 4 если N[0]=3,N[1]=1,N[2}<0,N[3]<0 то это выборка array[3] и array[1]
                     //                             если N[0]=3,N[1]=2,N[2]=1,N[3]=0 то это выборка array[3] и array[2] array[1] и array[0]
     if(N[i]<0)temp=StringConcatenate(temp,"X");else temp=StringConcatenate(temp,N[i]);
    }
   Print("NEWCOMB ",temp);// это для проверки какие комбинации выбираются
   }
//
  }
  else{
   N[j]=0;i=1;
   while(i<k){
    if(N[i]<k-1) {if(N[i]>=0)N[i]++;else N[i]=0;j=0;break;}
    else {N[i]=0;i++;}
   }
  }
  if(N[k-1]>=k-1) break;
 }
 return;
}

尺寸4的测试结果。如果没有选择数组的X元素,否则使用数组[digit]和片段的维数6。

 
artmedia70:
做一个指标,其输入数据将指定MA移位。而该指标将计算出价格水平,并立即在图表上显示其对象。


我不知道怎么做,坦率地说,我也不知道怎么做--当我打开МА МА代码时,那里有很多东西,我看不到水平参数在哪里,所以我无法复制和粘贴水平。
 
Danila_mactep:

我不知道怎么做,说实话,我也不知道怎么做。 当我打开MA代码时,那里有很多东西,我看不到水平参数在哪里,所以我不能把水平复制和粘贴到里面。
你必须开始写你自己的指标,他们会告诉你该怎么做。
 
artmedia70:
不,你需要开始写你自己的指标,然后他们会告诉你你需要做什么。

我创建了一个新的指标,到目前为止,它看起来像这样。

#property copyright "Copyright 2013, MetaQuotes Software Corp.
#属性链接 "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//--- 缓冲区
双倍ExtMapBuffer1[]。
//+------------------------------------------------------------------+
//|自定义指标初始化功能
//+------------------------------------------------------------------+
int init()
{
//---- 指标
SetIndexStyle(0,DRAW_LINE)。
SetIndexBuffer(0,ExtMapBuffer1)。
return(0);
}
//+------------------------------------------------------------------+
//|自定义指标去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----
#include "Moving Averages.mq4"
//----
return(0);
}
//+------------------------------------------------------------------+
//|自定义指标迭代函数|
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted()。
//----

//----
return(0);
}
//+------------------------------------------------------------------+

 
Danila_mactep:

创建自定义指标
 
MA指标有水平。问题是这样的--我们如何从这些水平上获得数据,比如说价格已经达到了100或-100的水平(开出买/卖交易)。
 
alexey1979621:
MA指标中存在水平。问题是这样的--我们如何从这些级别中获得数据,比如说价格已经达到了100级或-100级(开了一个买/卖交易)。

零(当前)条上的MA本身是。

double priceMA0=iMA(Symbol(), Period(), MA_Period, MA_Shift, MA_ Method, PRICE_OPEN, 0);

为了计算MA,我们采用开盘价来摆脱当前柱状图上的 "颤动"。

那么+100 级的价格将是。

double priceP100=priceMA0+100*Point;

级别为 -100 的价格将是。

double priceM100=priceMA0-100*Point;
 
artmedia70:

零(当前)条上的MA本身是。

为了计算MA,我们采用开盘价来摆脱当前柱状图上的 "颤动"。

那么+100 级的价格将是。

级别为 -100 的价格将是。


谢谢你,你已经不止一次地帮助我了。我相信我很快就能掌握编程,.....。