如何将指标代码添加到 expertadvisor 代码中?

 

正如我上面提到的,我希望用随机编码 制作EA。

问题是如何在EA中添加指标代码?

 
albert_lim83:

问题是如何将指标代码添加到EA中?

你可以,但有一定的限制,但使用iCustom要容易得多。

但如果你真的想。 将一个指标代码转移到专家顾问代码中。指标结构 - MQL4文章

 

对于随机的,不需要iCustom

doubleiStochastic( string symbol, int timeframe, int %Kperiod, int %Dperiod, int slowing, int method, int price_field, int mode, int shift)
计算随机震荡指标并返回其值。
参数。
符号 - 符号,其数据应被用于计算指标。NULL表示当前符号。
时间框架 - 时间框架。它可以是任何一个时间框架 的枚举值。0表示当前图表的时间框架。
%Kperiod - %K线周期。
%Dperiod - %D线期。
缓慢 - 减速值。
方式 - MA方法。它可以是Moving Average method 枚举值中的任何一个。
price_field - 价格字段参数。可以是这些值中的一个。0 - 低价/高价或1 - 收盘/关门。
模式 - 指标行索引。它可以是任何一个指标线标识符 的枚举值。
移位 - 从指标缓冲区中提取的数值的索引(相对于当前条形图,在给定的时间段前移位)。
样本。
 if(iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0)>iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0) return(0)。
这里有很多编码帮助,可以找到MQL4函数的字母索引https://www.mql5.com/en/forum/122679

 

如何在EA中添加RVI指标?

也使用与添加随机指标 的方式相同的代码?

 
阅读文件
 
albert_lim83:

如何在EA中添加RVI指标?

也使用与添加随机指标的方式相同的代码?


iCustom() 或 iRVI()

 
albert_lim83:

如何在EA中添加RVI指标?

也使用与添加随机指标的方式相同的代码?


  1. iCustom的详细解释 - MQL4论坛
 

我试图将RVI指标添加到逃生EA中,但失败了......。

它显示

全局范围内的表达式不允许

函数 定义出乎意料

不平衡的括号

如何解决这些错误?

 

这是我今天早上做的代码。

谁能帮我解决这个问题?


//+------------------------------------------------------------------+
int init()
{
//----指标缓冲区 的映射
SetIndexBuffer(0,Buffer);
SetIndexBuffer(1,SignalBuffer);
//---- 指标线
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
//---- 绘图设置
SetIndexDrawBegin(0,RVIPeriod+3);
SetIndexDrawBegin(1,RVIPeriod+7);
//---- 数据窗口和指标子窗口标签的名称
IndicatorShortName("RVI("+RVIPeriod+")")。
SetIndexLabel(0, "RVI")。
SetIndexLabel(1, "RVIS")。
//---- 初始化完成
返回(0)。
}
{
double bid =MarketInfo(Symbol(),MODE_BID); // 请求获得Bid的值
double ask =MarketInfo(Symbol(),MODE_ASK); // 请求获得Ask值。
double point =MarketInfo(Symbol(),MODE_POINT);//请求获得Point值。
return; // 退出start()
如果(AccountFreeMargin()<100)
Print("我们没有钱。Free Margin = ", AccountFreeMargin())。
return(0);
}

int start()
{
{
int i,j,nLimit,nCountedBars;
双重dValueUp,dValueDown,dNum,dDeNum。
//----
if(Bars<=RVIPeriod+8) return(0);
//----
nCountedBars=IndicatorCounted()。
//----,检查可能的错误
if(nCountedBars<0) return(-1);
//----,最后一个计数的柱子将被重新计数。
nLimit=Bars-RVIPeriod-4;
如果(nCountedBars>RVIPeriod+4)
nLimit=Bars-nCountedBars。
//---- 在第1个缓冲区中计算的RVI
for(i=0; i<=nLimit; i++)
{
dNum=0.0。
dDeNum=0.0。
for(j=i; j<i+RVIPeriod; j++)

{
dValueUp=((Close[j]-Open[j])+2*(Close[j+1]-Open[j+1])+2*(Close[j+2]-Open[j+2])+(Close[j+3]-Open[j+3]))/6;
dValueDown=((High[j]-Low[j])+2*(High[j+1]-Low[j+1])+2*(High[j+2]-Low[j+2])+(High[j+3]-Low[j+3]))/6;
dNum+=dValueUp。
dDeNum+=dValueDown。
}
如果(dDeNum!=0.0)
Buffer[i]=dNum/dDeNum。
否则
Buffer[i]=dNum。
}
//---- 信号线在第2个缓冲器中计数
nLimit=Bars-RVIPeriod-7。
如果(nCountedBars>RVIPeriod+8)
nLimit=Bars-nCountedBars+1。
for(i=0; i<=nLimit; i++)
SignalBuffer[i]=(Buffer[i]+2*Buffer[i+1]+2*Buffer[i+2]+Buffer[i+3])/6;
//----
返回(0)。
}
{
OrderSend(Symbol,LotSize,Ask,StopLoss,TakeProfit,0,0)。
如果(Close<i)
OpenBuy()。
return(0);

OrderSend(Symbol,LotSize,Bid,StopLoss,TakeProfit,0,0)。
如果(Close>i)
OpenSell()。
return(0);
}


double GetSizeLot() { return(LotSize); }
double GetTakeProfitBuy() { return(Ask+TakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-TakeProfit*Point); }
double GetStopLossBuy() { return(Bid-StopLoss*Point); }
double GetStopLossSell() { return(Ask+StopLoss*Point); }
string GetCommentForOrder() { return(); }

return(0); }

 

在发帖之前,请阅读其他一些主题......然后你会看到许多像这样的请求。

请使用这个来发布代码 ..这使它更容易阅读。

 
albert_lim83:

这是我今天早上做的代码。

有谁能帮助我解决这个问题?

你不能在EA中使用指标代码......请阅读我发布的链接的主题。 你必须有相同数量的{} 也有相同数量的. . . 我不是已经说过一次了吗?https://www.mql5.com/en/forum/139447 我猜你不屑于从其他帖子中学习?
原因: