如何编码? - 页 301

 

嗨,Mladen。

谢谢你的解释,但是你说的第一个闭合的条形图是什么意思?是指第一个收盘价还是当前的收盘价或之后的收盘价?那么current+0或current+1的含义是什么?

问候

Terrance

mladen:
邓丽君

MODE_MAIN意味着你正在读取随机线的值。MODE_SIGNAL意味着你正在读取随机信号线的值。

至于SHIFT:它对每个指标都是一样的(甚至是自定义的指标)。举个例子:SHIFT=0表示当前条形图值,SHIFT=1表示第一个封闭条形图值,以此类推......
 

...

特伦斯

根据定义,当前的条形图仍然不是一个封闭条形图

在当前条形图之前的第一个条形图是第一个封闭条形图

tkuan77:
你好,Mladen。

谢谢你的解释,但你说的第一个闭合条形图是什么意思?是第一个闭合条形图的值还是当前条形图的值,还是之后的?那么current+0或current+1的含义是什么?

问候

Terrance
 

你好,姆拉登。

那么我是不是可以这样说。

current+0与0的值相同。

current+1与值1相同。

current+2与数值2相同。

以此类推,..... 为SHIFT?

例如

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 1); 与iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1)相同。

我这样说对吗?

谢谢

Terrance

mladen:
Terrance

根据定义,当前的条形图仍然不是一个封闭的条形图。

在当前栏位之前的第一个栏位是第一个封闭栏位
 

...

Terrance

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,0); 是当前的

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,1); 是第一个关闭的(上一个)。

...

...

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Bars-1); 是图表中最老的一个。

PS:在这个帖子里,你已经看到了更多关于条形图的信息:https://www.mql5.com/en/forum/173124

tkuan77:
Hi Mladen,

那么我是否可以这样说。

current+0与0的值相同。

current+1与数值1相同。

current+2与值2相同。

以此类推..... 为SHIFT?

例如

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 1); 与iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1)相同。

我这样说对吗?

谢谢

特伦斯
 

嗨,姆拉登。

谢谢你一如既往地提供了巨大的帮助!

谢谢

Terrance

mladen:
特伦斯

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,0); 是当前的

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,1); 是第一次关闭(上一次)

...

...

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Bars-1); 是图表上最老的一个

PS: 在这个帖子里,你可以看到更多关于酒吧的信息:https://www.mql5.com/en/forum/173124
 

几个问题

大家好。

我已经测试了我的代码,它非常接近于此。我有几个问题,希望你们能帮我解决。

我在int init()中写了这个。

如果(Bars < D1FastMAPeriod || Bars < D1SlowMAPeriod)

{

Alert("ERROR- INSUFFICIENT BARS TO CALCULATE SMA ON DAILY CHART")。

return(0);

}

SlowMAPeriod是200。当我从2009年1月1日开始回测时,即使我在图表上清楚地看到有足够的条形图来计算2008年的200SMA,也会出现这个错误。我在这里错过了什么吗?

2.2.我在H4图表上进行交易,但只在每日趋势的方向上进行。我通过使用以下代码得出数值。

SlowMACurrent = iMA(Symbol(), PERIOD_D1, D1SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1)。

FastMACurrent = iMA(Symbol(), PERIOD_D1, D1FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

然后,当我搜索一个多头头寸时,我通过使用来引用它。

if (FastMACurrent > SlowMACurrent && ... 等 ... )

这是否正确,因为它似乎没有正确过滤我的交易?

3.我还在H4图表上使用了一个趋势过滤器,只在价格超过过去120期的前一个高点(然后保持在120期的低点之上)时才做多头。我使用这个代码。

Donchian_Low = Low。

Donchian_High = High。

static bool UpTrend = FALSE。

静态 bool DownTrend = FALSE。

如果 (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}

if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}.

然后我使用以下代码(比如说对于多头头寸)。

如果(FastMACurrent > SlowMACurrent && UpTrend == TRUE && DownTrend == FALSE ...等等 ... )

