编码帮助 - 页 38

 

...

在指标中,唯一的方法是保持无休止的循环,直到检测到一些事件(键盘、鼠标...)。

但这也意味着其余的终端函数 的执行被停止了(这和你有一个坏的指标崩溃时一样--阻止你的元数据),所以,这不是一个好的解决方案。通常用于此的功能(睡眠)允许在你的代码暂停时执行其他代码(这将是你让终端中的其他东西完成工作的时间)在指标中被禁用,所以它不能被用来作为解决方案

marley60:
如果有一个警报,它会发出 "pling "的声音,有没有可能在我停止警报之前播放警报声?(原因是:当我在厕所或厨房时,我不会听到一个 "pling "的声音)我用一首歌代替了警报声,但我希望能在播放一次/播放到停止之间进行选择(就像在tradestation中那样)。
 

关于索引的问题

你好,Mladen。

我看到有人这样调用指标,如Ind[3][0][1],请问第一和第二定义指数是什么意思?

谢谢

启明

 

EA中的 "之 "字形问题

你好。

我在我的EA中使用标准的Zigzag indy。我使用以下代码来确定Zigzag节点。我注意到,有时MT4会从错误的时间框架返回之字形节点。例如,当我试图获得H1的人字形节点时,MT4返回的是M15的人字形节点值。有人遇到过这样的问题吗?如果您知道更多关于Zigzag的信息和可能的问题领域,请告知。

非常感谢。

FFJason

注:TF是时间框架,我从不同的时间框架输入不同的值来获得之字形节点。不知何故,当使用特定的TF时,MT4混淆了节点值。

