如何编码? - 页 298

 
mladen:
特伦斯

你有没有看到TSD的这个部分:课程

我认为很多问题已经在那里得到了回答,而且你可以在那里找到非常好的一般EA写作的例子。至于您的问题:我没有测试您的EA,所以我不知道。测试别人的EA的问题是,你必须知道它的想法和逻辑,而很多时候,根本不可能从代码本身 "读 "出这些。我们正在讨论的代码片段是关于如何在一个封闭的条形图上检测2个均线交叉,该代码只是在做这个,除此之外没有别的。这就是为什么我说 "它与SL或TP无关"

问候

姆拉登

嗨,Mladen,很抱歉再次打扰你。我查看了我的代码,我注意到不仅是我的TP和SL,有时连我的买入和卖出指令都不对。我看了你给我的课上的链接,是由codersgurus提供的,它与我的教程相同,也是我的代码的基础。我似乎无法在代码中找到错误的原因。

MA的交叉点与多头和空头订单一起工作,然而有时进场和出场似乎不正常,甚至当我做了一个基本的ASK功能来测试它。请给我一些启示。

谢谢你,谢谢你

特伦斯

 

...

特伦斯

首先:你的经纪人是ECN/STP吗?如果是,那么你不能在开单的同时设置止损和止盈,但你必须先开一个设置为0的订单,然后使用OrderModify()来设置止损和/或已开订单的止盈。

第二:另外,经常检查你在终端窗口的专家标签中是否有任何东西被写出来(检查是否有一些错误被写在那里:你可能会发现发生了什么和为什么。

第三:在每一个订单管理功能之后,放一行这样的字可能是个好主意。

int err=GetLastError(); Print(err);

在每个订单管理功能之后。错误描述你可以在experts/include/stderror.mqh文件中找到(有很多错误可能发生(只要看到可能的错误代码和描述的列表),你必须监控每一个可能的错误)有了已知的错误代码(上面的代码行),你可以集中精力纠正具体的错误,而不是猜测发生了什么。

tkuan77:
嗨,Mladen,很抱歉再次打扰你。我查看了我的代码,我注意到不仅是我的TP和SL,有时连我的买入和卖出指令都不对。我看了你给我的codersgurus的课程链接,它和我的教程是一样的,也是我的代码的基础。我似乎无法在代码中找到错误的原因。

MA的交叉点与多头和空头订单一起工作是应该的,但是有时进场和出场似乎不正常,甚至当我做了一个基本的ASK功能来测试它。请给我一些启示。

谢谢你

特伦斯
附加的文件:
terminal_1.gif  62 kb
 
mladen:
特伦斯

首先:你的经纪人是ECN/STP吗?如果是,那么你不能在开单的同时设置止损和止盈,但你必须先开一个设置为0的订单,然后用OrderModify()来设置已经开好的订单的止损和/或止盈。

第二:另外,经常检查你在终端窗口的专家标签中是否有任何东西被写出来(检查是否有一些错误被写在那里:你可能会发现发生了什么和为什么。

第三:最好能放一行这样的文字。

int err=GetLastError(); Print(err);
在每个订单管理功能之后。你可以在experts/include/stderror.mqh文件中找到错误描述(有很多错误可能发生(只见可能的错误代码和描述列表),你必须监控每一个可能的错误)有了已知的错误代码(上面的代码行),你可以集中精力纠正具体的错误,而不是猜测发生了什么。

嗨,Mladen。

谢谢你指出ECN/STP这个东西。我不知道这些,直到你提到它。我已经按照你的建议做了修改,但是现在对我来说,情况变得更糟。不仅入市和出市问题持续存在,我的SL现在也不见了。这比我想象的要难。

//---输入参数

extern double TakeProfit=1000.0;

extern double Lots=0.1;

extern double StopLoss=1500.0;

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

//| 专家初始化函数 |

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

int init()

{

//----

//----

return(0);

}

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

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

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

int deinit()

{

//----

//----

return(0);

}

int mainCrossed (double mainline1 , double mainline2)

{

static int mainlast_direction = 0;

静态int maincurrent_dirction = 0。

如果(mainline1>mainline2)maincurrent_dirction = 1; //main up

if(mainline1<mainline2)maincurrent_dirction = 2; //main down

if(maincurrent_dirction != mainlast_direction) //main changed

{

mainlast_direction = maincurrent_dirction;

返回(mainlast_direction)。

}

否则

{

返回(0)。

}

}

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

//|专家启动功能|

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

int start()

{

//----

int cnt, ticket, total;

双重shortEma, longEma, mainshortEma, mainlongEma。

如果(Bars<100)

{

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

return(0);

}

如果(TakeProfit<10)

{

Print("TakeProfit小于10")。

return(0); // 检查TakeProfit

}

int isCrossed = 0;

double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);

double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);

double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);