但它似乎不起作用,因为当我用120个周期的唐吉诃德通道检查我的回测图时,它没有结尾。有什么想法吗?

谢谢。

 

...

1.把它放在start()函数 的开头。当涉及到像Bars这样的数据时,Init是不可靠的

2.只要FastMACurrent>SlowMACurrent,该条件就为真。这是你想要的,还是你在寻找交叉点?

3.这可能与第2点有关。你必须 "缩小 "可以输入订单的条件,因为这种方式涵盖了太多的可能性。

crsnape@btinternet.com:
大家好。

我已经测试了我的代码,它非常接近于此。我有几个问题,希望你能帮我解决。

我在int init()中写了这个。

如果(Bars < D1FastMAPeriod || Bars < D1SlowMAPeriod)

{

Alert("ERROR- INSUFFICIENT BARS TO CALCULATE SMA ON DAILY CHART")。

return(0);

}

SlowMAPeriod是200。当我从2009年1月1日开始回测时,即使我在图表上清楚地看到有足够的条形图来计算2008年的200SMA,也会出现这个错误。我在这里错过了什么吗?

2.2.我在H4图表上进行交易,但只在每日趋势的方向上进行。我通过使用以下代码得出数值。

SlowMACurrent = iMA(Symbol(), PERIOD_D1, D1SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1)。

FastMACurrent = iMA(Symbol(), PERIOD_D1, D1FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

然后,当我搜索一个多头头寸时,我通过使用来引用它。

if (FastMACurrent > SlowMACurrent && ... 等 ... )

这是否正确,因为它似乎没有正确过滤我的交易?

3.我还在H4图表上使用了一个趋势过滤器,只在价格超过过去120期的前一个高点(然后保持在120期的低点之上)时才做多头。我使用这个代码。

Donchian_Low = Low。

Donchian_High = High。

static bool UpTrend = FALSE。

静态 bool DownTrend = FALSE。

如果 (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}

if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}.

然后我使用以下代码(比如说对于多头头寸)。

如果(FastMACurrent > SlowMACurrent && UpTrend == TRUE && DownTrend == FALSE ...等等 ... )

但它似乎不起作用,因为当我用120个周期的唐吉诃德通道检查我的回测图时,它没有结尾。有什么想法吗?

提前感谢。
 

你好mladen。

1.好的会做。

2.是的,没错,我不想在十字星上进场,只是在短期图表上使用它作为多/空过滤器,例如,如果日线图上的快速MA高于慢速MA,我只希望它在H4图表上考虑多头。所以我认为我的编码是正确的?

3.我不知道我是否知道你的意思,但我在init start()下面放了这个东西

static bool UpTrend = FALSE;

静态 bool DownTrend = FALSE。

如果 (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}

if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}.

我是否应该把静态的bool变量放在最开始,让它们成为全局变量?会不会是这个原因造成的?

 

...

3.当问唐奇安_低 时,会发生什么(这是在大多数时候)。你的静态变量仍然显示 "旧的 "状态,即使它不再有效(它 "继承 "了状态,这样它就发出信号说它在上面或下面,即使它不再有效了)。检查一下 这是否是造成你问题的原因

crsnape@btinternet.com:
嗨 mladen,

1.确定就可以了。

2.是的,没错,我不想在十字架上进场,只是在短期图表上使用它作为多/空过滤器,例如,如果日线图上的快速MA高于慢速MA,我只希望它在H4图表上考虑多头。所以我认为我的编码是正确的?

3.我不知道我是否知道你的意思,但我在init start()下放了这个东西

static bool UpTrend = FALSE;

静态 bool DownTrend = FALSE。

如果 (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}

如果 (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}.

我是否应该把静态的bool变量放在最开始,使它们成为全局变量?这是否会造成这种情况?
 

说得好。我会研究一下。

关于函数 的一个问题,是否可以在一个函数中调用一个函数?例如,我有这样一个函数。

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

如果(......等

然后我再调用它。

double GetLotsLong (int LowRisk, int HighRisk, double SLDistanceLong, string GetWinLossPreviousShort)