void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{ int t=0; int p=0; int q=0; double nd2i;

for (i=0; i<=150; i++)

{ nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

 

如何在前一个订单的S/L之后打开新的订单?

在前一个订单的S/L之后打开新的订单。
亲爱的先生。

有没有人知道EA的程序,在关闭订单后,基于S/L的新订单被打开?

问讯
 

...

你可能有这样的情况:一个时间框架的ZigZag峰值与另一个时间框架的ZigZag峰值相同(这不是一个不寻常的情况,因为他们正在寻找峰值)。就时间框架而言,你用该代码得到了正确的时间框架值。也许只需要在代码中做一个改动,以确保你得到4个最后的ZigZag值,然后代码将是这样的

void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{

int p=0; int q=0; int max=iBarShift(NULL,TF,0); double nd2i;

for (int i=0; i<max; i++)

{

nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

[/PHP]

As you can see only the loop end is changed from "150" to "Bars-1"

novalight:
Hi,

I use standard Zigzag indy in my EA. I use the following code to determine the zigzag nodes. I noticed that sometimes the MT4 returns the zigzag nodes from the wrong time frame. For example, when I try to get H1 zigzag nodes, MT4returns M15 zigzag node values. Has anyone come across such problem before? If you know more info about zigzag and the possible problem area, please advise.

Many thanks.

FFJason

note: TF is the time frame which I feed different values for getting zigzag nodes from different time frame. Somehow MT4 mixed up the node values when a specific TF is used.

[PHP]

void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{ int t=0; int p=0; int q=0; double nd2i;

for (i=0; i<=150; i++)

{ nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

 

EA中的 "之 "字形问题

嗨,Maiden。

非常感谢您的帮助。

我读了一些关于iBarShift的资料,你的iBarShift(NULL,TF,0)似乎可以得到图表上的条数。如果我误解了你使用iBarShift的意图,请纠正我。

我看了那些ZigZag返回错误节点值的例子,搜索数(我用的是150)不是问题。另外,我也明白,有些节点对于不同的时间框架是相同的,但是我发现的错误是两个或更多的节点,而相应的条形图数字都指向不同的时间框架。这就是令我困惑的问题。

今天我在Zigzag上发现了更令人困惑的问题。我使用Alert来显示该程序返回的节点,我发现有时该程序会返回一对正确的节点和它的条形号码,但另一个节点和条形号码都是0,这真的很奇怪。我进一步加强了该程序,通过以下代码确保没有节点是0值。我只是希望这不是MT4跳动的心跳或停滞,并抛出垃圾给我的EA。我这样说的原因是,我的其他EA,当我的程序试图插入SL和TP,或收集OP值时,会显示警告信息,而MT4经常跳过这些步骤,并返回0值。我必须加强我的程序,注意这些情况,并确保这些任务得到正确执行。

请指教。我已经束手无策了。非常感谢您的帮助。干杯。

诺瓦利特

int iGetNode4(int TF, double& lwnd4, double& hgnd4, int& lwnd4bar, int& hgnd4bar)

{ lwnd4=0; hgnd4=0; lwnd4bar=0; hgnd4bar=0; int t=0,p=0; //node 4 = arrow

for (i=0; i<=120; i++)

{ double lowi=iLow(NULL,TF,i); double highi=iHigh(NULL,TF,i);

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==lowi && lowi!=0) {if (t==0) {lwnd4=iLow(NULL,TF,i); lwnd4bar=i; t++; if(lwnd4==0) Alert(lwnd4);}}

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==highi && highi!=0) {if (p==0) {hgnd4=iHigh(NULL,TF,i); hgnd4bar=i; p++;if (hgnd4==0) Alert(hgnd4);}}

if (t==1 && p==1) break;

}

if (lwnd4bar<hgnd4bar) return(1); //current node 4 is a low node for Long

if (lwnd4bar>hgnd4bar) return(-1); //current node 4 is a high node for Short

return;

}

[/PHP]

mladen:
You probably have a case when the ZigZag peak of one time frame is the same as the ZigZag peak of another time frame (which is not an unusual case since they are looking for peaks). As far as time frames are concerned, you are getting correct time frame values with that code. Maybe just one change in the code has to be done in order to ensure that you get 4 last ZigZag values, and then the code would be like this

[PHP]void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{

int p=0; int q=0; int max=iBarShift(NULL,TF,0); double nd2i;

for (int i=0; i<max; i++)

{

nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

As you can see only the loop end is changed from "150" to "Bars-1"
 

...

至于iBarShift(NULL,TF,0):是的,它返回目标时间框架的总条数。但是这个循环不会被执行那么多次,只要找到最后4个ZigZag峰,它就会存在。

现在为了争论的目的,想象一下:你为一个时间框架调用该函数,你有150个条形的限制来寻找最后4个峰值。它完成了工作,然后你再去寻找另一个时间段。而且,只是为了争论起见,想象一下第4个峰值是在前150条之外。将会发生什么。由于你的数组没有被清理,之前寻找的时间段的一些结果仍然存在,因为在第150个条形图中,并不是所有的4个峰值都被发现,一些之前发现的峰值被留在那里,因为它们是在当前寻找的时间段内发现的。

这就是添加该代码的目的:确保它确实找到了最后4个峰值。有时它需要10个小节,有时需要1000个小节(这完全取决于ZigZag,不是一个固定的小节数),但它不会循环 "小节 "次数。它将只循环必要的次数,并确保所有4个峰值都来自目标时间框架。

就时间框架的混淆而言,我不认为它正在发生。目标时间段的历史文件的打开方式(只需将目标时间段的分钟数添加到符号名称中)使得在不改变时间段参数的情况下,不可能在一次循环中读取两个时间段的数据(在这种情况下只打开一个历史文件,无法访问不同时间段的数据)。

novalight:
嗨,梅登。

非常感谢您的帮助。

我读了一些关于iBarShift的资料,你的iBarShift(NULL,TF,0)似乎可以得到图表上的总条数。如果我误解了你使用iBarShift的意图,请纠正我。

我看了那些ZigZag返回错误的节点值的例子,搜索数(我用150)不是问题。另外,我也明白,有些节点对于不同的时间框架是相同的,但是我发现的错误是两个或更多的节点,而相应的条形图数字都指向不同的时间框架。这就是令我困惑的问题。

今天我在Zigzag上发现了更令人困惑的问题。我使用Alert来显示该程序返回的节点,我发现有时该程序会返回一对正确的节点和它的条形号码,但另一个节点和条形号码都是0,这真的很奇怪。我进一步加强了该程序,通过以下代码确保没有节点是0值。我只是希望这不是MT4跳动的心跳或停滞,并抛出垃圾给我的EA。我这样说的原因是,我的其他EA,当我的程序试图插入SL和TP,或收集OP值时,会显示警报信息,而MT4经常跳过这些步骤,并返回0值。我必须加强我的程序,注意这些情况,并确保这些任务得到正确执行。

请指教。我已经束手无策了。非常感谢您的帮助。干杯。

Novalight

int iGetNode4(int TF, double& lwnd4, double& hgnd4, int& lwnd4bar, int& hgnd4bar)

{ lwnd4=0; hgnd4=0; lwnd4bar=0; hgnd4bar=0; int t=0,p=0; //node 4 = arrow

for (i=0; i<=120; i++)

{ double lowi=iLow(NULL,TF,i); double highi=iHigh(NULL,TF,i);

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==lowi && lowi!=0) {if (t==0) {lwnd4=iLow(NULL,TF,i); lwnd4bar=i; t++; if(lwnd4==0) Alert(lwnd4);}}

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==highi && highi!=0) {if (p==0) {hgnd4=iHigh(NULL,TF,i); hgnd4bar=i; p++;if (hgnd4==0) Alert(hgnd4);}}

if (t==1 && p==1) break;

}

if (lwnd4bar<hgnd4bar) return(1); //current node 4 is a low node for Long

if (lwnd4bar>hgnd4bar) return(-1); //current node 4 is a high node for Short

return;

}

 

EA中的 "之 "字形问题

嗨,Maiden。

你说得很对!我审查了我的代码,发现150个节点对于大Z字形来说是不够的。我审查了我的代码,发现对于大Zigzag来说,150是不够的,如果不是所有的4个节点都被找到,整个识别哪个节点是第一个或最后一个的逻辑就会乱套。

总之,Zigzag和MT4都没有问题,这纯粹是我自己的错误,设置了太小的搜索数。我感谢你的时间、耐心,更重要的是 你愿意帮助......。

照顾好自己 .....

Novalight

mladen:
至于iBarShift(NULL,TF,0):是的,它返回目标时间框架的总条数。但是这个循环不会被执行那么多次,只要找到最后4个ZigZag峰,它就会存在。

现在,为了争论的目的,想象一下:你为一个时间框架调用该函数,你有150个柱子的限制来寻找最后4个峰值。它完成了工作,然后你再去寻找另一个时间段。而且,只是为了争论起见,想象一下第4个峰值是在前150条之外。将会发生什么。由于你的数组没有被清理,之前寻找的时间段的一些结果仍然存在,因为在第150个条形图中,并不是所有的4个峰值都被发现,一些之前发现的峰值被留在那里,因为它们是在目前寻找的时间段中发现的。

这就是添加该代码的目的:确保它确实找到了最后4个峰值。有时它需要10个小节,有时需要1000个小节(这完全取决于ZigZag,不是一个固定的小节数),但它不会循环 "小节 "次数。它将只循环必要的次数,并确保所有的4个峰值都来自目标时间框架。

就时间框架的混淆而言,我不认为会发生这种情况。目标时间段的历史文件的打开方式(简单地将目标时间段的分钟数添加到符号名称中)使得如果不改变时间段参数,就不可能在一个循环中读取两个时间段的数据(在这种情况下只打开一个历史文件,它不能访问不同时间段的数据)。
 

代码的帮助

谁能为SnakeBorders指标添加代码,增加以下两个图。

1.1.绘制白色范围中间的线图(如图中红线所示)。

2.2.绘制黄线图的另一个极端的线图(如图中青线所示)。 snakeborders.mq4

附加的文件:
sb.gif  39 kb
 

请有人帮助我创建这个指标

我想要的指标

条件

买入,当身体蜡烛的价格越过ma指标,并且rsi>rsi 50,在蜡烛收盘后打开新的蜡烛,开始一个蓝色箭头和蓝色线,直到卖出。

卖出:当主体蜡烛的价格穿过底部的ma指标,并且rsi < rsi 50,在蜡烛收盘后打开新的蜡烛,开始一个红色的箭头和红线,直到买入。

请加入改变值的输入

对不起,我的英语不好

非常感谢您