[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 271

 
nlp2311:

请帮助我解决这个问题。我希望这条线路是正确的。但缓冲区给出的只是一条线,它在中间应该是平的,就像中枢线....。我有一条线是从前一天的X小时的水平来的。

请想办法....我搞不清楚((()

好吧,假设你需要在任何时间框架上的5点钟方向上进行一个muving,当然不是在日线上,而是在一个较小的时间框架上。比方说,从一点钟或更少的时间开始。

并把它画到第二天的5点钟。这里是如何做到的。

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
//==============================
extern int    hour = 5;
extern int    hrma = 4;
//==============================
double fx[];
double mai;
int p,hr,hrp;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,fx);
   
   p=hrma*60/Period(); // пересчет периода мувинга на любой таймфрейм
   
   return(0);
}
//************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) cbi=Bars-p-1;
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hr==hour && hrp!=hr) mai=iMA(NULL,0,p,0,0,0,i); // сам простой мувинг, в момент, когда час равен нашему и не неравен на предыдущем баре
      
      fx[i]=mai; // просто приравнивание индикаторного буффера к глобальной переменной 
   }
  
   return(0);
}
//***************************************************************
 

是的,我做了,同样的答案...什么与

ti=Time[i]; // время текущего бара
      
      tiip=tii; // предыдущее состояние времени
      tii=(ti-dth)/dtd*dtd;// время начала суток сдвинутое на нужный нам час
      
      if (tiip!=tii)

但结果是错误的!!!!!!!!!!!!!!!我通过Python的一个例子

if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
一般的观点是这样的

int start()
  {
double LastHigh,LastLow;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(Period() > 240)  return(-1);

int LastPrevDay = iBars(Symbol(), PERIOD_D1);
int barnH= iBars(Symbol(),PERIOD_H1);

for (int i = LastPrevDay-1; i >= 0; i--)
{
datetime NowDay = iTime(Symbol(), PERIOD_D1, i);
int PrevDay = iBarShift(Symbol(), PERIOD_D1, NowDay);
datetime LastD =  iTime(Symbol(), PERIOD_D1, i+1);
int LastDay = iBarShift(Symbol(), PERIOD_D1, LastD);

if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
{ 
datetime x_time= StrToTime(TimeToStr(NowDay, TIME_DATE)+" "+shift_time); 
int x_shift= iBarShift(Symbol(),PERIOD_H1,x_time);
double CL= iClose(Symbol(),PERIOD_H1,x_shift);
}

buffer[i]= CL;
}

return(0);
}

这仍然是不正确的结果。

问题很简单,把线HOW的枢轴是平的,但不是按枢轴水平,而是从某一小时的值。就是这样!!!!。而我很纠结,不明白怎么......把X小时到Time[0]的那条线RIGHT起来 !!!!!!!!!!!!!!!!

 
nlp2311:

是的,我做了,同样的答案...什么与

但结果是错误的!!!!!!!!!!!!!!!我通过Python的一个例子

一般的观点是这样的

这仍然是不正确的结果。

问题很简单,把线HOW的枢轴是平的,但不是在枢轴水平,而是从某个小时的值。就是这样!!!!。而我在挣扎,不明白如何......将X小时到Time[0]这一行进行RANGE!!!!!!!!!!!!!!!!。

好吧,我在那里写了一个更简单的例子。

如果我们在所需时间点上写了一些值,那么它就简单地等同于这个值。

for(int i=cbi; i>=0; i--)
{
hrp=TimeHour(Time[i+1]);
hr=TimeHour(Time[i]);

if(hr==hour && hrp! =hr) X=

fx[i]=x;//只是将指标缓冲区等同于全局变量
}

任何事情都一样,支点或其他。简单地说,如果它是一个日线枢轴,那么日线水平就会在这一点上计算出日线的数量。

例如,这里是每天5点钟的高点。所有其他级别也可以这样做。把代码复制到一个空的指标中,编译后看看,我想这是差不多的。

