[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 420 1...413414415416417418419420421422423424425426427...652 新评论 Артур 2011.12.09 17:41 #4191 你好。 我已经创建了以下的循环。 for(j=0;j<ArraySize(fiboOrd);j++) { if(fiboOrd[j]==d && TP==0) TP=NormalizeDouble(Asia*fibo[j],Digits); if(fiboOrd[j]==d && TP>0) Price=NormalizeDouble(Asia*fibo[j],Digits); } 问题如下:变量TP的值由于某种原因只为j的第一个值找到,而变量Price的值为j的所有值找到。 我怎样才能得到所有j值的所有TP值?我的错误是什么? 预先感谢你。 Артур 2011.12.09 18:13 #4192 nemo811: 我怎样才能找到所有j值的所有TP值?我的错误是什么? 我没有必要回答这个问题,我自己想出来了。 [删除] 2011.12.09 18:28 #4193 frixer: 你好,请你告诉我如何找到最后一根蜡烛的低点和高点,比如说 最后一个是还没有完全形成的那个? Low_0=Low[0]; // Low_0 присвоена мин. цена 0-го бара High_0=High[0]; // High_0 присвоена макс. цена 0-го бара asasusa 2011.12.09 19:15 #4194 请告诉我,为什么专家顾问在实际交易中不能打开交易,而在策略测试中却能正常打开?而且日志中没有任何错误。Alpari的演示服务器。 elmucon 2011.12.09 19:21 #4195 sss2019: 请告诉我为什么专家顾问在实际交易中不能打开交易,而在策略测试中却能正常打开?而且日志中没有任何错误。Alpari的演示服务器。 很难说--有很多变体....。你能给我任何其他细节吗? asasusa 2011.12.09 19:26 #4196 elmucon: 很难说--有很多选择....。我想知道更多细节。 我不知道,一切看起来都很好,在测试器中一切都像钟表一样工作,但在模拟账户 中,时间已经到了,但没有开出任何交易,在接下来的一个小时里也是如此。也许你应该看一下代码。//+------------------------------------------------------------------+ //| test.mq4 | //| Copyright © 2011, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //+------------------------------------------------------------------+ //| extern variables | //+------------------------------------------------------------------+ extern int GMT = 2; extern int InTime = 23; extern int OrderDuration = 2; extern double Lot = 0.1; extern string MyComment = "Return"; extern int Slippage = 3; extern int StopLoss = 150; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int CurrentHour = TimeHour(TimeCurrent()); int CurrentMinute = TimeMinute(TimeCurrent()); datetime OrderExpiriation = TimeCurrent() + 3600 * OrderDuration; double MyPoint = Point; if(Digits == 3 || Digits == 5) { MyPoint = Point * 10; } //---- if(TimeHour(TimeCurrent()) + GMT == InTime && TimeMinute(TimeCurrent()) == 0 && OrdersTotal() == 0) { //---- Sending first order - Buy if(OrderSend(Symbol(),OP_BUYLIMIT,Lot,Open[0] - 10 * MyPoint,Slippage,Open[0] - StopLoss * MyPoint,Open[0],MyComment,16523,OrderExpiriation,Green) > 0) { Alert("Первый ордер запущен"); }else { Alert("Первый ордер не запущен"); } //---- Sending second order Buy if(OrderSend(Symbol(),OP_BUYLIMIT,Lot,Open[0] - 15 * MyPoint,Slippage,Open[0] - StopLoss * MyPoint,Open[0],MyComment,16523,OrderExpiriation,Green) > 0) { Alert("Второй ордер запущен"); }else { Alert("Второй ордер не летит"); } //---- Sending third order - Sell if(OrderSend(Symbol(),OP_SELLLIMIT,Lot,Open[0] + 10 * MyPoint,Slippage,Open[0] + StopLoss * MyPoint,Open[0],MyComment,16523,OrderExpiriation,Red) > 0) { Alert("Третий ордер отжахан"); }else { Alert("Третий ордер не отжахан"); } //---- Sending fourth order - Sell if(OrderSend(Symbol(),OP_SELLLIMIT,Lot,Open[0] + 15 * MyPoint,Slippage,Open[0] + StopLoss * MyPoint,Open[0],MyComment,16523,OrderExpiriation,Red) > 0) { Alert("Четвертый ордер запущен"); }else { Alert("Четвертый ордер не запущен"); } } //---- return(0); } //+------------------------------------------------------------------+ 在日志或其他任何地方都没有错误。如果代码中没有错误(好吧,也许终端中有一些错误),那么更有可能是我把时间弄错了。 Александр 2011.12.10 04:17 #4197 rsi周期从未被改变过。 Mamed Mamedov 2011.12.10 04:24 #4198 kolyango: 最后一个是还没有完全形成的那个? 谢谢你,这很有帮助,但还有一个问题,但我会试着自己想办法解决。 [删除] 2011.12.10 05:04 #4199 如果你没有任何问题,我找不到一个好的程序员,我已经用简单的TS写了一个EA,但它不能正常工作 所以,看图片,在2个MAs的交汇处开单,快速穿过一个慢速MA从下到上--买入,反之亦然,顾问不知道如何开单,图片中一个很有说服力的例子。 1 - 在2011年11月3日买入,附近没有交叉点。 3 - 2011年11月4日卖出,同样的事情。 5 - 2011年11月7日买入;不清楚为什么要开这个订单。 我也看到了代码本身。 extern int period_EMA = 85, period_WMA = 5, period_RSI = 14, stoploss = 0, takeprofit = 500, risk = 10, Magic = 777; extern bool CloseCounter = false; extern double Lot = 0.1; extern int TrailingStop = 70; //если= 0, то трейлинг по фракталам или свечам extern int Tip.Fr.or.Candl = 1; //если= 0, то трейлинг по фракталам //если= 1, то трейлинг по свечам //-------------------------------------------------------------------- double SL,TP,LOT; int TimeBar; //-------------------------------------------------------------------- int start() { if (TimeBar==Time[0]) return(0); double EMA0 = iMA(NULL,0,period_EMA,0,MODE_EMA, PRICE_OPEN,0); double WMA0 = iMA(NULL,0,period_WMA,0,MODE_LWMA,PRICE_OPEN,0); double EMA1 = iMA(NULL,0,period_EMA,0,MODE_EMA, PRICE_OPEN,1); double WMA1 = iMA(NULL,0,period_WMA,0,MODE_LWMA,PRICE_OPEN,1); double RSI = iRSI(NULL,0,period_RSI,PRICE_OPEN,0); if (EMA0 < WMA0 && EMA1 > WMA1 && RSI > 50) { TimeBar=Time[0]; if (takeprofit!=0) TP = Ask + takeprofit*Point; if (stoploss!=0) SL = Ask - stoploss* Point; LOT = LOT(risk,1); if (CloseCounter) CLOSEORDER("Sell"); OPENORDER ("Buy"); } if (EMA0 > WMA0 && EMA1 < WMA1 && RSI < 50) { TimeBar=Time[0]; if (takeprofit!=0) TP = Bid - takeprofit*Point; if (stoploss!=0) SL = Bid + stoploss* Point; LOT = LOT(risk,1); if (CloseCounter) CLOSEORDER("Buy"); OPENORDER ("Sell"); } TrailingStop(); return(0); } //-------------------------------------------------------------------- void CLOSEORDER(string ord) { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if (OrderSymbol()!=Symbol()||Magic!=OrderMagicNumber()) continue; if (OrderType()==OP_BUY && ord=="Buy") OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); if (OrderType()==OP_SELL && ord=="Sell") OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); } } } //-------------------------------------------------------------------- void OPENORDER(string ord) { int error; if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, LOT,Ask,2,SL,TP,"EMA WMA RSI",Magic,3); if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,LOT,Bid,2,SL,TP,"EMA WMA RSI",Magic,3); if (error==-1) ShowERROR(error,0,0); return; } //-------------------------------------------------------------------- void ShowERROR(int Ticket,double SL,double TP) { int err=GetLastError(); switch ( err ) { case 1: return; case 2: Alert("Нет связи с торговым сервером " ,Ticket," ",Symbol());return; case 130: Alert("Error близкие стопы Ticket ", Ticket," ",Symbol());return; case 134: Alert("Недостаточно денег ", Ticket," ",Symbol());return; case 146: Alert("Error Подсистема торговли занята ", Ticket," ",Symbol());return; case 129: Alert("Error Неправильная цена ", Ticket," ",Symbol());return; case 131: Alert("Error Неправильный объем ", Ticket," ",Symbol());return; default: Alert("Error ",err," Ticket ", Ticket," ",Symbol());return; } } //-------------------------------------------------------------------- double LOT(int risk,int ord) { if (Lot!=0) return(Lot); double MINLOT = MarketInfo(Symbol(),MODE_MINLOT); LOT = AccountFreeMargin()*risk/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/ord; if (LOT>MarketInfo(Symbol(),MODE_MAXLOT)) LOT = MarketInfo(Symbol(),MODE_MAXLOT); if (LOT<MINLOT) LOT = MINLOT; if (MINLOT<0.1) LOT = NormalizeDouble(LOT,2); else LOT = NormalizeDouble(LOT,1); return(LOT); } //-------------------------------------------------------------------- void TrailingStop() { int tip,Ticket; bool error; double StLo,OSL,OOP; for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)==true) { tip = OrderType(); if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { OSL = OrderStopLoss(); OOP = OrderOpenPrice(); Ticket = OrderTicket(); if (tip==OP_BUY) { StLo = SlLastBar(1,Bid,Tip.Fr.or.Candl,TrailingStop); if (StLo <= OOP) continue; if (StLo > OSL) { error=OrderModify(Ticket,OOP,NormalizeDouble(StLo,Digits), OrderTakeProfit(),0,White); Comment("TrailingStop ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES)); Sleep(500); if (!error) Comment("Error order ",Ticket," TrailingStop ", GetLastError()," ",Symbol()," SL ",StLo); } } if (tip==OP_SELL) { StLo = SlLastBar(-1,Ask,Tip.Fr.or.Candl,TrailingStop); if (StLo==0) continue; if (StLo >= OOP) continue; if (StLo < OSL || OSL==0 ) { error=OrderModify(Ticket,OOP,NormalizeDouble(StLo,Digits), OrderTakeProfit(),0,White); Comment("TrailingStop "+Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES)); Sleep(500); if (!error) Comment("Error order ",Ticket," TrailingStop ", GetLastError()," ",Symbol()," SL ",StLo); } } } } } } //-------------------------------------------------------------------- double SlLastBar(int tip,double price, int tipFr, int tral) { double fr; int jj,ii,delta=5; if (tral!=0) { if (tip==1) fr = Bid - tral*Point; else fr = Ask + tral*Point; } else { if (tipFr==0) { if (tip== 1) for (ii=1; ii<100; ii++) { fr = iFractals(NULL,0,MODE_LOWER,ii); if (fr!=0) if (price-delta*Point > fr) break; else fr=0; } if (tip==-1) for (jj=1; jj<100; jj++) { fr = iFractals(NULL,0,MODE_UPPER,jj); if (fr!=0) if (price+delta*Point < fr) break; else fr=0; } } else { if (tip== 1) for (ii=1; ii<100; ii++) { fr = iLow(NULL,0,ii); if (fr!=0) if (price-delta*Point > fr) break; else fr=0; } if (tip==-1) for (jj=1; jj<100; jj++) { fr = iHigh(NULL,0,jj); if (price+delta*Point < fr) break; else fr=0; } } } /* if (tip== 1) { ObjectDelete("SL Buy"); ObjectDelete("SL-"); ObjectCreate("SL Buy",OBJ_ARROW,0,TIME,fr,0,0,0,0); ObjectSet ("SL Buy",OBJPROP_ARROWCODE,6); ObjectSet ("SL Buy",OBJPROP_COLOR, Blue); ObjectCreate("SL-",OBJ_ARROW,0,TIME,price-delta*POINT,0,0,0,0); ObjectSet ("SL-",OBJPROP_ARROWCODE,4); ObjectSet ("SL-",OBJPROP_COLOR, Blue); } if (tip==-1) { ObjectDelete("SL Sell"); ObjectDelete("SL+"); ObjectCreate("SL Sell",OBJ_ARROW,0,TIME,fr,0,0,0,0); ObjectSet ("SL Sell",OBJPROP_ARROWCODE,6); ObjectSet ("SL Sell", OBJPROP_COLOR, Green); ObjectCreate("SL+",OBJ_ARROW,0,TIME,price+delta*POINT,0,0,0,0); ObjectSet ("SL+",OBJPROP_ARROWCODE,4); ObjectSet ("SL+",OBJPROP_COLOR, Green); }*/ return(fr); } //-------------------------------------------------------------------- 非常感谢你事先的努力! [删除] 2011.12.10 06:02 #4200 下午好,请告知 "2011.12.10 12:46:26 TestGenerator: unmatched data error (volume limit 2225 at 2011.11.29 11:00 is exceeded) "这个错误是什么意思,如何纠正....。 1...413414415416417418419420421422423424425426427...652 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好。
我已经创建了以下的循环。
问题如下:变量TP的值由于某种原因只为j的第一个值找到,而变量Price的值为j的所有值找到。
我怎样才能得到所有j值的所有TP值?我的错误是什么?
预先感谢你。
我怎样才能找到所有j值的所有TP值?我的错误是什么?
我没有必要回答这个问题,我自己想出来了。
你好,请你告诉我如何找到最后一根蜡烛的低点和高点,比如说
最后一个是还没有完全形成的那个?
请告诉我,为什么专家顾问在实际交易中不能打开交易,而在策略测试中却能正常打开?而且日志中没有任何错误。Alpari的演示服务器。
请告诉我为什么专家顾问在实际交易中不能打开交易,而在策略测试中却能正常打开?而且日志中没有任何错误。Alpari的演示服务器。
很难说--有很多变体....。你能给我任何其他细节吗?
很难说--有很多选择....。我想知道更多细节。
在日志或其他任何地方都没有错误。如果代码中没有错误(好吧,也许终端中有一些错误),那么更有可能是我把时间弄错了。我不知道,一切看起来都很好,在测试器中一切都像钟表一样工作,但在模拟账户 中,时间已经到了,但没有开出任何交易,在接下来的一个小时里也是如此。也许你应该看一下代码。
最后一个是还没有完全形成的那个?
如果你没有任何问题,我找不到一个好的程序员,我已经用简单的TS写了一个EA,但它不能正常工作
所以,看图片,在2个MAs的交汇处开单,快速穿过一个慢速MA从下到上--买入,反之亦然,顾问不知道如何开单,图片中一个很有说服力的例子。
1 - 在2011年11月3日买入,附近没有交叉点。
3 - 2011年11月4日卖出,同样的事情。
5 - 2011年11月7日买入;不清楚为什么要开这个订单。
我也看到了代码本身。
非常感谢你事先的努力!
下午好,请告知 "2011.12.10 12:46:26 TestGenerator: unmatched data error (volume limit 2225 at 2011.11.29 11:00 is exceeded) "这个错误是什么意思,如何纠正....。