如何编码? - 页 317

 

你好。

我正在考虑如何编写这个指标/工具。

我需要一个指标,脚本或类似的东西,我可以决定一些天数的范围(例如12/10/2012-15/10/2012或15/10/2012-15/10/2012),然后它在csv或excel文件中写出图表中显示的蜡烛的开盘高点和收盘,这取决于TF(例如,如果我只决定一天并在1小时TF中附上它,它会写出24个蜡烛的规格)。

谢谢你的帮助

 

警报信号问题。

大家好,我写的MT4代码有一个小问题。这个代码应该是观察三个指数,随机指数,RSI和CCI。如果随机指数向上或向下穿过它的信号线,RSI的70和6期相互向上或向下交叉,CCI高于或低于零,如果整个三个指数都在它们的信号线以上,应该有一个买入信号,如果三个指数都在它们的信号线以下,应该有卖出信号。....... 这个代码可以工作,但是每当有警报时,它就会在蜡烛的每个点上不断重复。我怎样才能使这个警报只在当前蜡烛上满足三个条件时发出,而不是重复发出。这是下面的代码。

如果(Period()==240){

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0) 。

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0)。

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// 警报

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)){

Alert("Buy Arrow","/n","当前时间 是",TimeToStr(CurTime()),"/n",Symbol())。

}

如果((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)){

Alert("Sell Arrow","/n", "当前时间是",TimeToStr(CurTime()),"/n",Symbol()。

}

}

 
mladen:
pooh

这只是因为不同符号的价值可以相差很多(例如GBPJPY现在大约是126,而EURUSD大约是100倍 - 当你在同一个图表上画出这些价值时,EURUSD的价值根本 "不在画面上,因为Metatrader把GBPJPY的价值作为图表缩放的标准)。

看一下这个主题:https://www.mql5.com/en/forum/178052。在该线程中,已经有几个类似问题的解决方案了

谢谢你,Mladen。按照你的链接,找到了适合我需要的指标。

pooh

 

试着像这样:

if(Period()==240)

{

static datetime lastAlerted=0;

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// alerts

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI >0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Buy Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI <0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Sell Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

}
Mastercash:
大家好,我写的MT4代码有一个小问题。这个代码应该是观察三个指数,随机指数,RSI和CCI。如果随机指数向上或向下穿越其信号线,RSI的周期70和6相互向上或向下交叉,CCI高于或低于零,如果整个3个指数都在其信号线以上,应该有一个买入信号,或者如果3个指数都在其信号线以下,应该有卖出信号。....... 这个代码可以工作,但是每当有警报时,它就会在蜡烛的每个点上不断重复。我怎样才能使这个警报只在当前蜡烛上满足三个条件时发出,而不是重复发出。这是下面的代码。

如果(Period()==240){

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0)。

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0)。

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// 警报

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)){

Alert("Buy Arrow","/n", "当前时间是",TimeToStr(CurTime()),"/n",Symbol())。

}

如果((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)){

Alert("Sell Arrow","/n", "当前时间是",TimeToStr(CurTime()),"/n",Symbol()。

}

}
 

警报问题

谢谢你mladen,我会尝试的。我从来没有注意到LastAlert()这个函数,请你让我知道在哪里可以得到所有这些 "分批唤醒 "mt4函数的目录。

 

掌握现金

注意:这不是一个函数,而是一个静态变量,用来存储最后一次警报的时间(bar time),这样可以防止在同一个bar上出现多个警报。不幸的是,在metatrader中没有LastAlert()这样的函数,所以我们必须找到变通的方法,就像例子中的湖泊一样,来解决函数缺乏的问题。

Mastercash:
谢谢你mladen,我会尝试的。我从来没有注意到LastAlert()这个函数,请你让我知道在哪里可以得到所有这些 "批判 "mt4函数的目录。
 

你好,mladen。

我需要为最后一小时的24支蜡烛分配24个变量。

我需要对蜡烛做一些计算,结果将被分配到一个缓冲区。

我怎样才能对前一天的24小时蜡烛进行编码?

谢谢你

 

dasio

你可以使用与此类似的东西(这种模式不使用数组)。另外,这个例子是针对当天的

datetime startTime = iTime(NULL,PERIOD_D1,0);

for (int i=iBarShift(NULL,PERIOD_H1,startTime); TimeDayOfYear(iTime(NULL,PERIOD_H1,i))==TimeDayOfYear(startTime); i--)

{

//

//

// processing the hourly data ... just an example here

//

//

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); // and so on ...

}

dasio:
你好,mladen。

我需要为最后一小时的24支蜡烛分配24个变量。

我需要对蜡烛做一些计算,结果将被分配到一个缓冲区。

我怎样才能对前一天的24小时蜡烛进行编码?

谢谢你
 
mladen:
邓小平

你可以使用与此类似的东西(这种模式不使用数组)。另外,这个例子是针对当前日期的

datetime startTime = iTime(NULL,PERIOD_D1,0);

for (int i=iBarShift(NULL,PERIOD_H1,startTime); TimeDayOfYear(iTime(NULL,PERIOD_H1,i))==TimeDayOfYear(startTime); i--)

{

//

//

// processing the hourly data ... just an example here

//

//

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); // and so on ...

}

谢谢你mladen。

在这个例子中。

double close =iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); //

哪支蜡烛代表什么,我怎样才能切换到下一支蜡烛?

谢谢你

 

大西奥

它已经在循环浏览当天的所有小时。我把iClose() 和iOpen()放在一起,只是为了举例说明从1小时以外的时间段调用。如果你想访问与当前日期不同的日期,那么请将startTime=iTime(NULL,PERIOD_D1,0); 部分替换为你希望收集的任何日期的数据。

dasio:
谢谢你mladen。

在这个例子中。

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); //

哪支蜡烛代表什么,我怎样才能切换到下一支蜡烛?

谢谢你