而如果你不需要画所有的日子,而只画最后一天,那就有一点不同的做法。我只是建议采取更专业的方法。

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
//==============================
extern int    hour = 5;
extern int    hrma = 24;
//==============================
double fx[];
double hm;
int p,hr,hrp;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,fx); SetIndexEmptyValue(0,EMPTY); 
   
   p=hrma*60/Period();
   
   return(0);
}
//************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) cbi=Bars-p-1;
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hr==hour && hrp!=hr) 
      {
         fx[i+1]=EMPTY;
         hm=High[iHighest(NULL,0,MODE_HIGH,p,i+1)];
      }
      
      fx[i]=hm; 
   }
  
   return(0);
}
//***************************************************************
 
大家好。如何在图表中 添加指标?也就是说,我有一个EA,计算出某个值,比如说,iMA。如何在图表上绘制指标?我想是的,使用特殊功能或通过趋势线 "手动"?有没有一种更简单的方法来显示带有EA参数的指标?
 
Pyro:
大家好。如果我想把它们放在图表上,我就不必自己去画。例如,我有一个EA,我计算了一些数值,如iMA。它是如何在图表上绘制指标的?我想是的,使用特殊功能通过趋势线"手动"?有没有一种更简单的方法来显示带有EA参数的指标?

我没有见过,也许有人在论坛上写过通过趋势线映射缓冲区的搜索。

或者自己写,没有什么复杂的。

 
Pyro:
你们好。如何在图表中添加指标?也就是说,我有一个专家顾问,其中计算了iMA的一些值。如何在图表上绘制指标?我想是的,使用特殊功能或通过趋势线 "手动"?有没有一种更简单的方法来显示带有EA参数的指标?


如果EA是附在图表上的,而且里面有东西,那么为了看清它是什么,我们需要创建一个功能完全相同的指标,并设置与EA中相同的参数,然后将它们应用于图表。或者如果是一个标准的MT功能,如muving,它也必须应用于一个图表,并且与专家顾问中的参数设置相同。专家顾问本身并不在图表上绘制指标。只有在测试后才会在策略测试器中绘制。在交易过程中,它不会这样做。另一种方法,但很麻烦,就是绘制对象,比如破折号 ObjectCreate(name+Time[0],OBJ_ARROW,0,Time[0],price); ObjectSet(name+Time[0],OBJPROP_ARROWCODE,4); 或趋势线段,但这时必须保存前一根棒上的函数状态。但是,当指标不能被应用时,例如,当一些东西必须由Askas绘制,而MT没有存储Askas的数组或一些两对的合成。因此,你必须扭动它来控制它。

那么,你也可以制作一个模板(tpl),在上面附加你需要的东西。但实际上,最好是制作一个自定义指标,并手动设置和编写一个新的配置文件,当你想交易时,只需调用相应的配置文件。这是一种处于幻想边缘的技术。

 
如果专家顾问中的参数不断变化,那就很麻烦了。好的,谢谢各位同事,现在有了确定性。
 
通过GV从EA转移到指标。
 

1) 用预设的EA和指标参数制作模板

2) 使用GV将参数转移到指标

3) 使用WINAPI从EA调用指标到图表上

我更喜欢通过Arrow对象从EA中绘制指标图

 

敬礼!!!

我不明白为什么开盘=收盘=高价=低价--没有区别,所有的价格都是一样的,在被创建的文件里有四列相同的价格。下面是EA卸载数据的代码。

int init()  
  {
   int h=FileOpen("H"+(Period()/60)+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
    if(h<1)
      {
      Print("Файл не найден : ", GetLastError());
      return(false);
      }
   FileSeek(h, 0, SEEK_END);
   FileWrite(h,"Date","DayOfWeek","CLOSE","OPEN","High","LOW" );
   FileClose(h);        
  }
int start()
  {
   int h=FileOpen("H"+(Period()/60)+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
    if(h<1)
      {
      Print("Файл не найден : ", GetLastError());
      return(false);
      }
      string Wtime=TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
      string Wday=DoubleToStr(DayOfWeek(),0);
      FileSeek(h, 0, SEEK_END);
      FileWrite(h,Wtime,Wday,DoubleToStr(iClose("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),
                             DoubleToStr(iOpen("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),
                             DoubleToStr(iHigh("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),
                             DoubleToStr(iLow("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)));
      FileClose(h);   
      Print("Close=",Close[0]);
      Print("Open=",Open[0]);
      Print("Low=",Low[0]);
      Print("High=",High[0]);
     
   return(0);
  }