任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 758 1...751752753754755756757758759760761762763764765...1178 新评论 Artyom Trishkin 2014.10.30 05:25 #7571 Ozero:将";"传到支架后面。该程序可以工作,但偶尔会出现4108错误。奥泽罗。打开帮助,看到运行时错误,我们看到。 4108 误导性票据 票号不正确。思考和搜索... MegaHunter 2014.10.30 05:26 #7572 帮助人们需要在每种货币上用自己的订单进行交易,以区别和区分+在开出的订单后,如果价格回滚得更远,可以开出与第一个相同的另一个订单。//+------------------------------------------------------------------+ //| MACD Sample.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ extern double TakeProfit = 50; extern double Lots = 0.1; extern double TrailingStop = 30; extern double MACDOpenLevel=3; extern double MACDCloseLevel=2; extern double MATrendPeriod=26; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; int cnt=0, ticket, total; // первичные проверки данных // важно удостовериться что эксперт работает на нормальном графике и // пользователь правильно выставил внешние переменные (Lots, StopLoss, // TakeProfit, TrailingStop) // в нашем случае проверяем только TakeProfit if(Bars<100) { Print("bars less than 100"); return(0); } if(TakeProfit<10) { Print("TakeProfit less than 10"); return(0); // проверяем TakeProfit } // ради упрощения и ускорения кода, сохраним необходимые // данные индикаторов во временных переменных MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1); total=OrdersTotal(); if(total<1) { // нет ни одного открытого ордера if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } // проверяем на возможность встать в длинную позицию (BUY) if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return(0); } // проверяем на возможность встать в короткую позицию (SELL) if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); return(0); } return(0); } // переходим к важной части эксперта - контролю открытых позиций // 'важно правильно войти в рынок, но выйти - еще важнее...' for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // это открытая позиция? OP_BUY или OP_SELL OrderSymbol()==Symbol()) // инструмент совпадает? { if(OrderType()==OP_BUY) // открыта длинная позиция { // проверим, может уже пора закрываться? if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && MacdCurrent>(MACDCloseLevel*Point)) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // закрываем позицию return(0); // выходим } // проверим - может можно/нужно уже трейлинг стоп ставить? if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop, OrderTakeProfit(),0,Green); return(0); } } } } else // иначе это короткая позиция { // проверим, может уже пора закрываться? if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point)) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // закрываем позицию return(0); // выходим } // проверим - может можно/нужно уже трейлинг стоп ставить? if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop, OrderTakeProfit(),0,Red); return(0); } } } } } } return(0); } // конец. Alexey Kravchenko 2014.10.30 05:33 #7573 大家好!我刚刚注意到,NormalizeDouble 的工作方式很奇怪。也就是说,专家顾问工作良好,没有错误,但策略测试器中的日志却非常奇怪。我将解释。我用这个函数来计算利润。我做了我认为NormalizeDouble(Profit,Digits)应该做的事。然后我打印(" profit=",DoubleToStrMorePrecision(Profit,8))。结果,日志显示如下:"利润=0.88881912"。似乎是0.88881000,对吗?或者是我太傻,做错了什么? Artyom Trishkin 2014.10.30 05:36 #7574 goodearth:大家好!我刚刚注意到,NormalizeDouble的工作方式很奇怪。也就是说,专家顾问工作良好,没有错误,但策略测试器中的日志却非常奇怪。我将解释。我用这个函数来计算利润。我做了我认为NormalizeDouble(Profit,Digits)应该做的事。然后我打印(" profit=",DoubleToStrMorePrecision(Profit,8))。结果,日志显示如下:"利润=0.88881912"。似乎是0.88881000,对吗?或者是我太傻,做错了什么? 你在交易订单 中是否有一个利润值? Alexey Kravchenko 2014.10.30 05:43 #7575 artmedia70: 您的利润值是否参与交易订单?是的,当然了。而且没有错误:-)。这就是为什么我感到惊讶。我有Build 735。交易是在演示中进行的。Aaaaaaah I got it !我忘记了赋值操作:-)。"利润=NormalizeDouble(Profit,Digits)"。但我还是不明白为什么EA不显示错误 ))也许服务器会自动轮流.....我以为NormalizeDouble是一个过程,而不是一个函数:-)。 Boris 2014.10.30 06:17 #7576 Ozero:把";"放在括号后面。 该程序可以工作,但偶尔会出现4108错误。奥泽罗。事实上,它需要被删除! Artyom Trishkin 2014.10.30 06:35 #7577 borilunad:事实上,它应该被删除!鲍里斯,你最好直接给他看代码,因为我太困了,记不住......;)ResetLastError(); if(!OrderClose(OrderTicket(),OrderLots(),_Bid,15)) Print("Чё-та не закрылася позиция. Фигня вот такая происходит: "+GetLastError()); Boris 2014.10.30 07:05 #7578 artmedia70:鲍里斯,你最好直接给他看代码,因为我太困了,记不住......;)我不是故意要滥用你的版权!;)认真地说,有些东西没有粘住!但我现在要尝试一下!ResetLastError(); if(!OrderClose(OrderTicket(),OrderLots(),_Bid,15)) Print("");而现在,它成功了!这很奇怪! visnu 2014.10.30 11:35 #7579 你好请给我一个解决方案。有一个EA,在编辑器的第500次构建中编译没有错误。但在新版本中,它产生了错误。我看到这些错误。bool TP?=true; // ошибка '?' - semicolon expected 而这一次是两次。if(TP?) // ')' - unexpected token // ')' - ':' colon sign expected 我翻阅了新版本和旧版本的手册,但我没有发现任何关于问号的内容。问题:这些操作是什么意思,如何纠正它们以使代码正常编译?提前感谢。 [删除] 2014.10.30 14:26 #7580 你好!请你告诉我为什么我有时会出现ifle运算符不工作的情况。 下面是一个例子。double H3=ObjectGet ("H3 line", OBJPROP_PRICE1); int start() { double price = Bid; if (price==H3) { Alert ("Урааааа ", Symbol()); } return(0); }其中: H3是级别的 价格值 价格是当前的价格 结果是价格达到这个级别(有时甚至停在这个级别),但警报没有触发。 你能告诉我错误是什么吗? 1...751752753754755756757758759760761762763764765...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
将";"传到支架后面。
该程序可以工作,但偶尔会出现4108错误。
奥泽罗。
打开帮助,看到运行时错误,我们看到。
4108
误导性票据
票号不正确。
思考和搜索...
帮助人们需要在每种货币上用自己的订单进行交易,以区别和区分+在开出的订单后,如果价格回滚得更远,可以开出与第一个相同的另一个订单。
大家好!
我刚刚注意到,NormalizeDouble 的工作方式很奇怪。
也就是说,专家顾问工作良好,没有错误,但策略测试器中的日志却非常奇怪。
我将解释。
我用这个函数来计算利润。我做了我认为NormalizeDouble(Profit,Digits)应该做的事。
然后我打印(" profit=",DoubleToStrMorePrecision(Profit,8))。
结果,日志显示如下:"利润=0.88881912"。似乎是0.88881000,对吗?
或者是我太傻,做错了什么?
大家好!
我刚刚注意到,NormalizeDouble的工作方式很奇怪。
也就是说,专家顾问工作良好,没有错误,但策略测试器中的日志却非常奇怪。
我将解释。
我用这个函数来计算利润。我做了我认为NormalizeDouble(Profit,Digits)应该做的事。
然后我打印(" profit=",DoubleToStrMorePrecision(Profit,8))。
结果,日志显示如下:"利润=0.88881912"。似乎是0.88881000,对吗?
或者是我太傻,做错了什么?
您的利润值是否参与交易订单?
是的,当然了。而且没有错误:-)。这就是为什么我感到惊讶。
我有Build 735。
交易是在演示中进行的。
Aaaaaaah I got it !我忘记了赋值操作:-)。"利润=NormalizeDouble(Profit,Digits)"。
但我还是不明白为什么EA不显示错误 ))
也许服务器会自动轮流.....
我以为NormalizeDouble是一个过程,而不是一个函数:-)。
把";"放在括号后面。
该程序可以工作,但偶尔会出现4108错误。
奥泽罗。
事实上,它需要被删除!
事实上,它应该被删除!
鲍里斯,你最好直接给他看代码,因为我太困了,记不住......;)
鲍里斯,你最好直接给他看代码,因为我太困了,记不住......;)
我不是故意要滥用你的版权!;)
认真地说,有些东西没有粘住!但我现在要尝试一下!
而现在,它成功了!这很奇怪!
你好!请你告诉我为什么我有时会出现ifle运算符不工作的情况。
下面是一个例子。
其中:
H3是级别的 价格值
价格是当前的价格
结果是价格达到这个级别(有时甚至停在这个级别),但警报没有触发。
你能告诉我错误是什么吗?