如何编码? - 页 327

 

大家好,我在Stocastic的EA中遇到了这个特殊的错误。

我的标准是这样的。

当我的stocEquator交叉上升(上升趋势)时,当我的stocTrigger交叉上升时,只有多头会被触发;当stocEquator交叉下降(下降趋势)时,当stocTrigger交叉下降时只有空头 会被触发。

然而,当我运行EA进行测试时,没有触发任何交易,我想知道这里会有什么问题,如果有人能在这里帮助我,我会很感激。

谢谢你的帮助。

请注意

特伦斯

int isCrossedTrigger= 0;

double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1) 。

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2)。

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;

如果((diff1Trigger*diff2Trigger)<0)

{

如果(shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

否则isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1) 。

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

如果((diff1Equator*diff2Equator)<0)

{

如果(shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1。

否则isCrossedEquator = 2。

}

if(total < 2)

{

如果(isCrossedTrigger==1 && isCrossedEquator==1)

{

购买

}

如果(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

卖出

}

return(0);

}

return(0);

 
tkuan77:
大家好,我在Stocastic上的EA有这个特殊的错误。

我的标准是这样的。

当我的stocEquator交叉上升(上升趋势)时,当我的stocTrigger交叉上升时,只有多头会被触发;当stocEquator交叉下降(下降趋势)时,当stocTrigger交叉下降时,只有空头会被触发。

然而,当我运行EA进行测试时,没有触发任何交易,我想知道这里会有什么问题,如果有人能在这里帮助我,我会很感激。

谢谢你的帮助。

请注意

特伦斯

int isCrossedTrigger= 0;

double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1) 。

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;

如果((diff1Trigger*diff2Trigger)<0)

{

如果(shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

否则isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1) 。

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

如果((diff1Equator*diff2Equator)<0)

{

如果(shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1。

否则isCrossedEquator = 2。

}

if(total < 2)

{

如果(isCrossedTrigger==1 && isCrossedEquator==1)

{

购买

}

如果(isCrossedTrigger==2 && isCrossedEquator ==2)

{

卖出

}

return(0);

}

return(0);

特伦斯

我唯一不能检查的是 "总数 "变量。

如果total变量设置得当,该代码应该可以工作。这是我用你的条件做的测试指标,它发出了有效的买入和卖出信号(在视觉模式下运行指标,你会看到它何时发出警报),所以错误在其他地方

#property indicator_separate_window

#property indicator_buffers 0

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int init()

{

return(0);

}

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int start()

{

int total = 0;

int isCrossedTrigger= 0;

double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

else isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

else isCrossedEquator = 2;

}

//

//

//

//

//

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

}

return(0);

}
 

嗨,mladen,谢谢你的强调。我回头看了一下我的代码,没有弄明白你说的 "总数 "变量是什么意思。我的错误可能是什么原因造成的?

请注意

特伦斯

//+------------------------------------------------------------------+

//| 我的第一份工作是什么?

//| ǞǞǞ

//|MetaTrader 4 交易平台 / MetaQuotes 软件公司。|

//+------------------------------------------------------------------+

#财产版权 "TK"

#property link "http://www.metaquotes.net"

//---输入参数

extern double TakeProfit=500.0;

extern double Lots=0.1;

extern double StopLoss=500.0;

//+------------------------------------------------------------------+

//| 专家初始化函数 |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//|专家的去初始化功能|

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//|专家启动功能|

//+------------------------------------------------------------------+

datetime newbar。

int start()

{

如果(newbar==Time[0])返回(0)。

否则newbar=Time[0]。

int ticket, total;

如果(Bars<100)

{

Print("小于100的条数")。

return(0);

}

如果(TakeProfit<10)

{

Print("TakeProfit小于10")。

return(0);

}

//+------------------------------------------------------------------+

//|专家启动功能|随机触发器

//+------------------------------------------------------------------+

// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); ///相关的Stoc运动

// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); // orignial Stoc movement

//+--------------------------------------------------------------------------------------+

//|专家启动功能|设置仅当线越过和蜡烛关闭时触发交易|//

//+--------------------------------------------------------------------------------------+

int isCrossed = 0;

double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

double diff1 = shortStoc1-longStoc1;

double diff2 = shortStoc2-longStoc2;

如果((diff1*diff2)<0)

{

如果(shortStoc1>longStoc1)

isCrossed = 1。

否则isCrossed = 2。

}

// Equator Stoc Start -------------------------------------

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

如果((diff1Equator*diff2Equator)<0)

{

如果(shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1。

否则isCrossedEquator = 2。

}

// Equator Stoc End -------------------------------------

//+------------------------------------------------------------------------------------+

//| expert end function | 设置仅当线段交叉且蜡烛关闭时触发交易 |//

//+------------------------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| expert end function | Stochastic Trigger

//+------------------------------------------------------------------+

//| experts start function | Trigger order

//+------------------------------------------------------------------------------------------------------------+

total = OrdersTotal();

if(total < 2) //限制开启的交易数量

{

如果(isCrossed == 1 && isCrossedEquator == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point, Ask+TakeProfit*Point,

"My EA",12345,0,Green)。

如果(ticket>0)

{

如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("BUY order opened : ",OrderOpenPrice());

}

否则 Print("打开BUY订单错误。",GetLastError())。

return(0);

}

如果(isCrossed == 2 && isCrossedEquator == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point, Bid-TakeProfit*Point,

"My EA",12345,0,Red)。

如果(ticket>0)

{

如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Sell order opened : ",OrderOpenPrice());

}

否则 Print("打开卖出订单错误。",GetLastError())。

return(0);

}

return(0);

}

return(0);

}

//+------------------------------------------------------------------+

//| 专家级的终结函数 |

//+------------------------------------------------------------------+

mladen:
特伦斯

我唯一不能检查的是 "总数 "变量

如果总变量设置得当,代码应该可以工作。这是我用你的条件测试的指标,它发出了有效的买入和卖出信号(在视觉模式下运行指标,你会看到它何时发出警报),所以错误在其他地方。

#property indicator_separate_window

#property indicator_buffers 0

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int init()

{

return(0);

}

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int start()

{

int total = 0;

int isCrossedTrigger= 0;

double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

else isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

else isCrossedEquator = 2;

}

//

//

//

//

//

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

}

return(0);

}
 
tkuan77:
嗨,mladen,谢谢你的强调。我回头看了一下我的代码,没有弄明白你说的 "总数 "变量是什么意思。我的错误可能是什么原因造成的?

关于我们

特伦斯

//+------------------------------------------------------------------+

//| 尊敬的女士们、先生们、女士们: 你们好!欢迎来到我们的网站。

//| 尊敬的女士们、先生们、女士们: 大家好!我是来自北京的张先生。

//|MetaTrader 4 交易平台 / MetaQuotes 软件公司。|

//+------------------------------------------------------------------+

#财产版权 "TK"

#property link "http://www.metaquotes.net"

//---输入参数

extern double TakeProfit=500.0;

extern double Lots=0.1;

extern double StopLoss=500.0;

//+------------------------------------------------------------------+

//| 专家初始化函数 |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//|专家的去初始化功能|

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//|专家启动功能|

//+------------------------------------------------------------------+

datetime newbar。

int start()

{

如果(newbar==Time[0])返回(0)。

否则newbar=Time[0]。

int ticket, total;

如果(Bars<100)

{

Print("小于100的条数")。

return(0);

}

如果(TakeProfit<10)

{

Print("TakeProfit小于10")。

return(0);

}

//+------------------------------------------------------------------+

//|专家启动功能|随机触发器

//+------------------------------------------------------------------+

// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); ///相关的Stoc运动

// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); // orignial Stoc movement

//+--------------------------------------------------------------------------------------+

//|专家启动功能|设置仅当线越过和蜡烛关闭时触发交易|//

//+--------------------------------------------------------------------------------------+

int isCrossed = 0;

double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

double diff1 = shortStoc1-longStoc1;

double diff2 = shortStoc2-longStoc2;

如果((diff1*diff2)<0)

{

如果(shortStoc1>longStoc1)

isCrossed = 1。

否则isCrossed = 2。

}

// Equator Stoc Start -------------------------------------

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

如果((diff1Equator*diff2Equator)<0)

{

如果(shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1。

否则isCrossedEquator = 2。

}

// Equator Stoc End -------------------------------------

//+------------------------------------------------------------------------------------+

//| expert end function | 设置仅当线段交叉且蜡烛关闭时触发交易 |//

//+------------------------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| expert end function | Stochastic Trigger

//+------------------------------------------------------------------+

//| experts start function | Trigger order

//+------------------------------------------------------------------------------------------------------------+

total = OrdersTotal();

if(total < 2) //限制开启的交易数量

{

如果(isCrossed == 1 && isCrossedEquator == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point, Ask+TakeProfit*Point,

"My EA",12345,0,Green)。

如果(ticket>0)

{

如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("BUY order opened : ",OrderOpenPrice());

}

否则 Print("打开BUY订单错误。",GetLastError())。

return(0);

}

如果(isCrossed == 2 && isCrossedEquator == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point, Bid-TakeProfit*Point,

"My EA",12345,0,Red)。

如果(ticket>0)

{

如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Sell order opened : ",OrderOpenPrice());

}

否则 Print("打开卖出订单错误。",GetLastError())。

return(0);

}

return(0);

}

return(0);

}

//+------------------------------------------------------------------+

//|专家结束功能|

//+------------------------------------------------------------------+

特伦斯

在我的测试中,该EA工作

以下是测试结果和回测报告。在1分钟的时间框架内测试

附加的文件:
tk.zip  16 kb
result.gif  13 kb
 

大家好,谁能帮我看看下面这段代码,,,,,它继续在每个tick上给我声音提示,而不是只有在交易所需的条件被触发时才有声音提示!我不希望在每个tick或新的蜡烛图形成时都有声音。我不希望在每个点或新的蜡烛图形成时发出警报。

#我不希望在每一个点或新的蜡烛图形成时发出警报。

#属性 indicator_buffers 2

#属性 indicator_color1 Lime

#属性 Indicator_color2 Red

//---- 输入参数

extern int ADXbars=14;

extern int CountBars=350;

//---- 缓冲区

double val1[];

double val2[];

double b4plusdi,nowplusdi,b4minusdi,nowminusdi;

//+------------------------------------------------------------------+

//|自定义指标去初始化函数|

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//|自定义指标迭代函数|

//+------------------------------------------------------------------+

int init()

{

//--指标短名称

IndicatorShortName("PipsdatorPro1("+Symbol()+")")。

//---- 指标线

IndicatorBuffers(2);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,234);

SetIndexBuffer(0,val1);

SetIndexBuffer(1,val2);

//----

return(0);

}

//+------------------------------------------------------------------+

//| AltrTrend_Signal_v2_2 |/|

//+------------------------------------------------------------------+

int start()

{

如果(CountBars>=Bars) CountBars=Bars;

SetIndexDrawBegin(0,Bars-CountBars);

SetIndexDrawBegin(1,Bars-CountBars)。

int i,shift,counted_bars=IndicatorCounted()。

//----,检查可能的错误

if(counted_bars<0) return(-1);

//---- 初始零点

如果(counted_bars<1)

{

for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0。

for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0。

}

for (shift = CountBars; shift>=0; shift--)

{

b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1)。

nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift)。

b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);

nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift)。

如果(b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)

{

val1[shift]=Low[shift]-5*Point;

// Alert("Buy Arrow","\n", "Current time is",TimeToStr(CurTime()),"\n",Symbol())。

i++;

}

如果(b4plusdinowminusdi && i!=1)

{

val2[shift]=High[shift]+5*Point。

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

i++;

}

}

返回(0)。

}

//+---------------------------------------------------------------+

 
Mastercash:
大家好,谁能帮我看看下面这段代码,,,,,它继续在每个tick上给我声音提示,而不是只有在交易所需的条件被触发时才有声音提示!我不想在每个tick或新的蜡烛图形成时都有声音提示。我不希望在每一个点或者在新的蜡烛图形成时发出警报。

