如何编码? - 页 6

 

错误代码。4109

大家好。

我写了一个脚本来关闭所有的交易,包括挂单,但在测试后感到很失望。函数。OrderClose和Orderdelete都无法关闭交易。通过调用GetLastError函数,我得到了错误代码。4109,在错误头文件中定义为TRADE_NOT_ALLOWED。

我甚至尝试执行平台自带的那些脚本,但没有成功。

我希望有人能解决这个问题。

谢谢。

附加的文件:
closeall2.mq4  2 kb
 

好吧,试试这个。我认为Lots和Price变量应该是双数而不是整数。希望这有帮助

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

//| CloseAll.mq4 |

//| FX5 |

//| |

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

#property copyright "FX5"

#property link " "

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

//| script program start function |

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

int start()

{

//----

int Ticket,Lots,Price,Type,Result;

int Error=0;

int Total=OrdersTotal();

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==0)

{

Alert("Can''t select the order indexed: ",i);

Alert("Error code is ", GetLastError());

Error++;

}

else

{

/* Lots=OrderLots();

Ticket=OrderTicket();

Type=OrderType();*/

Result=0;

/* if(Type==OP_BUY)

Price=Bid;

if(Type==OP_SELL)

Price=Ask;*/

// if(Type==OP_BUY || Type==OP_SELL)

if(OrderType()<=OP_SELL)

{

Alert(OP_BUY," ",OP_SELL," ",Type);

// Result=OrderClose(Ticket,Lots,Price,5,Blue);

if(OrderType()==OP_BUY) Result=OrderClose(OrderTicket(),OrderLots(),Bid,5,Blue);

if(OrderType()==OP_SELL) Result=OrderClose(OrderTicket(),OrderLots(),Ask,5,Blue);

}

else

{

Result=OrderDelete(OrderTicket());

}

if(Result==0)

{

Alert("Can''t close the Order number: ",i," with Ticket: ",Ticket);

Alert("Error Code: ",GetLastError());

Error++;

}

}

}

if(Error!=0)

Alert(Error," Errors have occured");

else

Alert("Close all Orders Succeeded with no Errors");

//----

return(0);

}

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

试试这个

FX5:
大家好。

我写了一个脚本来关闭所有的交易,包括挂单,但在测试后感到很失望。函数。OrderClose和Orderdelete未能关闭交易。通过调用GetLastError函数,我得到了错误代码。4109,在错误头文件中定义为TRADE_NOT_ALLOWED。

我甚至尝试执行平台自带的那些脚本,但没有成功。

我希望有人能解决这个问题。

谢谢。

在metatrader中,进入工具->选项,点击专家顾问标签,选择允许实时交易,并点击允许dll导入,取消确认调用。我写了一些脚本,也遇到了同样的问题。

 
firedave:
好吧,试试这个。我认为Lots和Price变量应该是双数而不是整数。希望这对你有帮助
//+------------------------------------------------------------------+

//| CloseAll.mq4 |

//| FX5 |

//| |

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

#property copyright "FX5"

#property link " "

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

//| script program start function |

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

int start()

{

//----

int Ticket,Lots,Price,Type,Result;

int Error=0;

int Total=OrdersTotal();

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==0)

{

Alert("Can''t select the order indexed: ",i);

Alert("Error code is ", GetLastError());

Error++;

}

else

{

/* Lots=OrderLots();

Ticket=OrderTicket();

Type=OrderType();*/

Result=0;

/* if(Type==OP_BUY)

Price=Bid;

if(Type==OP_SELL)

Price=Ask;*/

// if(Type==OP_BUY || Type==OP_SELL)

if(OrderType()<=OP_SELL)

{

Alert(OP_BUY," ",OP_SELL," ",Type);

// Result=OrderClose(Ticket,Lots,Price,5,Blue);

if(OrderType()==OP_BUY) Result=OrderClose(OrderTicket(),OrderLots(),Bid,5,Blue);

if(OrderType()==OP_SELL) Result=OrderClose(OrderTicket(),OrderLots(),Ask,5,Blue);

}

else

{

Result=OrderDelete(OrderTicket());

}

if(Result==0)

{

Alert("Can''t close the Order number: ",i," with Ticket: ",Ticket);

Alert("Error Code: ",GetLastError());

Error++;

}

}

}

if(Error!=0)

Alert(Error," Errors have occured");

else

Alert("Close all Orders Succeeded with no Errors");

//----

return(0);

}

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

这可能是错误的:要删除多个订单,你必须从最后一个订单开始,因为它们的索引在删除过程中是递减的。

所以,用 "for(int i=0;i=0;i--) "来代替。

 

谢谢firedave对代码的修改。这是个小问题,我没有注意到。

Crepuscular,非常感谢你的提示。我可能花了一个世纪的时间才想出解决办法。最后,我有了一个有效的代码。

 

米歇尔,那是一个非常聪明的说明,非常感谢你。

 

获取最大跌幅函数

我想写一个函数,从已经平仓的交易中获取最大跌幅。

1.在交易仍在进行时计算缩减,将数字保存到一个全局变量中,并根据票号将数据写入文件中。 MT4必须始终在线。

2.通过获取1分钟图表中的最高点或最低点来获得缩减量。这里的问题是我们必须有交易的1分钟历史。 (如果我能够得到必要的1分钟条形图,如果它们还没有被下载,我就会使用这种方法。)

我想想出一个更好的方法来获得最大的缩水。

感谢任何意见。

 
harriss:
我想写一个函数,从已经平仓的交易中获得最大跌幅。 我想出了两个解决方案。

1.当交易仍在进行时,计算缩减量。将数字保存到一个全局变量中,并根据票号将数据写入文件中。MT4必须始终在线。

2.通过获取1分钟图表中的最高点或最低点来获得跌幅。这里的问题是我们必须有交易的1分钟历史。(如果我能够得到必要的1分钟条形图,如果它们还没有被下载,我就会使用这种方法。)

我希望能想出一个更好的方法来获得最大缩减。

如果您有任何意见,我们将不胜感激。

你好,哈里斯。

你说的 "缩减 "是什么意思?

你的意思是在已关闭的交易中最大的损失吗?

 

缩减

我所说的平仓是指,交易中的最低点是什么。 例如,如果交易达到了止损点,那么止损点将是缩减量。 现在,如果交易 以正数结束,并在某一时刻为-15点,那么平仓将是15。 最后,如果交易以-15点收盘,但在某一点上是-30点,那么平仓将是30。

 

如何为指标编码警示/警报?

你好,我想了解更多关于如何编码警报的信息。

我不是一个程序员,但我有自己的想法,一般来说,我能够修补一些东西,把它拆开,然后把它重新组装起来,使之更接近我想要的方式。

我浏览了一些带有警报的指标,并将我所看到的一般警报功能复制到我希望有警报的其他指标上。 我的结果好坏参半。

我注意到警报的主要函数是Alert()函数,Comment()函数,和Playsound()函数。 到目前为止,我最熟悉的是Alert()函数。 例如,Alert()和Playsound()之间有什么明显的区别吗?

我遇到的一般问题是,我不知道如何对警报进行足够的编码,以使它们一方面能引起注意,另一方面又不至于让人感到可笑的分心。 例如,如果使用Alert()函数来处理一些交叉盘,而指标在当前条上没有最终打印出来,警报可能会重复出现,而且我很难将警报关闭。 通常情况下,我不得不改变图表的时间框架。

首先,是否有一个简单的方法来禁用/停用只针对当前条形的警报?

其次,是否有办法通过引入限制迭代次数的代码或给警报一个固定的持续时间来编写警报代码,使其不至于成为一个无休止的恼人的麻烦? 你会如何编码?

我看到的一个解决方案是将警报延迟到下一个条形图,这样它就不会不断变化,但这也有一个缺点,就是不及时。

为了避免指标上的狂暴警报的麻烦,我使用了可以使用终端窗口设置的预定价格警报,它有帮助,但并不理想。

我也知道可以创建专家顾问来发出警报,而且有一个按钮可以轻松打开和关闭其警报。然而,我在使用EA时遇到的问题是,我注意到我与MetaTrader同时运行的另一个重要程序在激活EA时似乎遇到了干扰,运行速度很慢。

对这个问题有什么其他解决办法吗?

如果有任何指标有避免我所列举的陷阱的警报代码,并能作为如何编码和警报的一个好例子,你能不能向我推荐和/或张贴它?

非常感谢您。