double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);

double diff1 = shortEma1-longEma1;

double diff2 = shortEma2-longEma2;

mainshortEma = iMA(NULL,0,30,0,MODE_SMA,PRICE_CLOSE,0)。

mainlongEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0)。

int mainisCrossed = mainCrossed(mainshortEma,mainlongEma)。

如果((diff1*diff2)<0)

{

如果(shortEma1>longEma1)

isCrossed = 1。

否则isCrossed = 2。

}

total = OrdersTotal();

如果(total < 1)

{

如果(isCrossed == 1 && mainshortEma > mainlongEma)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,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 && mainshortEma < mainlongEma)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,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);

}

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)。

如果(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

如果(OrderType()==OP_BUY)// 多头头寸被打开

{

OrderClose(OrderTicket(),OrderLots(), Ask-StopLoss*Point,3,Violet)。

//关闭头寸

return(0); // 退出

}

否则 // 转入空头头寸

{

OrderClose(OrderTicket(),OrderLots(),Bid+StopLoss*Point,3,Violet) 。

//关闭头寸

return(0); // 退出

}

}

}

return(0);

}

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

 
mladen:
Terrance

首先:你的经纪人是ECN/STP吗?如果是,那么你不能在开单的同时设置止损和止盈,但你必须先开一个设置为0的订单,然后用OrderModify()来设置已经开好的订单的止损和/或止盈。

第二:另外,经常检查你在终端窗口的专家标签中是否有任何东西被写出来(检查是否有一些错误被写在那里:你可能会发现发生了什么和为什么。

第三:最好能放一行这样的文字。

int err=GetLastError(); Print(err);
在每个订单管理功能之后。你可以在experts/include/stderror.mqh文件中找到错误描述(有很多错误可能发生(只见可能的错误代码和描述列表),你必须监控每一个可能的错误)有了已知的错误代码(上面的代码行),你可以集中精力纠正具体的错误,而不是猜测发生了什么。

嘿,Mladen,我想感谢你这几天的帮助。我设法找到了 我的代码中导致进入和退出错误的错误。

问候

Terrance

 

开设超过1笔交易

大家好,我一直试图让我的EA能够开启多笔交易,但到目前为止,我只能让它限制在1笔交易。

我的目标很简单。

当LWMA 10在LWMA 20下方交叉时,系统将做空,条件是LWMA 10和20在SMA 50下方交叉,反之则做多。

我想将我的EA限制在不超过2笔交易,然而,当我改变代码时,它变成了一次开2笔交易,而不是每个标准开1笔交易。

我是否需要建立一个反击系统或任何东西,或者我如何设置我的反击系统,以便在我的交易中的一个已经有了TP或SL时做出反应?

谁能告诉我,我的代码出了什么问题。

非常感谢,并致以敬意

Terrance

//---输入参数

extern double TakeProfit=500.0;

extern double Lots=0.1;

extern double StopLoss=500.0;

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

//| 专家初始化函数 |

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

int init()

{

//----

//----

return(0);

}

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

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

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

int deinit()

{

//----

//----

return(0);

}

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

//|专家启动功能|

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

int start()

{

//----

int cnt, ticket, total;

双重shortEma, longEma, mainshortEma, mainlongEma。

如果(Bars<100)

{

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

return(0);

}

如果(TakeProfit<10)

{

Print("TakeProfit小于10")。

return(0); // 检查TakeProfit

}

shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0)。

longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0)。

int isCrossed = 0;

double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);

double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);

double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);

double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);

double diff1 = shortEma1-longEma1;

double diff2 = shortEma2-longEma2;

mainshortEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0)。

如果((diff1*diff2)<0)

{

如果(shortEma1>longEma1)

isCrossed = 1。

否则isCrossed = 2。

}

total = OrdersTotal();

如果(total < 1)

{

如果(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

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 && shortEma < mainshortEma && longEma < mainshortEma)

{

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);

}

