[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 647

 
Mathers:

对。
 
论坛成员下午好!我发现了一个有趣的构建趋势线的代码,并决定用它来玩一下 - 这将绘制趋势线,而不是点,而是百分比,但由于某些原因 - 在我完成动荡后停止绘制历史 - 只有最后三条(或者说如果你运行动荡,它绘制的趋势线自开始正常,但一旦你点击更新动荡 - 属性>ОК历史重置。 我做错了什么?
我画了下面的代码,谁能告诉我问题出在哪里--我加粗的那段代码?
问题是,该指标立即向后画出历史记录,而在改变参数后并没有重置它。
#属性 indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 LimeGreen

双澳元。

外部int PerAvr=5,Delta=1;
double Idx[];
//+------------------------------------------------------------------+
//|自定义指标初始化功能
//+------------------------------------------------------------------+
int init()
{
//---- 指标

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2)。
SetIndexBuffer(0,Idx)。

//----
return(0);
}
//+------------------------------------------------------------------+
//|Custor指示器去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//|自定义指标迭代函数|
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted()。
if(counted_bars<0) return(-1);
如果(counted_bars>0) counted_bars--。
int limit=Bars-counted_bars。
for(int i=limit; i>=0; i--)
{
AUD=(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+De lta)*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+De lta) 。

//if (Curency == "AUDUSD")
Idx[i] = AUD。



}

//----

//----
return(0);
}
//+------------------------------------------------------------------+
 
Lonely_man:
下午好,论坛成员。 我发现了一个有趣的建立趋势线的代码。 我决定用它玩一下。

出于某种原因,我想起了一个轶事:在一个程序员的家庭里,一个儿子找到他的父亲,问为什么太阳从东边升起,从西边落下。

爸爸,眼睛不离开电脑,它真的从东方升起吗?-是的 -它在西方落下?- 是的,那么,什么,每一天?- 是的,好吧,如果它在工作,就不要碰任何东西。

 
Roger:

出于某种原因,我想起了一个轶事:在一个程序员的家庭里,一个儿子找到他的父亲,问为什么太阳从东边升起,从西边落下。

爸爸,眼睛不离开电脑,它真的从东方升起吗?-是的 -它在西方落下?- 是的,那么,什么,每一天?- 是的,好吧,如果它在工作,你不必碰任何东西。

:))
 
Lonely_man:
论坛的用户们,你们好!我发现了一个有趣的绘制趋势线的代码。

你知道什么是有趣的吗--你根据你的原则改变了代码,并希望有一支学者大队来寻找错误。

你只是尝试输出你想在评论中得到的信息吗? 有可能一切正常,但你得到的数据不是显示在当前价格,而是在图表底部的某个地方--我想这是分离风的问题。

SZS 好运

 
IgorM:

你知道什么是有趣的吗--你根据你的原则改变了代码,并希望有一支学者大队来寻找错误。

你只是尝试输出你想在评论中得到的信息吗? 有可能一切正常,但你得到的数据没有显示在当前价格上,而是在图表底部的某个地方--我想这是分离风。

SZS 好运

我知道分离器--我知道,它在一个单独的窗口中,这与它无关。 我看不出这段代码会发生什么--显然这种计算方法对百分比(()不起作用。

随即,不知为何我想起了一个笑话--一个程序员的儿子来找他的父亲,问为什么太阳从东边升起,从西边落下?

爸爸,眼睛不离开电脑,它真的从东方升起吗?-是的 -它在西方落下?- 是的,那么,什么,每一天?- 是的,好吧,如果它在工作,你不必碰任何东西。

)))我只是不确定我想做什么。 提示:我需要它来进行交叉货币交易--英镑或日元对美元的点数变化并不能提供完整的信息,即它们对另一货币的价格下跌,但它们对美元的百分比变化可以清楚地显示一切--作为一个额外的工具是非常有用的事情。
 
Mathers:
谢谢你。我想唯一的区别是,EA是在每次有新的tick出现时启动的,而脚本必须无限循环地启动以保持其运行?


不一定。这完全取决于剧本的目的。如果剧本的目的是为了一次性的运行(这是绝大多数),就没有必要编造无休止的循环。在以预设手数开仓时,需要计算应用于市场的资金数额,可以作为这种一次性脚本的例子。由于不同工具的最小手数的点价是不同的,所以更容易打开所需的工具,对其应用脚本,在参数窗口中输入预定的手数,看看如果交易开始,会有多少钱被封锁。

这只是一个例子。脚本的目的可能是不同的。

 
Lonely_man:

我意识到了分离性,它在一个单独的窗口中,这与它无关。 我不知道这段代码如何工作--显然这种百分比计算方法不会工作()。

随即,不知为何,我想起了一个轶事:一个程序员家庭的儿子来找他的父亲,问为什么太阳从东边升起,从西边落下?

爸爸,眼睛不离开电脑,它真的从东方升起吗?-是的 -它在西方落下?- 是的,那么,什么,每一天?- 是的,好吧,如果它在工作,你就不必碰任何东西。

)))提示:我需要它来进行交叉货币交易--英镑或日元对美元的点数并不能提供完整的信息,即它们对另一货币的价格下跌,但它们对美元的百分比变化可以清楚地显示一切--作为一个额外的指标,这是一个非常有用的东西。

这是一个相当简单的指标。 我看不出百分比比点数好在哪里,但不管怎样。

虽然你犯了一些错误,但是 :)

1.

AUD=(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta)*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta));

为了正确计算百分比,你必须加上括号。

AUD=((iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta))*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta));

2.


问题是,该指标立即向后画出历史记录,而在改变参数后并没有重置它。

最有趣的是,它唤醒了体育兴趣,在你的指标上坐了半个小时。

为什么没有计算历史?
答案是,你增加了一个除法运算。

100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta)

iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE ,i+Delta)函数在历史的最开始返回0的事实没有被考虑到。而你在试图除以0时被 "踢出 "了错误4013(ERR_ZERO_DIVIDE),请查看日志。

你可以在FOR循环中再增加一个检查。

if(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta) == 0)continue;

而一切都会好起来的。下面是我的变体。

#property copyright "Copyright © 2010, Анатолий Сергеев"
#property link      "mql.sergeev@yandex.ru"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 LimeGreen

double AUD;

extern int PerAvr=5,Delta=1;
double Idx[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+
int init(){
//---- indicators
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
   SetIndexBuffer(0,Idx);
//----
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){ 
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;   
   for(int i=limit; i>=0; i--){
      double a = iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i);
      double b = iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta);      
      if(b == 0)continue;      
      AUD=((a-b)*100/b);
      Idx[i] = AUD;
   }
}
//+------------------------------------------------------------------+


 

#property indicator_color1 白色

是否可以在start()模块中以编程方式改变这个参数。

也就是说,是否可以在程序进行过程中改变缓冲区的颜色设置?



 
valenok2003:

#property indicator_color1 白色

是否可以在start()模块中以编程方式改变这个参数。

也就是说,是否可以在程序进行过程中改变缓冲区的颜色设置?




我不这么认为。为什么要这样呢?
原因: