[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 203

 
你好,请你给我一个命令(如果有的话)来随机选择一个数字,要么是0,要么是1,提前谢谢你。
 
hoz:


好吧,首先,要习惯于把支架放在你需要的地方。像这样。

事实上,你应该有一个时间范围,而不是一个固定值。你的逻辑一点也不正确。 不是1小时或3小时,而是1小时到3小时!!。
谢谢你,我搞错了。
 
stater:
你好,请你给我一个命令(如果有的话)来随机选择一个0或1的数字,提前感谢。
int x =MathRand() % 2;
 

在测试专家顾问的过程中,我发现了代码执行的错误。
- for(i=0;i<OrdersTotal();i++)循环的执行随着下一个刻度的出现而中断(下面是黑体字)。
- 买入订单是按任何顺序选择和关闭的。

你能告诉我如何找到原因并解决它吗?
下面是程序的代码和来自测试员日志的报告。

方案代码。

//+------------------------------------------------------------------+
//|Poligon1.ǞǞǞ
//| Copyright 2012, MetaQuotes Software Corp.
//| 测试循环运算符。|
//+------------------------------------------------------------------+
#property copyright"Copyright 2012, MetaQuotes Software Corp."
#属性链接""
//+------------------------------------------------------------------+
//申报的变量|
//+------------------------------------------------------------------+
int Mn=357;//魔法数字
int i;//迭代计数器索引
双PriTP;//TP系列
int Tick;//Tick计数器
//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+
int init()
{
//---- 设置订单
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,Bid-350*Point, Ask+350*Point, NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1,Ask,0,Bid-250*Point,Ask+250*Point,NULL,Mn,0,CLR_NONE) ;//
OrderSend(Symbol(),OP_BUY,1.5,Ask,0,Bid-150*Point, Ask+150*Point, NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,Bid-150*Point, Ask+150*Point, NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,3.5,Ask,0,Bid-150*Point, Ask+150*Point, NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUYLIMIT,1,Ask-150*Point,0,Bid-400*Point,
Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_SELLSTOP,3,Ask-300*Point,0,Bid+150*Point,
Ask-750*Point,NULL,Mn,0,CLR_NONE);//
//----
PriTP=Bid;//PriTP
Print("Kc0:",OrdersTotal=",OrdersTotal()); //
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
int start()
{
//----Tick计数器
Tick++;//Tick
//----Close 买入订单
for(i=0;i<OrdersTotal();i++)//初始化循环。
{
Print("Kc1:"," Tick=",Tick," i=",i);//消息
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//选择订单i
{
如果(OrderSymbol()==Symbol())//Symbol
{
如果(OrderMagicNumber()==Mn)//识别号码
{
if(OrderType()==OP_BUY &&OrderTakeProfit()>PriTP)//当前所选订单的交易类型。
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//平仓。
}/关闭 如果(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
}// 关闭 if(OrderMagicNumber()==Mn)
}//关闭 if(OrderSymbol()==Symbol()
}//关闭 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
}//关闭 for(i=0;i<OrdersTotal();i++)
//----
return(0);
}

测试者日志中的条目。

2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=5 i=1
2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1:Tick=5 i=0
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=4 i=1
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1:Tick=4 i=0
2013.03.01 12:12:03 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=3 i=1
2013.03.01 12:12:03 2012.09.03 00:00 Poligon1 EURUSD,M15: close #4 buy 2.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at 1.25770
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1:Tick=3 i=0
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=2
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=1
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: close #2 buy 1.00 EURUSD at 1.25773 sl: 1.25516 tp: 1.26023 at price 1.25768
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1:Tick=2 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=3
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #5 buy 3.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=2
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #3 buy 1.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=1
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #1 buy 0.50 EURUSD at 1.25773 sl: 1.25416 tp: 1.26123 at 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1:Tick=1 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc0: OrdersTotal=7
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Open #7 sell stop 3.00 EURUSD at 1.25473 sl: 1.25916 tp: 1.25023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Open #6 buy limit 1.00 EURUSD at 1.25623 sl: 1.25366 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #5 buy 3.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Open #4 buy 2.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Open #3 buy 1.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Open #2 buy 1.00 EURUSD at 1.25773 sl: 1.25516 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Open #1 buy 0.50 EURUSD at 1.25773 sl: 1.25416 tp: 1.26123 ok
2013.03.01 12:11:21 PM Poligon1测试开始
2013.03.01 12:11:21 18 18:30 Poligon1 EURUSD, M15:加载成功

注意到。舒尔金

 
Shurkin:

在测试专家顾问时,我们发现代码中有一些错误。
- 循环运算符for(i=0;i<OrdersTotal();i++)的执行会被下一个刻度线打断(如下图粗体所示)。
- 买入订单的选择和关闭顺序是随机的。

注意到。舒尔金


1.订单不能在init()函数中打开(在策略测试器中,但在演示中无法使用)。

2.当你关闭订单时,要从末尾算到开头,而不是像你那样反过来。

 
Shurkin:

在测试Expert Advisor时,发现了代码执行错误:
- 循环语句for(i=0;i<OrdersTotal();i++)的执行被下一个tick打断(下面用黑体字强调),
- 买入订单以随机顺序选择和关闭。

你能告诉我如何找到原因并解决它吗?
下面是程序的代码和测试者日记的报告。

程序的代码。

//+------------------------------------------------------------------+
//|Poligon1.mq4 |
//| Copyright 2012, MetaQuotes Software Corp.|
//| 循环运算器测试。|
//+------------------------------------------------------------------+
#版权所有 "Copyright 2012, MetaQuotes Software Corp."
#属性链接 ""
//+------------------------------------------------------------------+
//|声明的变量|
//+------------------------------------------------------------------+
int Mn=357;//魔法数字
int i;//迭代计数器
double PriTP;//TP系列
int Tick;//Tick计数器
//+------------------------------------------------------------------+
//|专家初始化函数|
//+------------------------------------------------------------------+
int init()
{
//----Set orders
OrderSend(Symbol(),OP_BUY,0.
5,Ask,0,Bid-350*Point,Ask+350*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1,Ask,0,Bid-250*Point,Ask+250*Point,NULL,Mn,0,CLR_NONE)
5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE)5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUYLIMIT,1,Ask-150*Point,0,Bid-400*Point,Point,
Ask+250*Point,NULL,Mn,0,CLR_NONE) 。//
OrderSend(Symbol(,OP_SELLSTOP,3,Ask-300*Point,0,Bid+150*Point,Point,
Ask-750*Point,NULL,Mn,0,CLR_NONE);//
//----
PriTP=Bid;//PriTP
Print("Kc0:"," OrdersTotal=",OrdersTotal());//PriTP
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function|
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function|
//+------------------------------------------------------------------+
int start()
{
//----Counter Tick
Tick++;//Tick
//----Close BUY Orders
for(i=0;i<OrdersTotal();i++)//initialise loop
{
Print("Kc1:"," Tick=",Tick," i=",i);//发送消息
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//选择订单i
{
if(OrderSymbol()==Symbol())//Symbol
{
if(OrderMagicNumber()==Mn)//标识号
{
if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//当前选定订单的操作类型
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//平仓
}/关闭 如果(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
}/关闭 如果(OrderMagicNumber()==Mn)
}//关闭 if(OrderSymbol()==Symbol()
}//关闭 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ==true)
}//关闭 for(i=0;i<OrdersTotal();i++)
//----
return(0);
}

测试员日志条目。

2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=5 i=1
2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1:Tick=5 i=0
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=4 i=1
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1:Tick=4 i=0
2013.03.01 12:12:09 2012。03 03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=3 i=1
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: close #4 buy 2.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at price 1.25770
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1:Tick=3 i=0
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=2
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=1
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: close #2 buy 1。00 EURUSD at 1.25773 sl: 1.25516 tp: 1.26023 at price 1.25768
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1:Tick=2 i=0
2013.03.01 12:11:21 2012.09.03 03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=3
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #5 buy 3.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at price 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=2
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #3 buy 1.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at price 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=1
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #1 buy 0.50 EURUSD at 1.25773 sl: 1.25416 tp: 1.26123 at 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1:Tick=1 i=0
2013。03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc0: OrdersTotal=7
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #7 sell stop 3.00 EURUSD at 1.25473 sl: 1.25916 tp: 1.25023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #6 buy limit 1.00 EURUSD at 1.25623 sl: 1.25366 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: 开盘#5买入3.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: 开盘#4买入 2.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #3 buy 1.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Open #2 buy 1.00 EURUSD at 1.25773 sl: 1.25516 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00:00 Poligon1 EURUSD,M15: open #1 buy 0.50 EURUSD at 1.25773 sl: 1.25416 tp: 1.26123 ok
2013.03.01 12:11:21 Poligon1 test started
2013.03.01 12:11:21 Poligon1 EURUSD,M15: loaded successfully

注意到。舒尔金

我还没有看完你的整个乱七八糟的东西(你必须使用输入栏上方的SRC按钮来附加它)--在页面上到处乱划的代码并不令人愉快,但首先引起我注意的是一行 for(i=0; i<OrdersTotal() ; i++) .要关闭它,使用反向循环: for(i=OrdersTotal()-1; i>=0; i-- )
 
Roger:
int x =MathRand() % 2;


为什么它会返回0或1而不是另一个数字?根据帮助MathRand()返回一个0到32767之间的伪随机整数
 
hoz:

为什么会返回0或1而不是另一个数字?毕竟,根据MathRand() 返回一个0到32767范围内的伪随机整数。

这是该部门的剩余 部分!在算术步骤中和你的打印机中找找看!

把它放进去,你只会看到两个结果交替出现。

  int x =MathRand() % 2;
  Print("x =",x);
 
向大家问好!我想知道如何阻止专家顾问,当进入市场 的条件得到满足时,它开始在日志文件中写 "订单被触发!"并且每分钟写几十次,结果日志文件变得非常巨大。我怎样才能让它只写一次,而不是在平仓前写,因为它可能会挂起几个小时......。
 
Allis:
向大家问好!我想知道如何阻止专家顾问,当进入市场的条件出现时,它开始在日志文件中写 "订单被触发!"并且每分钟写几十次,结果日志文件变得非常巨大。我怎样才能使它只写一次,而不是在平仓前写,因为它可能会挂几个小时...
你好,Allis! 打印应该是规定的,在那里没有阅读的虱子!我把在打印,如果有一个错误,如果它打开,所以将写在杂志上,打开,只有一次!"。