如果(total == 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

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 && shortEma < mainshortEma && longEma < mainshortEma)

{

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,

我试图在你给我看的链接下寻找课程,但它们是一般的课程,我在寻找专门用于亨德森指标的信息......

另外,我已经浏览了所发布的主题,之后我想找到以下东西。

-用简单易懂的语言,我想问的是,大约经过多少个柱子,颜色就会改变。

换句话说,在线的颜色从蓝色变成粉红色之前,最多需要多少个柱子?不幸的是,我不懂花哨的术语,我希望得到非常简单的答复,以便我能够继续前进并开始实施策略。premalmunshaw@yahoo.com 是我的电子邮件地址。

我正试图支付39美元来激活这个包。

期待您的积极答复。

谢谢。

普雷马尔-芒肖

mladen:
坦白地说,我不明白你在问什么。

如果你问的是什么时候会改变颜色,那么答案是:当斜率改变时。

如果你问的是它是如何编码变色的,那么你应该在本节中寻找答案。课程
 

...

不幸的是,我不明白你的问题,所以我将做的是重新表述我自己(计算长度是指亨德森过滤器的计算长度)。

如果你的计算长度是5,那么最后两根柱子可以改变。

如果你的计算长度是7,那么最后3条可以改变

如果你的计算长度是9,那么最后4个小节可以改变。

比这更简单的答案是不可能的。没有比这更简单的解释了,亨德森滤波器是如何计算的:就像我试图用 "1+1=2 "来解释傅里叶变换一样。请检查你所提供的链接

至于其他的:你得到了过滤器背后的数学链接,你得到了关于多少个柱子被重新计算的信息,你甚至得到了来自精英部分新闻线的例子。至于使用该过滤器的策略:我在1000多个帖子中说过,重新计算指标(SSA、亨德森过滤器、中心化TMA、傅里叶变换、回归分析......)不应该在 "信号模式 "中使用,而应该在 "估计模式 "中使用。如果你想从亨德森滤波中获得信号,那么你就完全走错了路,如果这是你考虑订阅精英版的唯一原因,那么你最好不要订阅。

PS:把你的电子邮件公开是一种不好的做法。这样一来,你的邮箱里就会有大量的垃圾邮件。

______________________________________

祝你在寻求交易系统的过程中一切顺利

问候

姆拉登

premalmunshaw:
Mladen,

我试图在你给我看的链接下寻找课程,但它们是通用课程,我正在寻找专门针对亨德森指标的信息......

另外,我已经看了发布的主题,之后我想找到以下东西。

-用简单易懂的语言,我想问的是,大约经过多少个柱子,颜色就会改变。

换句话说,在线的颜色从蓝色变成粉红色之前,最多需要多少个柱子?不幸的是,我不懂花哨的术语,我希望得到非常简单的答复,以便我能够继续前进并开始实施策略。premalmunshaw@yahoo.com 是我的电子邮件地址。

我正试图支付39美元来激活这个包。

期待您的积极答复。

请注意。

Premal Munshaw
 

Mladen,

是否有办法让我为我的交易设置一个计数器,以便当我的交易有TP或SL时,我能够触发计数器的跳转?

请注意

特伦斯

tkuan77:
大家好,我一直想让我的EA能够开启多笔交易,但到目前为止,我只能让它限制在1笔交易。

我的目标很简单。

当LWMA10在LWMA20下方交叉时,只要LWMA10和20在SMA50下方交叉,系统就会做空,反之则做多。

我想限制我的EA不超过2笔交易,但是,当我改变代码时,它变成了一次开2笔交易,而不是每个标准开1笔交易。

我是否需要建立一个反击系统或任何东西,或者我如何设置我的反击系统,以便在我的交易中的一个已经有了TP或SL时做出反应?

谁能告诉我,我的代码出了什么问题。

非常感谢,并致以敬意

Terrance

//---输入参数

extern double TakeProfit=500.0;

extern double Lots=0.1;

extern double StopLoss=500.0;

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

//| 专家初始化函数 |

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

int init()

{

//----

//----

return(0);

}

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

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

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

int deinit()

{

//----

//----

return(0);

}

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

//|专家启动功能|

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

int start()

{

//----

int cnt, ticket, total;

双重shortEma, longEma, mainshortEma, mainlongEma。

如果(Bars<100)

{

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

return(0);

}

如果(TakeProfit<10)

{

Print("TakeProfit小于10")。

return(0); // 检查TakeProfit

}

shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0)。

longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0)。

