[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 767 1...760761762763764765766767768769770771772773774...1145 新评论 Alexey 2010.07.30 03:09 #7661 FoxUA: 是的,部分代码工作,部分代码说4107和130错误,最有趣的是,他们从一个相同的函数中获取价格,并在一个相同的开放函数上工作。 在某处尝试以下结构,这个例子是针对我的情况。 如果(OrderSend(Symbol(),OP_BUYSTOP,Lot,OpenPrice,0,Ask,0,Mg,0,Red)==-1) Print("Error 1 OP_BUYSTOP ","Open=",OpenPrice,"Stop Loss=",Ask," Trall=",TrallBuy," StopLoss=",StopLoss) ; 请看日志中的结果, Aleksey Antonov 2010.07.30 07:57 #7662 鉴赏家们下午好。帮助我理解这个代码... //+------------------------------------------------------------------+ //|计算未结头寸| //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0。 //---- for(int i=0;i<OrdersTotal();i++) { 如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 如果(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICEA) { 如果(OrderType()==OP_BUY) buys++; 如果(OrderType()==OP_SELL) sells++; } } //---- 退货订单量 if(buys>0) return(buys)。 否则返回(-sells)。 } //+------------------------------------------------------------------+ //|计算最佳手数| //+------------------------------------------------------------------+ 双倍拍品尺寸(){ 双层地段MM。 如果(PairsTraded==0){ lotMM = MathCeil(AccountFreeMargin() * Risk / 10000) / 10; } else { lotMM = MathCeil(AccountFreeMargin() * Risk / 10000 /PairsTraded) / 10 ; } 如果(MM==true){ 如果(lotMM < 0.1)lotMM = Lots; 如果(lotMM > 1.0)lotMM = MathCeil(lotMM); 如果(lotMM > 100)lotMM = MaxLots; } else lotMM = Lots; 返回(lotMM)。 } //+------------------------------------------------------------------+ //| 检查未结订单的情况 | //+------------------------------------------------------------------+ 空白的CheckForOpen()。 { 双重CCI5,CCI15,CCI30,CCIH1,CCIH4。 int 发送。 //----MultitimeFrame CCI设置 CCI5 = iCCI(NULL,PERIOD_M5,50,PRICE_CLOSE,0)。 CCI15 = iCCI(NULL,PERIOD_M15,50,PRICE_CLOSE,0)。 CCI30 = iCCI(NULL,PERIOD_M30,50,PRICE_CLOSE,0)。 CCIH1 = iCCI(NULL,PERIOD_H1,50,PRICE_CLOSE,0)。 //---- //---- 卖出条件 如果((CCIH1<0)&&(CCI30<0)&&(CCI15<0)&&(CCI5<0))//卖出 { send=OrderSend(Symbol(),OP_SELL,LotSize(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,MagicName+"-Sell",MAGICEA,0,Red)。 返回。 } //---- 购买条件 如果((CCIH1>0)&&(CCI30>0)&&(CCI15>0)&&(CCI5>0))//op买入 { send=OrderSend(Symbol(),OP_BUY,LotSize(),Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,MagicName+"-Buy",MAGICEA,0,Blue)。 返回。 } } //---- //+------------------------------------------------------------------+ //| 检查平仓的条件| //+------------------------------------------------------------------+ 空白的CheckForClose() { //---- //---- for(int i=0;i<OrdersTotal();i++) { 如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 如果(OrderMagicNumber()!=MAGICEA || OrderSymbol()!=Symbol()) 继续。 //---- 检查订单类型 如果(OrderSymbol()==Symbol() &&OrderType()==OP_BUY &&Bid-TrailingStop*Point > OrderStopLoss()){ 如果(Bid > OrderOpenPrice()+TrailingStop*Point) { OrderModify(OrderTicket(),OrderOpenPrice(), Bid-TrailingStop*Point,0,0,White)。 } } else { OrderModify(OrderTicket(),OrderOpenPrice(), Bid-1*Point,0,0,White)。 } 如果(OrderSymbol()==Symbol() &&OrderType()==OP_SELL &&Ask-TrailingStop*Point < OrderStopLoss()){ 如果(Ask < OrderOpenPrice()-TrailingStop*Point) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,0,0,White) 。 } } else { OrderModify(OrderTicket(),OrderOpenPrice(), Ask+1*Point,0,0,White)。 } } //---- } //+------------------------------------------------------------------+ //| 启动功能| //+------------------------------------------------------------------+ 空白启动()。 { //---- 检查历史和交易情况 如果(Bars<100 || IsTradeAllowed()==false) 返回。 //---- 按当前符号计算未结订单 如果(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); 否则CheckForClose()。 //---- } //+------------------------------------------------------------------+ 如果我想让它只开一个仓位,而且我不想让它在我关闭后再开,但它在我关闭后开了一个仓位,它又开了。 [WARNING CLOSED!] Any newbie [存档!]我将免费写一份顾问报告 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. Artyom Trishkin 2010.07.30 10:24 #7663 mydone:鉴赏家们下午好。帮助我理解这个代码......代码 ... 我不明白我做错了什么。 我需要它在形成的条件下只打开一个交易,在它关闭后直到下一个条件不再打开......但我的情况是,它打开了,我关闭了例如一个窗口,它又在同一个地方打开了,这是为什么?你拥有它,只要开放条件存在,它就会开放。 对该信号是否已经开仓进行检查,例如,bool OpnPose = false;在通过该信号开仓 之前,检查该标志,如果没有设置(OpnPose == false),则开仓。当它开盘时,如果它真的开盘并进入市场,你就通过这个信号设置开盘标志:OpnPose = true;一旦有新的信号出现,你就抛弃这个信号: OpnPose = false。 techno 2010.07.30 10:38 #7664 是的,我们可以把它变得更简单,在信号被触发后,放一个计数器,使2或3个蜡烛内没有其他的开盘,这样,如果它手动关闭,没有其他的开盘,计数器在几个蜡烛后取消了开盘禁令。 Aleksey Antonov 2010.07.30 10:46 #7665 谢谢你 Artyom Trishkin 2010.07.30 10:51 #7666 Techno: 是的,我们可以把它变得更简单,在信号被触发后,放一个计数器,使2或3个蜡烛内没有其他的开盘,这样,如果它手动关闭,没有其他的开盘,计数器在几个蜡烛后取消了开盘禁令。 而在禁令解除后,EA将再次把订单投入市场......如果EA在10、15或20个烛台后决定平仓,不再开仓,即使信号仍然存在,该怎么办?例如,在周五... techno 2010.07.30 11:03 #7667 artmedia70: 而在禁令解除后,EA将把该订单重新投入市场......如果它在10、15、20根蜡烛后决定平仓,不再开仓,即使信号仍然存在?例如,在周五... 即使在一个蜡烛之后,也会有一个完全不同的信号,必须考虑到。只需等待3个蜡烛图,第一个信号就会消失。顺便说一下,你使用的指标有5、15、30和60的时间,所以3个30或15分钟的烛台就足够了。 FoxUA 2010.07.30 11:18 #7668 我的问题是,如果有一个新的订单,如何从例子中做,如果有一个关闭的订单,"if(TotalHistoryOrders<OrdersHistoryTotal())//另一个订单已经出现在历史上",我需要打开一个也被确定 techno 2010.07.30 11:26 #7669 FoxUA: 我的问题是,如果有一个新的订单,如何从例子中做,如果有一个关闭的订单,"if(TotalHistoryOrders<OrdersHistoryTotal())//另一个订单已经出现在历史上",我需要打开一个也被确定 当浏览所有订单并筛选出不必要的订单时,计算数字并保存。 如果数字随着新的循环发生变化,这意味着要么有一个新的订单已经打开,要么已经消失了...... FoxUA 2010.07.30 11:42 #7670 Techno: 当尝试所有的订单并筛选出不必要的订单时,数一数,记住它,如果数字随着新的循环发生了变化,这意味着新的订单出现或消失了。 我只需要调用函数就可以了,我只需要一行 "如果订单多于1比....就这样",而你却给我提供了一个完整的功能 这就是我存储订单数据的方式 int total_order; // переменная в которой хранится общее количество открытых ордеров в терминале int my_total_order; // переменная в которой хранится общее количество открытых ордеров с нашим Magic 1...760761762763764765766767768769770771772773774...1145 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
是的,部分代码工作,部分代码说4107和130错误,最有趣的是,他们从一个相同的函数中获取价格,并在一个相同的开放函数上工作。
在某处尝试以下结构,这个例子是针对我的情况。
如果(OrderSend(Symbol(),OP_BUYSTOP,Lot,OpenPrice,0,Ask,0,Mg,0,Red)==-1)
Print("Error 1 OP_BUYSTOP ","Open=",OpenPrice,"Stop Loss=",Ask," Trall=",TrallBuy," StopLoss=",StopLoss) ;
请看日志中的结果,
鉴赏家们下午好。帮助我理解这个代码...
//+------------------------------------------------------------------+
//|计算未结头寸|
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0。
//----
for(int i=0;i<OrdersTotal();i++)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
如果(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICEA)
{
如果(OrderType()==OP_BUY) buys++;
如果(OrderType()==OP_SELL) sells++;
}
}
//---- 退货订单量
if(buys>0) return(buys)。
否则返回(-sells)。
}
//+------------------------------------------------------------------+
//|计算最佳手数|
//+------------------------------------------------------------------+
双倍拍品尺寸(){
双层地段MM。
如果(PairsTraded==0){
lotMM = MathCeil(AccountFreeMargin() * Risk / 10000) / 10;
} else {
lotMM = MathCeil(AccountFreeMargin() * Risk / 10000 /PairsTraded) / 10 ;
}
如果(MM==true){
如果(lotMM < 0.1)lotMM = Lots;
如果(lotMM > 1.0)lotMM = MathCeil(lotMM);
如果(lotMM > 100)lotMM = MaxLots;
}
else lotMM = Lots;
返回(lotMM)。
}
//+------------------------------------------------------------------+
//| 检查未结订单的情况 |
//+------------------------------------------------------------------+
空白的CheckForOpen()。
{
双重CCI5,CCI15,CCI30,CCIH1,CCIH4。
int 发送。
//----MultitimeFrame CCI设置
CCI5 = iCCI(NULL,PERIOD_M5,50,PRICE_CLOSE,0)。
CCI15 = iCCI(NULL,PERIOD_M15,50,PRICE_CLOSE,0)。
CCI30 = iCCI(NULL,PERIOD_M30,50,PRICE_CLOSE,0)。
CCIH1 = iCCI(NULL,PERIOD_H1,50,PRICE_CLOSE,0)。
//----
//---- 卖出条件
如果((CCIH1<0)&&(CCI30<0)&&(CCI15<0)&&(CCI5<0))//卖出
{
send=OrderSend(Symbol(),OP_SELL,LotSize(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,MagicName+"-Sell",MAGICEA,0,Red)。
返回。
}
//---- 购买条件
如果((CCIH1>0)&&(CCI30>0)&&(CCI15>0)&&(CCI5>0))//op买入
{
send=OrderSend(Symbol(),OP_BUY,LotSize(),Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,MagicName+"-Buy",MAGICEA,0,Blue)。
返回。
}
}
//----
//+------------------------------------------------------------------+
//| 检查平仓的条件|
//+------------------------------------------------------------------+
空白的CheckForClose()
{
//----
//----
for(int i=0;i<OrdersTotal();i++)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
如果(OrderMagicNumber()!=MAGICEA || OrderSymbol()!=Symbol()) 继续。
//---- 检查订单类型
如果(OrderSymbol()==Symbol() &&OrderType()==OP_BUY &&Bid-TrailingStop*Point > OrderStopLoss()){
如果(Bid > OrderOpenPrice()+TrailingStop*Point) {
OrderModify(OrderTicket(),OrderOpenPrice(), Bid-TrailingStop*Point,0,0,White)。
}
} else {
OrderModify(OrderTicket(),OrderOpenPrice(), Bid-1*Point,0,0,White)。
}
如果(OrderSymbol()==Symbol() &&OrderType()==OP_SELL &&Ask-TrailingStop*Point < OrderStopLoss()){
如果(Ask < OrderOpenPrice()-TrailingStop*Point) {
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,0,0,White) 。
}
} else {
OrderModify(OrderTicket(),OrderOpenPrice(), Ask+1*Point,0,0,White)。
}
}
//----
}
//+------------------------------------------------------------------+
//| 启动功能|
//+------------------------------------------------------------------+
空白启动()。
{
//---- 检查历史和交易情况
如果(Bars<100 || IsTradeAllowed()==false) 返回。
//---- 按当前符号计算未结订单
如果(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
否则CheckForClose()。
//----
}
//+------------------------------------------------------------------+
如果我想让它只开一个仓位,而且我不想让它在我关闭后再开,但它在我关闭后开了一个仓位,它又开了。
鉴赏家们下午好。帮助我理解这个代码...
...代码 ...我不明白我做错了什么。 我需要它在形成的条件下只打开一个交易,在它关闭后直到下一个条件不再打开......但我的情况是,它打开了,我关闭了例如一个窗口,它又在同一个地方打开了,这是为什么?
你拥有它,只要开放条件存在,它就会开放。
对该信号是否已经开仓进行检查,例如,bool OpnPose = false;在通过该信号开仓 之前,检查该标志,如果没有设置(OpnPose == false),则开仓。当它开盘时,如果它真的开盘并进入市场,你就通过这个信号设置开盘标志:OpnPose = true;一旦有新的信号出现,你就抛弃这个信号:
OpnPose = false。
谢谢你
是的,我们可以把它变得更简单,在信号被触发后,放一个计数器,使2或3个蜡烛内没有其他的开盘,这样,如果它手动关闭,没有其他的开盘,计数器在几个蜡烛后取消了开盘禁令。
而在禁令解除后,EA将把该订单重新投入市场......如果它在10、15、20根蜡烛后决定平仓,不再开仓,即使信号仍然存在?例如,在周五...
我的问题是,如果有一个新的订单,如何从例子中做,如果有一个关闭的订单,"if(TotalHistoryOrders<OrdersHistoryTotal())//另一个订单已经出现在历史上",我需要打开一个也被确定
我的问题是,如果有一个新的订单,如何从例子中做,如果有一个关闭的订单,"if(TotalHistoryOrders<OrdersHistoryTotal())//另一个订单已经出现在历史上",我需要打开一个也被确定
当尝试所有的订单并筛选出不必要的订单时,数一数,记住它,如果数字随着新的循环发生了变化,这意味着新的订单出现或消失了。
我只需要调用函数就可以了,我只需要一行 "如果订单多于1比....就这样",而你却给我提供了一个完整的功能
这就是我存储订单数据的方式