KimIV的有用功能 - 页 85 1...787980818283848586878889909192...128 新评论 Rungtawan Thunthakij 2009.07.04 15:52 #841 结果,在关闭块中添加了一个自定义的位置计数,结果是 "正确的 "关闭,但在日志中仍会弹出几次错误131。 考虑到已经有一个订单的检查,这样在循环中插入一个订单数是否正常? 你能纠正代码以避免错误131吗? 非常感谢你。 附加的文件: codz2.mq4 5 kb Alexander 2009.07.04 17:01 #842 hope писал(а)>> 能否请你调整一下代码,以避免错误131? 非常感谢你。 谁会在分割后为你规范地段大小?因此出现了错误。 Igor Kim 2009.07.04 19:44 #843 亚历克斯,在将手数传给关闭函数之前,用NormalizeLot() 对其大小进行规范化处理。 Rungtawan Thunthakij 2009.07.06 13:57 #844 谢谢伊戈尔、亚历山大。 事实上,我在函数SELLCLOSED_1=OrderClose( OrderTicket(), Lot/3, Ask, 0, Red )中用0.01替换了Lot/3(Lot/2, Lot)来检查手数,并避免了错误131。我们可以让它像这样(0.01),但是,首先,以Lot形式关闭更正确。第二,我以前从未遇到过用户函数及其在程序中的调用,结果发现这相当有趣。我似乎已经在代码中正确地附加了所有的东西,一切都在工作,但错误131仍然存在。请看一下代码。也许我在NormalizeLot的调用函数中搞砸了什么。 附加的文件: cod3.mq4 6 kb Rungtawan Thunthakij 2009.07.06 15:12 #845 歉意。在原代码中,这一行 RefreshRates()。 BUYCLOSED_1=OrderClose( OrderTicket(), CloseLot, Bid, 0, Red ) 。 是正确的LotClose,符合条件。 Lot =OrderLots(); // NUMBER OF LOTS LotClose =NormalizeLot(Lot); // NORMALIZED LOT的值被分配给CLOSED LOT。 发帖时的错误........ Alexander 2009.07.06 18:36 #846 hope писал(а)>> 请看一下代码。也许你在NormalizeLot调用函数中弄错了什么。 尝试更换 if ( ro) l=MathCeil( lo* k)/ k; else l=MathFloor( lo* k)/ k; 至 if ( ro) l=NormalizeDouble(MathCeil( lo* k)/ k,2); else l=NormalizeDouble(MathFloor( lo* k)/ k,2); Rungtawan Thunthakij 2009.07.07 05:00 #847 早上好,亚历山大。 不幸的是,你的提示并没有帮助。我解析了日志,发现错误发生在两种情况下,当一个批次的一部分关闭时,几乎与另一部分的关闭重合。 在时间上没有重合的情况下,那么部分地段就会被关闭,不会出现错误。 我试图分别对收盘买入的手数和收盘卖出的手数进行标准化,但没有成功。 双 批量,//选定顺序中的批量数量 阄闭买。 LotCloseSell。 ............................ Lot =OrderLots(); LotCloseBuy =NormalizeLot(Lot); LotCloseSell =NormalizeLot(Lot); ............................ BUYCLOSED_3=OrderClose( OrderTicket(, LotCloseBuy, Bid, 0, Red ) ........................... SELLCLOSED_3=OrderClose( OrderTicket(), LotCloseSell, Ask, 0, Red ) 。 ................... 伊戈尔的职能 NormalizeLot......... 你有什么想法吗? Rungtawan Thunthakij 2009.07.07 07:34 #848 我是什么羊啊!?Ugh - 这是令人厌恶的.... 对订单循环中的批次进行规范化处理 //--------------------------------------------------------------- 4 -- //计算订单 Symb=Symbol(); //金融工具的名称。 BuyTotal=0; // 买入订单的数量 SellTotal=0; // 卖出订单的数量 for(int i=1; i<=OrdersTotal(); i++) // 订单循环 { if (OrderSelect(i-1,SELECT_BY_POS)==true) // 如果如下 { // 订单分析: if (OrderSymbol()!=Symb)继续; // 不是我们的金融工具 if (OrderType()>1) // Pending { Alert("Pending order detected. Expert Advisor not working." ); return; // Exit start() } if (OrderType()==OP_BUY) { BuyTotal++; // 买入订单计数器 BuyOrdOpPrice=OrderOpenPrice(); // 打开买入价格 } if (OrderType()==OP_SELL) { SellTotal++; // 卖出订单计数器 SellOrdOpPrice=OrderOpenPrice(); // 打开卖出价格 } Ticket=OrderTicket(); // 选择的订单号码。 Tip =OrderType(); // 所选订单的类型。 Lot =OrderLots(); LotCloseBuy =NormalizeLot(Lot); LotCloseSell =NormalizeLot(Lot); } } ....,我创建了一个单独的循环来核算未平仓的订单,在这里我不得不将手数正常化来平仓!!。 //--------------------------------------------------------------- 6 -- // 检查未结订单 int _GetLastError = 0, _OrdersTotal = OrdersTotal(); int z; //---- 遍历所有未结头寸 for ( z = _OrdersTotal-1 ; z >=0; z -- ) { //循环 - 遍历所有未结订单 //---- 如果在选择头寸时发生错误,继续下一步 if ( !OrderSelect( z, SELECT_BY_POS ){ _GetLastError = GetLastError(); Print("OrderSelect( ", z, " , SELECT_BY_POS ) - Error #", _GetLastError ); continue; }//完成 //绑定货币和Majik //---- 如果当前工具没有开仓,跳过它 if ( OrderSymbol() != Symbol() continue; // ERROR //完成 //---- 如果MagicNumber不等于Expert_ID,跳过这个位置 if ( OrderMagicNumber() != Expert_ID ) continue; // ERROR //Finished if ( OrderType()==OP_BUY) { BuyClot=OrderLots(); } 如果(OrderType()==OP_SELL) { SellClLot=OrderLots(); } OpenedLots=OrderLots(); LotCloseBuy =NormalizeLot(OpenedLots); // Number of lots LotCloseSell =NormalizeLot(OpenedLots); // Number of lots //检查是否有买入仓位。 ........................................ 谢谢你,伊戈尔,亚历山大。如果没有批量正常化功能,仍然会处于死锁状态.... Useful features from KimIV EA不会在多对上运行,需要帮助 EA: needs some help Rungtawan Thunthakij 2009.07.08 17:10 #849 晚上好。 而最开始出现的错误。 2009.07.08 21:05:45 TestGenerator: unmatched data error (volume limit 651 at 2009.07.08 19:00 exceeded) is critical or is it just a tester error? 谢谢你。 ZEN 2009.07.08 20:44 #850 伊戈尔--请看这里的"GAP指标"。 1...787980818283848586878889909192...128 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
结果,在关闭块中添加了一个自定义的位置计数,结果是 "正确的 "关闭,但在日志中仍会弹出几次错误131。
考虑到已经有一个订单的检查,这样在循环中插入一个订单数是否正常?
你能纠正代码以避免错误131吗?
非常感谢你。
能否请你调整一下代码,以避免错误131?
非常感谢你。
谁会在分割后为你规范地段大小?因此出现了错误。
亚历克斯,在将手数传给关闭函数之前,用NormalizeLot() 对其大小进行规范化处理。
谢谢伊戈尔、亚历山大。
事实上,我在函数SELLCLOSED_1=OrderClose( OrderTicket(), Lot/3, Ask, 0, Red )中用0.01替换了Lot/3(Lot/2, Lot)来检查手数,并避免了错误131。我们可以让它像这样(0.01),但是,首先,以Lot形式关闭更正确。第二,我以前从未遇到过用户函数及其在程序中的调用,结果发现这相当有趣。我似乎已经在代码中正确地附加了所有的东西,一切都在工作,但错误131仍然存在。请看一下代码。也许我在NormalizeLot的调用函数中搞砸了什么。
歉意。在原代码中,这一行
RefreshRates()。
BUYCLOSED_1=OrderClose( OrderTicket(), CloseLot, Bid, 0, Red ) 。
是正确的LotClose,符合条件。
Lot =OrderLots(); // NUMBER OF LOTS
LotClose =NormalizeLot(Lot); // NORMALIZED LOT的值被分配给CLOSED LOT。
发帖时的错误........
请看一下代码。也许你在NormalizeLot调用函数中弄错了什么。
尝试更换
至
早上好,亚历山大。
不幸的是,你的提示并没有帮助。我解析了日志,发现错误发生在两种情况下,当一个批次的一部分关闭时,几乎与另一部分的关闭重合。
在时间上没有重合的情况下,那么部分地段就会被关闭,不会出现错误。
我试图分别对收盘买入的手数和收盘卖出的手数进行标准化,但没有成功。
双
批量,//选定顺序中的批量数量
阄闭买。
LotCloseSell。
............................
Lot =OrderLots();
LotCloseBuy =NormalizeLot(Lot);
LotCloseSell =NormalizeLot(Lot);
............................
BUYCLOSED_3=OrderClose( OrderTicket(, LotCloseBuy, Bid, 0, Red )
...........................
SELLCLOSED_3=OrderClose( OrderTicket(), LotCloseSell, Ask, 0, Red ) 。
...................
伊戈尔的职能
NormalizeLot.........
你有什么想法吗?
我是什么羊啊!?Ugh - 这是令人厌恶的....
对订单循环中的批次进行规范化处理
//--------------------------------------------------------------- 4 --
//计算订单
Symb=Symbol(); //金融工具的名称。
BuyTotal=0; // 买入订单的数量
SellTotal=0; // 卖出订单的数量
for(int i=1; i<=OrdersTotal(); i++) // 订单循环
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // 如果如下
{ // 订单分析:
if (OrderSymbol()!=Symb)继续; // 不是我们的金融工具
if (OrderType()>1) // Pending
{
Alert("Pending order detected. Expert Advisor not working." );
return; // Exit start()
}
if (OrderType()==OP_BUY)
{
BuyTotal++; // 买入订单计数器
BuyOrdOpPrice=OrderOpenPrice(); // 打开买入价格
}
if (OrderType()==OP_SELL)
{
SellTotal++; // 卖出订单计数器
SellOrdOpPrice=OrderOpenPrice(); // 打开卖出价格
}
Ticket=OrderTicket(); // 选择的订单号码。
Tip =OrderType(); // 所选订单的类型。
Lot =OrderLots();
LotCloseBuy =NormalizeLot(Lot);
LotCloseSell =NormalizeLot(Lot);
}
}
....,我创建了一个单独的循环来核算未平仓的订单,在这里我不得不将手数正常化来平仓!!。
//--------------------------------------------------------------- 6 --
// 检查未结订单
int _GetLastError = 0, _OrdersTotal = OrdersTotal();
int z;
//---- 遍历所有未结头寸 for ( z = _OrdersTotal-1 ; z >=0; z -- ) { //循环 - 遍历所有未结订单 //---- 如果在选择头寸时发生错误,继续下一步 if ( !OrderSelect( z, SELECT_BY_POS ){ _GetLastError = GetLastError(); Print("OrderSelect( ", z, " , SELECT_BY_POS ) - Error #", _GetLastError ); continue; }//完成 //绑定货币和Majik //---- 如果当前工具没有开仓,跳过它 if ( OrderSymbol() != Symbol() continue; // ERROR //完成
//---- 如果MagicNumber不等于Expert_ID,跳过这个位置
if ( OrderMagicNumber() != Expert_ID ) continue; // ERROR
//Finished
if ( OrderType()==OP_BUY)
{
BuyClot=OrderLots();
}
如果(OrderType()==OP_SELL)
{
SellClLot=OrderLots();
}
OpenedLots=OrderLots();
LotCloseBuy =NormalizeLot(OpenedLots); // Number of lots
LotCloseSell =NormalizeLot(OpenedLots); // Number of lots
//检查是否有买入仓位。
........................................
谢谢你,伊戈尔,亚历山大。如果没有批量正常化功能,仍然会处于死锁状态....
晚上好。
而最开始出现的错误。
2009.07.08 21:05:45 TestGenerator: unmatched data error (volume limit 651 at 2009.07.08 19:00 exceeded)
is critical or is it just a tester error?
谢谢你。