int isCrossed = 0;

double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);

double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);

double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);

double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);

double diff1 = shortEma1-longEma1;

double diff2 = shortEma2-longEma2;

mainshortEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0)。

如果((diff1*diff2)<0)

{

如果(shortEma1>longEma1)

isCrossed = 1。

否则isCrossed = 2。

}

total = OrdersTotal();

如果(total < 1)

{

如果(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

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 && shortEma < mainshortEma && longEma < mainshortEma)

{

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);

}

如果(total == 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

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 && shortEma < mainshortEma && longEma < mainshortEma)

{

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);

}

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

...

试试这个功能

int countOpenedOrders(int type)

{

int openedOrders = 0;

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

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;

if(OrderSymbol() != Symbol()) continue;

if(OrderMagicNumber() != MagicNumber) continue;

if(OrderType() == type) openedOrders++;

}

return(openedOrders);

}

[/PHP]

To count opened buy orders, call it like this :

int openedBuys = countOpened(OP_BUY);

to count opened sell orders, call it like this :

[PHP]int openedSells = countOpened(OP_SELL);
然后你可以检查
:if openedBuys==0 open buy if

openedSells==0 open sell

tkuan77:
Mladen,

是否有办法让我为我的交易设置一个计数器,以便当我的交易有TP或SL时,我能够触发计数器的跳跃?

谢谢

Terrance
 

你好,Mladen。

我想出了另一个使用 "Bars "函数的方法。当一个交易被触发时,我将用bar函数 设置一个整数的计数(例如,一个买入的交易是在第122条触发的,因此计数将是122),当我的标准再次被触发时,我将再次调用bar函数并与计数进行比较,只有当新的计数高于先前的计数,即本例中的122,交易才会触发。

然而,我仍然是同时触发2个交易,而不是每个条件触发1个。为什么会这样呢?

请帮助我。

谢谢您

Terrance

//---输入参数

extern double TakeProfit=530.0;

extern double Lots=0.1;

extern double StopLoss=520.0;

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

//| 专家初始化函数 |

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

int init()

{

//----

//----

return(0);

}

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

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

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

int deinit()

{

//----

//----

return(0);

}

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

//|专家启动功能|

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

int start()

{

//----

int cnt, ticket, total;

双重shortEma, longEma, mainshortEma, mainlongEma。

如果(Bars<100)

{

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

return(0);

}

如果(TakeProfit<10)

{

Print("TakeProfit小于10")。

return(0); // 检查TakeProfit

}

shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0)。

longEma = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,0)。

int isCrossed = 0;

double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);

double longEma1 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,1);

double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);

double longEma2 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,2);

double diff1 = shortEma1-longEma1;

double diff2 = shortEma2-longEma2;

mainshortEma = iMA(NULL,0,113,0,MODE_EMA,PRICE_CLOSE,0)。

如果((diff1*diff2)<0)

{

如果(shortEma1>longEma1)

isCrossed = 1。

否则isCrossed = 2。

}

int BarCounter, BarCounter2;

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

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());

BarCounter = Bars;

}

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

return(0);

}

如果(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)

{

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());

BarCounter = Bars;

}

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

return(0);

}

return(0);

}

如果(total == 1)

{

BarCounter2 = Bars;

如果(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma && BarCounter2 > BarCounter)

{

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());

BarCounter = BarCounter2;

}

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

return(0);

}

如果(isCrossed == 2 && shortEma < mainshortEma && longEma BarCounter)

{

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());

BarCounter = BarCounter2;

}

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

return(0);

}

return(0);

}

return(0);

}

mladen:
试试这个函数 :
int countOpenedOrders(int type)

{

int openedOrders = 0;

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

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;

if(OrderSymbol() != Symbol()) continue;

if(OrderMagicNumber() != MagicNumber) continue;

if(OrderType() == type) openedOrders++;

}

return(openedOrders);

}

[/PHP]

To count opened buy orders, call it like this :

int openedBuys = countOpened(OP_BUY);

to count opened sell orders, call it like this :

[PHP]int openedSells = countOpened(OP_SELL);
然后你可以检查
:if openedBuys==0 open buy if

openedSells==0 open sell

原因: