首先,我知道Raptor你以前曾向我提出过这个问题,但我不记得你在哪里写的,更重要的是明白我哪里错了?
据我所知,我写的是正确的,这样附在任何相应的货币对上的EA将能够始终只对该货币对工作。目前,我注意到GBPCAD和GBPUSD似乎不在一起,这意味着GBPCAD的止损认为它的计算是由GBPUSD对完成的......所以当一个挂单被触发时,止损从GBPCAD值闪烁到电缆....。
我使用magicnumber==1234。
有什么建议或我是个白痴的地方,请随时指出:(
你的问题很清楚,但由于你使用大括号缩进和条件的方式,可能有点难看。.你是这样做的。
for(int b=OrdersTotal()-1; b>=0; b--) { if(!OrderSelect(b,SELECT_BY_POS,MODE_TRADES))continue; if(OrderType()==OP_BUYSTOP) if(OrderMagicNumber()==MagicNumber) if(OrderSymbol()==Symbol()) // if the symbol matches do . . . if(OrderStopLoss()<iMA(NULL,60,MA_Period,0,1,0,0)-ATR) // . . . . this { Stored_BuyPrice = OrderOpenPrice(); // and this DeleteOrder = OrderDelete(OrderTicket()); // and this } if(OpenOrdersThisPair(Symbol())==0 && DeleteOrder==True)// If there are no open orders = place a new order. // this happens even if the symbol didn't match . . . { int NewBuyOrder = OrderSend(Symbol(),OP_BUYSTOP,LotSize,Stored_BuyPrice,3,BuyStopPrice,btp,NULL,MagicNumber,0,Green); if(NewBuyOrder == -1)Print("New Buy Order Last Error = ",GetLastError()); } }
我想你的意思是这样的 . .
for(int b=OrdersTotal()-1; b>=0; b--) { if(!OrderSelect(b, SELECT_BY_POS, MODE_TRADES)) continue; if( OrderType() == OP_BUYSTOP && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() ) { if(OrderStopLoss() < iMA(NULL, 60, MA_Period, 0, 1, 0, 0) - ATR) { Stored_BuyPrice = OrderOpenPrice(); DeleteOrder = OrderDelete(OrderTicket()); } if(OpenOrdersThisPair(Symbol()) == 0 && DeleteOrder) // If there are no open orders = place a new order. { int NewBuyOrder = OrderSend(Symbol(), OP_BUYSTOP, LotSize, Stored_BuyPrice, 3, BuyStopPrice, btp, NULL, MagicNumber, 0, Green); if(NewBuyOrder == -1) Print("New Buy Order Last Error = ", GetLastError()); } } }
谢谢你为我指出了这一点 :)
啊,好的--我错过了这样一个小东西。另外,当第一个 OrderSend()函数被调用时,我是否在那里做错了什么?我问这个问题是因为我想从逻辑上思考一下,它是否知道在那个时候应该把订单发送至哪一对?这可能是个愚蠢的问题,但我在这部分没有做错什么吧?"BuyTicketOrder "的发送功能部分?
谢谢你为我指出了这一点 :)
//+----------------------------------------------------------------------------------------------------------------------------------------+ //Moving Average Trailing Stop Function //+----------------------------------------------------------------------------------------------------------------------------------------+ void MA_Trail() { double ATR = iATR(NULL,60,14,1); double MA = iMA(NULL,60,MA_Period,0,1,0,1); double BuyStopPriceMath = MA - ATR; double SellStopPriceMath = MA + ATR; double BuyStopPrice = NormalizeDouble(BuyStopPriceMath,5); double SellStopPrice = NormalizeDouble(SellStopPriceMath,5); //buy order section - This is where the stop will trail based upon a fixed point value stated on the EA. It will trail with price. for(int b=OrdersTotal()-1; b>=0; b--) { if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)) if(OrderMagicNumber()==MagicNumber) if(OrderSymbol()==Symbol()) if(OrderType()==OP_BUY) { if(OrderStopLoss() > BuyStopPrice)break; if(OrderStopLoss() < BuyStopPrice) bool BuyModify = OrderModify(OrderTicket(),OrderOpenPrice(),BuyStopPrice,OrderTakeProfit(),0,CLR_NONE); if(BuyModify < 0)Print(" Buy Trailing Stop Failed: ", GetLastError()); } } //sell order section - This is where the stop will trail based upon a fixed point value stated on the EA. It will trail with price. for(int s=OrdersTotal()-1; s>=0; s--) { if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES)) if(OrderMagicNumber()==MagicNumber) if(OrderSymbol()==Symbol()) if(OrderType()==OP_SELL) { if(OrderStopLoss() < SellStopPrice)break; if(OrderStopLoss() > SellStopPrice) bool SellModify = OrderModify(OrderTicket(),OrderOpenPrice(),SellStopPrice,OrderTakeProfit(),0,CLR_NONE); if(SellModify < 0)Print(" Sell Trailing Stop Failed: ", GetLastError()); } } }好吧--我想这就是导致问题的原因。我刚刚更新了这部分的代码,它现在似乎已经停止了从电缆到GBPCAD价格的每一个 跳动...。它现在停留在一个止损价上,直到它在每小时收盘时自我更新......所以我将确认。
你觉得这样行吗?另外,因为我有这些部分订单关闭,我想我可能需要仔细检查大括号相对于 "OrderSymbol()==Symbol() "的位置是否正确?)
if(OpenOrdersThisPair(Symbol()) == 0你想调用多少次?对每个订单(你的代码)? 对于当前图表上的 每一个挂单(RaptorUK的代码)? 还是一次,在你存储和删除挂单后?
好吧--我想这就是导致问题的原因。我刚刚更新了这部分的代码,它现在似乎已经停止了从电缆到GBPCAD价格的每一个跳动...。它现在停留在一个止损价上,直到它在每小时收盘时自我更新......所以我将确认。你觉得这样行吗?另外,因为我有这些部分订单关闭,我想我可能需要仔细检查大括号相对于 "OrderSymbol()==Symbol() "的位置是否正确?)
它看起来不错,是的,总是检查 你的大括号,并尽可能让你的生活更轻松,如果这意味着添加大括号,那么就这样做,但尽量使大括号和缩进一致。
你不需要两个循环,一个就够了 . .
//+----------------------------------------------------------------------------------------------------------------------------------------+ //Moving Average Trailing Stop Function //+----------------------------------------------------------------------------------------------------------------------------------------+ void MA_Trail() { double ATR = iATR(NULL,60,14,1); double MA = iMA(NULL,60,MA_Period,0,1,0,1); double BuyStopPriceMath = MA - ATR; double SellStopPriceMath = MA + ATR; double BuyStopPrice = NormalizeDouble(BuyStopPriceMath,5); double SellStopPrice = NormalizeDouble(SellStopPriceMath,5); for(int b=OrdersTotal()-1; b>=0; b--) { if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)) if(OrderMagicNumber()==MagicNumber) if(OrderSymbol()==Symbol()) { //buy order section - This is where the stop will trail based // upon a fixed point value stated on the EA. It will trail with price. if(OrderType()==OP_BUY) { if(OrderStopLoss() > BuyStopPrice) break; if(OrderStopLoss() < BuyStopPrice) bool BuyModify = OrderModify(OrderTicket(),OrderOpenPrice(),BuyStopPrice,OrderTakeProfit(),0,CLR_NONE); if(!BuyModify)Print(" Buy Trailing Stop Failed: ", GetLastError()); } // sell order section - This is where the stop will trail based // upon a fixed point value stated on the EA. It will trail with price. if(OrderType()==OP_SELL) { if(OrderStopLoss() < SellStopPrice) break; if(OrderStopLoss() > SellStopPrice) bool SellModify = OrderModify(OrderTicket(),OrderOpenPrice(),SellStopPrice,OrderTakeProfit(),0,CLR_NONE); if(!SellModify)Print(" Sell Trailing Stop Failed: ", GetLastError()); } } }
OrderModify()返回的是一个bool,真或假,而不是一个int ......所以SellModify永远不会小于0 ......我昨天在ForexFactory网站上输入了同样的内容
每次订单被删除--我希望挂单每1小时收盘时被删除,然后用相同的参数开立新的订单,或者如果适用,根据"if(OrderStopLoss() < iMA(NULL, 60, MA_Period, 0,1, 0, 0)) - ATR)"
我需要为新的挂单(删除后)存储的唯一东西是该特定设置的初始进入价格。(Stored_BuyPrice = OrderOpenPrice();)
这很有趣,因为上面的第一段代码也是与我要发布的另一个主题有关的。与其发表一个新的主题,不如在这里问一个类似的问题,如果这样可以吗?请看下面的链接--只是一个两分钟的视频,解释了我的问题,而且发现很难解决......
我写了那么多的代码,但我现在开始意识到,这是一个我不得不修复的低效率的案例......
视频:http://screencast.com/t/4nl8AaH8Sag
如果我只提供了有限的代码,使其变得非常模糊,那我就再贴一些吧?
每次订单被删除--我希望挂单每1小时收盘时被删除,然后用相同的参数开立新的订单,或者如果适用,根据"if(OrderStopLoss() < iMA(NULL, 60, MA_Period, 0,1, 0, 0)) - ATR)"
我需要为新的挂单(删除后)存储的唯一东西是该特定设置的初始进入价格。(Stored_BuyPrice = OrderOpenPrice();)
这很有趣,因为上面的第一段代码也是与我要发布的另一个主题有关的。与其发表一个新的主题,不如在这里问一个类似的问题,如果这样可以吗?请看下面的链接--只是一个两分钟的视频,解释了我的问题,而且发现很难解决......
我写了那么多的代码,但我现在开始意识到,这是一个我不得不修复的低效率的案例......
视频:http://screencast.com/t/4nl8AaH8Sag
如果我只提供了有限的代码,使其变得非常模糊,那我就再贴一些吧?
回撤到21 EMA的情况只发生一次。从那里开始,它将停止寻找对21 EMA的任何回撤。然而,它应该做的是,确保当前打开的待定订单与每小时收盘后的手数、止损和获利 都是准确的更新。然而,我无法理解,为什么有时它能完美地工作,并在每个H1收盘后更新挂单,而有时却不能?为什么挂单会自行更新的原因是""if(OrderStopLoss() < iMA(NULL, 60, MA_Period, 0,1, 0, 0)) - ATR)"。
如果这不是真的,那么它就不会 - 然而,有无数次,当这是真的,但它不会删除订单并以新的价值放置一个新的订单?不知道你是否能在上面的代码中看到与视频有关的东西?(你纠正的第一个代码)。希望这更清楚?
据我所知,我写的是正确的,这样附在任何相应货币对上的EA将能够始终只对该货币对工作。目前,我注意到GBPCAD和GBPUSD似乎不在一起,这意味着GBPCAD的止损认为它的计算是由GBPUSD对 完成的......所以当一个挂单被触发时,止损从GBPCAD值闪烁到电缆....。
我使用magicnumber==1234。
有什么建议或我是个白痴的地方,请随时指出:(