[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 389 1...382383384385386387388389390391392393394395396...631 新评论 [删除] 2012.09.19 17:10 #3881 snail09_1: 是难以检查,还是懒得检查?提出这个问题比较容易。投标价格可以是零吗?如果什么都不卖的话,它就可以8-( 这不是问题,如果终端可以在某些时候重置出价(个人经验很有趣)。 [Удален] 2012.09.19 17:26 #3882 YOUNGA: 这不是一个终端是否能在某个时间点重置标价的问题(个人经验值得关注)。 我从来没有见过。你见过温度计上的绝对零度吗? 嗯,这不可能是问题所在。也许你没有人可以倾诉? Snegovik 2012.09.19 17:41 #3883 snail09_1: 同样,也是如此。搞清楚这个脚本,你的脚本就会出来得更好,你甚至可以增加额外的功能。 我不太明白如何编写一个.dll文件 如果我理解正确的话,脚本的基础在这个文件中。 Vladimir Tkach 2012.09.19 17:57 #3884 伙计们!在历史上的策略测试器中,专家顾问不向文件提供信息,只有在在线交易时才提供。原因是什么,我怎样才能解决这个问题?我不知道如何治愈它。 谢谢你。 Yury Reshetov 2012.09.19 18:02 #3885 net: 伙计们!在历史上的策略测试器中,专家顾问不向文件提供信息,只有在在线交易时才提供。原因是什么,我怎样才能解决这个问题?我不知道如何治愈它。 谢谢你。 它只保存在MetaTrader 4\tester\experts\files目录中。 Владимир Тезис 2012.09.19 19:58 #3886 Snegovik: 我不太明白如何编写一个.dll文件 如果我理解正确的话,脚本的基础就在这个文件中。 没有1个脚本可以向服务器发送一个订单,同时开出几个订单。你必须一次打开一个。提供给你的DLL只是创建一个可视化的窗口,并与之一起工作。MQL4工具可能足以完成你的任务 Viktar Dzemikhau 2012.09.19 20:46 #3887 这里是我的地段(Martin)计算功能。 double Lots() { // double LotsArray[]={mode_1,mode_2,mode_3,mode_4,mode_5,mode_6}; // double LotsArray[]= {0.1,0.2,0.3,0.4,0.5,0.6}; int LossCount = 0; double LotM=Lot; int total = OrdersHistoryTotal(); for (int i = total-1; i >= 0; i--) { OrderSelect(i, SELECT_BY_POS, MODE_HISTORY); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderProfit() > 0) { LotM=LotsArray[0]; } else { LotM=LotsArray[LossCount+1]; LossCount++; } } } return(LotM); } 这些是这个函数的全局变量。 double Lot = 0.1; extern double mode_1 = 0.1; extern double mode_2 = 0.2; extern double mode_3 = 0.4; extern double mode_4 = 0.8; extern double mode_5 = 1.6; extern double mode_6 = 3.2; double LotsArray[5]; 以下是int init()中的内容 LotsArray[0] = mode_1; LotsArray[1] = mode_2; LotsArray[2] = mode_3; LotsArray[3] = mode_4; LotsArray[4] = mode_5; LotsArray[5] = mode_6; 在测试专家顾问时,专家顾问日志中显示了以下错误。 2012.09.19 23:14:22 2012.07.19 16:19 mmm2.1.1~ EURUSD.5,M5: ERROR BUYSTOP : 1.22443 SL:1.22377 TP:1.22506 2012.09.19 23:14:22 2012.07.19 16:19 mmm2.1.1~ EURUSD.5,M5: OrderSend error 4051 2012.09.19 23:14:22 2012.07.19 16:19 mmm2.1.1~ EURUSD.5,M5: invalid lots amount for OrderSend function 2012.09.19 23:14:22 2012.07.19 16:19 mmm2.1.1~ EURUSD.5,M5: Bid:1.22432 Ask:1.22438 avgSpread:0.00006 Commission rate:0.00003 Real avg. spread:0.00009 Lots:1.00 HIGH SPEED MAX 2012.09.19 23:14:22 2012.07.19 16:19 mmm2.1.1~ EURUSD.5,M5: 2012.07.19 16:19 tick:514 2012.09.19 23:14:22 2012.07.19 16:19 mmm2.1.1~ EURUSD.5,M5: ERROR BUYSTOP : 1.22442 SL:1.22376 TP:1.22505 2012.09.19 23:14:22 2012.07.19 16:19 mmm2.1.1~ EURUSD.5,M5: OrderSend error 4051 2012.09.19 23:14:22 2012.07.19 16:19 mmm2.1.1~ EURUSD.5,M5: invalid lots amount for OrderSend function 2012.09.19 23:14:22 2012.07.19 16:19 mmm2.1.1~ EURUSD.5,M5: Bid:1.22431 Ask:1.22437 avgSpread:0.00006 Commission rate:0.00003 Real avg. spread:0.00009 Lots:1.00 HIGH SPEED MAX 2012.09.19 23:14:22 2012.07.19 16:19 mmm2.1.1~ EURUSD.5,M5: 2012.07.19 16:19 tick:513 代码有什么问题吗?它可能意味着什么? 这里https://docs.mql4.com/ru/runtime/errors,我看到这是一个错误。 err_invalid_function_paramvalue (4051) 也就是说,错误是由于参数错误造成的。因为我理解错了很多。但我不明白这里有什么问题。 Алексей Тарабанов 2012.09.19 22:00 #3888 hoz: 这里是我的地段(Martin)计算功能。 这些是这个函数的全局变量。 以下是int init()中的内容 在测试专家顾问时,专家顾问日志中显示了以下错误。 代码有什么问题吗?它可能意味着什么? 这里https://docs.mql4.com/ru/runtime/errors,我看到这是一个错误。 err_invalid_function_paramvalue (4051) 也就是说,错误是由于参数错误造成的。因为我理解错了很多。但我不明白这里出了什么问题。 double LotsArray[5]; 5到6正确。 Lowech 2012.09.20 06:42 #3889 你好!是否可以一次性修改一个订单? 我现在是在每个点 都修改一个订单!我认为这是不对的!... max79 2012.09.20 09:25 #3890 专业人士您好,请指教!我应该如何在EA中写,以便当一个赌注被关闭时,EA在同一个柱子上采取一个相反方向的新赌注(像 "翻转")。我正在用 "当一个新酒吧打开时 "的模式进行测试。对于例子中的EA。 //+------------------------------------------------------------------+ //| CrossMa.mq4 | //| Copyright © 2005, George-on-Don | //| http://www.forex.aaanet.ru | //+------------------------------------------------------------------+ #include <stdlib.mqh> #include <stderror.mqh> #define MAGICMA 20050610 extern double Lots = 0.1; extern double MaximumRisk = 0.02; extern double DecreaseFactor = 3; extern double MovingPeriod = 12; extern double MovingShift = 0; extern double MovingPeriod1 = 4; extern double AtrPer = 6; extern bool SndMl = True ; //+------------------------------------------------------------------+ //| Расчет открытия позиции | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; //---- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) { if(OrderType()==OP_BUY) buys++; if(OrderType()==OP_SELL) sells++; } } //---- return orders volume if(buys>0) return(buys); else return(-sells); } //+------------------------------------------------------------------+ //| Расчет оптимальной величины лота | //+------------------------------------------------------------------+ double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); // history orders total int losses=0; // number of losses orders without a break //---- select lot size lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1); //---- calcuulate number of losses orders without a break if(DecreaseFactor>0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; } if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue; //---- if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); } //---- return lot size if(lot<0.1) lot=0.1; return(lot); } //+------------------------------------------------------------------+ //| Проверка для открытия позиции с первым тиком нового бара. | //+------------------------------------------------------------------+ void CheckForOpen() { double mas; double maf; double mas_p; double maf_p; double Atr; int res; string sHeaderLetter; string sBodyLetter; //---- go trading only for first tiks of new bar if(Volume[0]>1) return; //---- get Moving Average mas=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1); // динный мувинг 12 maf=iMA(NULL,0,MovingPeriod1,MovingShift,MODE_SMA,PRICE_CLOSE,1);// короткий мувинг 4 mas_p=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2); // динный мувинг 12 maf_p=iMA(NULL,0,MovingPeriod1,MovingShift,MODE_SMA,PRICE_CLOSE,2);// короткий мувинг 4 Atr = iATR(NULL,0,AtrPer,0); //---- Условие продажи if(maf<mas && maf_p>=mas_p) { res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red); if (SndMl == True && res != -1) { sHeaderLetter = "Operation SELL by" + Symbol()+""; sBodyLetter = "Order Sell by"+ Symbol() + " at " + DoubleToStr(Bid,4)+ ", and set stop/loss at " + DoubleToStr(Ask+Atr,4)+""; sndMessage(sHeaderLetter, sBodyLetter); } return; } //---- Условие покупки if(maf>mas && maf_p<=mas_p) { res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue); if ( SndMl == True && res != -1) { sHeaderLetter = "Operation BUY at" + Symbol()+""; sBodyLetter = "Order Buy at"+ Symbol() + " for " + DoubleToStr(Ask,4)+ ", and set stop/loss at " + DoubleToStr(Bid-Atr,4)+""; sndMessage(sHeaderLetter, sBodyLetter); } return; } //---- } //+------------------------------------------------------------------+ //| ПРоверка для закрытия открытой позиции | //+------------------------------------------------------------------+ void CheckForClose() { double mas; double maf; double mas_p; double maf_p; string sHeaderLetter; string sBodyLetter; bool rtvl; //---- if(Volume[0]>1) return; //---- mas=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1); // динный мувинг 12 maf=iMA(NULL,0,MovingPeriod1,MovingShift,MODE_SMA,PRICE_CLOSE,1);// короткий мувинг 4 mas_p=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2); // динный мувинг 12 maf_p=iMA(NULL,0,MovingPeriod1,MovingShift,MODE_SMA,PRICE_CLOSE,2);// короткий мувинг 4 //---- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue; //---- if(OrderType()==OP_BUY) { if(maf<mas && maf_p>=mas_p) rtvl=OrderClose(OrderTicket(),OrderLots(),Bid,3,Lime); if ( SndMl == True && rtvl != False ) { sHeaderLetter = "Operation CLOSE BUY at" + Symbol()+""; sBodyLetter = "Close order Buy at"+ Symbol() + " for " + DoubleToStr(Bid,4)+ ", and finish this Trade"; sndMessage(sHeaderLetter, sBodyLetter); } break; } if(OrderType()==OP_SELL) { if(maf>mas && maf_p<=mas_p) rtvl=OrderClose(OrderTicket(),OrderLots(),Ask,3,Lime); if ( SndMl == True && rtvl != False ) { sHeaderLetter = "Operation CLOSE SELL at" + Symbol()+""; sBodyLetter = "Close order Sell at"+ Symbol() + " for " + DoubleToStr(Ask,4)+ ", and finish this Trade"; sndMessage(sHeaderLetter, sBodyLetter); } break; } } //---- } //-------------------------------------------------------------------- // функция отправки ссобщения об отрытии или закрытии позиции //-------------------------------------------------------------------- void sndMessage(string HeaderLetter, string BodyLetter) { int RetVal; SendMail( HeaderLetter, BodyLetter ); RetVal = GetLastError(); if (RetVal!= ERR_NO_MQLERROR) Print ("Ошибка, сообщение не отправлено: ", ErrorDescription(RetVal)); } //+------------------------------------------------------------------+ //| Майн функция | //+------------------------------------------------------------------+ void start() { //---- check for history and trading if(Bars<25 || IsTradeAllowed()==false) return; //---- calculate open orders by current symbol if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); else CheckForClose(); //---- } //+------------------------------------------------------------------+ 谢谢你! 1...382383384385386387388389390391392393394395396...631 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
是难以检查,还是懒得检查?提出这个问题比较容易。投标价格可以是零吗?如果什么都不卖的话,它就可以8-(
这不是一个终端是否能在某个时间点重置标价的问题(个人经验值得关注)。
我从来没有见过。你见过温度计上的绝对零度吗?
嗯,这不可能是问题所在。也许你没有人可以倾诉?
同样,也是如此。搞清楚这个脚本,你的脚本就会出来得更好,你甚至可以增加额外的功能。
我不太明白如何编写一个.dll文件
如果我理解正确的话,脚本的基础在这个文件中。
伙计们!在历史上的策略测试器中,专家顾问不向文件提供信息,只有在在线交易时才提供。原因是什么,我怎样才能解决这个问题?我不知道如何治愈它。 谢谢你。
我不太明白如何编写一个.dll文件
如果我理解正确的话,脚本的基础就在这个文件中。
没有1个脚本可以向服务器发送一个订单,同时开出几个订单。你必须一次打开一个。提供给你的DLL只是创建一个可视化的窗口,并与之一起工作。MQL4工具可能足以完成你的任务
这里是我的地段(Martin)计算功能。
这些是这个函数的全局变量。
以下是int init()中的内容
在测试专家顾问时,专家顾问日志中显示了以下错误。
代码有什么问题吗?它可能意味着什么?
这里https://docs.mql4.com/ru/runtime/errors,我看到这是一个错误。
err_invalid_function_paramvalue (4051)
也就是说,错误是由于参数错误造成的。因为我理解错了很多。但我不明白这里有什么问题。
这里是我的地段(Martin)计算功能。
这些是这个函数的全局变量。
以下是int init()中的内容
在测试专家顾问时,专家顾问日志中显示了以下错误。
代码有什么问题吗?它可能意味着什么?
这里https://docs.mql4.com/ru/runtime/errors,我看到这是一个错误。
err_invalid_function_paramvalue (4051)
也就是说,错误是由于参数错误造成的。因为我理解错了很多。但我不明白这里出了什么问题。
double LotsArray[5]; 5到6正确。