#属性 indicator_chart_window

#属性 indicator_buffers 2

#属性 indicator_color1 Lime

#属性 indicator_color2 Red

//---- 输入参数

extern int ADXbars=14;

extern int CountBars=350;

//---- 缓冲区

double val1[];

double val2[];

double b4plusdi,nowplusdi,b4minusdi,nowminusdi;

//+------------------------------------------------------------------+

//|自定义指标去初始化函数|

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//|自定义指标迭代函数|

//+------------------------------------------------------------------+

int init()

{

//--指标短名称

IndicatorShortName("PipsdatorPro1("+Symbol()+")")。

//---- 指标线

IndicatorBuffers(2);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,234);

SetIndexBuffer(0,val1);

SetIndexBuffer(1,val2);

//----

return(0);

}

//+------------------------------------------------------------------+

//| AltrTrend_Signal_v2_2 |/|

//+------------------------------------------------------------------+

int start()

{

如果(CountBars>=Bars) CountBars=Bars;

SetIndexDrawBegin(0,Bars-CountBars);

SetIndexDrawBegin(1,Bars-CountBars)。

int i,shift,counted_bars=IndicatorCounted()。

//----,检查可能的错误

if(counted_bars<0) return(-1);

//---- 初始零点

如果(counted_bars<1)

{

for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0。

for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0。

}

for (shift = CountBars; shift>=0; shift--)

{

b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1)。

nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift)。

b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);

nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift)。

如果(b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)

{

val1[shift]=Low[shift]-5*Point;

// Alert("Buy Arrow","\n", "Current time is",TimeToStr(CurTime()),"\n",Symbol())。

i++;

}

如果(b4plusdinowminusdi && i!=1)

{

val2[shift]=High[shift]+5*Point。

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

i++;

}

}

返回(0)。

}

//+---------------------------------------------------------------+

Mastercash,这里有一个该指标的版本https://www.mql5.com/en/forum/173574/page320,也许 会有帮助。

 
mladen:
特伦斯

在我的测试中,该EA工作

这里是测试结果,加上后面的测试报告。在1分钟的时间框架内测试

嗨,mladen,我根据你的意见重新审查了代码,我注意到只有当我的两个stocastic线在同一蜡烛上向上或向下触发时,交易才会被触发。

然而,我想达到的目的是,如果赤道指标向上交叉表示上升趋势,EA将 在快速指标向上触发时触发多头,反之亦然,而不是在同一根蜡烛上赤道和快速指标都向同一方向触发。

我曾试图调整EA以适应这一标准,但未能获得理想的结果。是不是我做错了什么?请帮助我。再次感谢。

谢谢

特伦斯

 
tkuan77:
你好,我根据你的意见重新审查了代码,我注意到只有当我的股价线在同一蜡烛上向上或向下触发时,交易才会被触发。

然而,我想达到的目的是,如果赤道指标向上交叉表示上升趋势,那么当快速指标向上触发时,EA将只触发多头,反之亦然,而不是在同一根蜡烛上让赤道和快速指标朝同一方向触发。

我曾试图调整EA以适应这一标准,但未能获得理想的结果。是不是我做错了什么?请帮助我。再次感谢。

谢谢

特伦斯

特伦斯

你可能需要写一个自定义的指标 来实现这个目标(在EA中,有些事情你根本无法用指标的方式来做)。

 
mladen:
Terrance 你可能需要写一个自定义的指标来完成这个任务(在EA中有些事情你根本无法用同样的方式来做指标)。

嗨,mladen,我不明白的是,为什么我可以用MA做这个,而不是iMA,尽管它是同一种标准?会不会是某种形式的指标设置?

谢谢

Terrance

 
tkuan77:
你好,mladen,我不明白的是,为什么我可以用MA而不是iMA做这个,尽管它是同一种标准?会不会是某种形式的指标设置?

观点

特伦斯

因为使用自定义指标,你可以保存两个点之间的状态(趋势),而当你使用iMA时,你不能(只是一个例子)。

原因: