for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)==true) { if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; if (OrderType()==OP_BUY) b++; if (OrderType()==OP_SELL) s++; if (OrderType()==OP_BUYSTOP) b_STOP++; if (OrderType()==OP_SELLSTOP) s_STOP++; } if (OrderType()==OP_BUY) { if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция { OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE); CLOSEORDER(OP_SELL); } } } }
for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)==true) { if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; if (OrderType()==OP_BUY) b++; if (OrderType()==OP_SELL) s++; if (OrderType()==OP_BUYSTOP) b_STOP++; if (OrderType()==OP_SELLSTOP) s_STOP++; } if (OrderType()==OP_BUY) { if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция { OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE); CLOSEORDER(OP_SELL); } } } }
你会得到最后失去的那个,用它做什么,为自己调整什么参数,我想你会想明白的。
谢谢,我想我已经知道了。
如何使获利 后的手数恢复到原来的价值?
{
lot=0.1
}
谢谢,我想我已经知道了。
我如何在获利 后让这批货恢复到原来的价值?
{
lot=0.1
}
我有以下计划
如果(OrdersTotal()==0)
{
以最初的地段开盘
}
否则
...
也就是说,如果没有订单,它将不会以旧的批次打开。
当然有可能记住每个订单,但他们没有告诉我们如何做。一个计数器应该被启动,并在达到某个阈值时重置为初始值。
{
//---
int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY) b++;
if (OrderType()==OP_SELL) s++;
if (OrderType()==OP_BUYSTOP) b_STOP++;
if (OrderType()==OP_SELLSTOP) s_STOP++;
}
if (OrderType()==OP_BUY)
{
if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
CLOSEORDER(OP_SELL);
}
}
}
}
解释一下为什么OrderProfit()<0函数不起作用?
{
if(OrderSelect(q,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2 && OrderMagicNumber()==magic)
{
if (OrderProfit()<0)
{
if (DayOfWeek()==1)
{
day1++;
Print ("Понедельник SL=",day1);
}
if (DayOfWeek()==2)
{
day2++;
Print ("Вторник SL=",day2);
}
}
}
}
}
我想看看一周内 有多少次止损。
{
if(OrderSelect(l,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<0 && OrderType()<2)
{
oldticket=OrderTicket();
}
if (oldticket>=ticket)
{
ticket=oldticket;
lot=OrderLots()*4;
}
if (OrderProfit()>0 && OrderType()<2)
{
lot=0.01;
}
}
}
在这里,我认为这也是它不工作的原因。
解释一下为什么OrderProfit()<0函数不起作用?
{
if(OrderSelect(q,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2 && OrderMagicNumber()==magic)
{
if (OrderProfit()<0)
{
if (DayOfWeek()==1)
{
day1++;
Print ("Понедельник SL=",day1);
}
if (DayOfWeek()==2)
{
day2++;
Print ("Вторник SL=",day2);
}
}
}
}
}
我想看看一周内 有多少次止损。
{
if(OrderSelect(l,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<0 && OrderType()<2)
{
oldticket=OrderTicket();
}
if (oldticket>=ticket)
{
ticket=oldticket;
lot=OrderLots()*4;
}
if (OrderProfit()<0 && OrderType()<2)
{
lot=0.01;
}
}
}
在这里,我认为这也是它不工作的原因。
因为DayOfWeek()返回最后已知的服务器 时间的星期的顺序号。
而你需要订单关闭时间的星期:TimeDayOfWeek(OrderCloseTime())。
因为DayOfWeek()返回最后已知的服务器 时间的星期的顺序号。
而你需要订单关闭时间的星期:TimeDayOfWeek(OrderCloseTime())。
但结果是一样的,就像忽略了if(OrderProfit()<0)和有一个循环一样,变量得到了大数值。
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963666
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Вторник SL=1430207
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963665
我在这里错误地复制了它,纠正了符号if(OrderProfit()>0&&OrderType()<2),但这并没有改变本质,没有这个条件,循环也能正常工作。
但结果是一样的,因为如果(OrderProfit()<0) 被忽略,并且有一个循环,变量的值很大。
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963666
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Вторник SL=1430207
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963665
我把它错误地复制到这里,纠正了if(OrderProfit()>0&&OrderType()<2) 的符号,但这并没有改变本质,循环在没有这个条件的情况下正常工作。
第1天和第2天在哪里声明?
第1天和第2天在哪里声明?
我怀疑我选择的订单 不正确,它不起作用(OrderProfit()<0),我需要更具体地说明我需要哪个订单。我不知道为什么当最后一个订单在Take-Point关闭而没有其他订单时,它会跳过一个订单。 也许,如果我想通过历史搜索,循环应该以不同的方式构建?
{
if(OrderSelect(w,SELECT_BY_POS,MODE_HISTORY))
原因是Expert Advisors用类似的条件建立循环,它们按要求工作,但它们使用OrdersTotal() 工作。
{
if(OrderSelect(n,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic)
{
if(OrderType()>OP_SELL)
{
//---
int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY) b++;
if (OrderType()==OP_SELL) s++;
if (OrderType()==OP_BUYSTOP) b_STOP++;
if (OrderType()==OP_SELLSTOP) s_STOP++;
}
if (OrderType()==OP_BUY)
{
if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
CLOSEORDER(OP_SELL);
}
}
}
}
这不可能在一个周期内得到解决。在这个循环中,你应该记住数组中要删除的订单的代号,在下一个循环中,你应该按代号删除它们。
此外,你有一个混乱的大括号,你在OrderSelect{} 块之外处理订单,这是不正确的。