任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 386 1...379380381382383384385386387388389390391392393...1178 新评论 TarasBY 2013.12.30 19:18 #3851 alexey1979621: 谢谢,把你的代码拆开了。打开时确实有一个错误(我的眼睛已经湿透了)。我把修改后的EA放到一个演示中,在我们的Meijic上已经有开仓,总的来说是正的利润。然而,该职位并没有关闭。 我看到在新的代码中(在帖子的下面),传递给函数的默认参数已经改变。 int NumberOfPositions(string sy="", int op=-1, int mn=1114) 原始版本有一个不同的Magik。我已经纠正了我的代码中对这个函数的引用。查看哪些Magik订单现在是开放的,并在你的EA中设置这个Magik号码。 P.S. 在命名变量时使用不同的编码并不是一个好的形式的标志...我的意思是。 extern string Сomment = "KVAZ_EURUSD_GBPUSD"; Alekseu Fedotov 2013.12.30 19:19 #3852 Roger: 请看这一行 否则,如果(order_type = OP_SELL() 还有这个。 if (order_type = OP_BUY) Alexey Semenov 2013.12.30 19:27 #3853 TarasBY: 我看到在新的代码中(在帖子的下面),传递给函数的默认参数已经改变。 原始版本有一个不同的Magik。我已经纠正了我的代码中对这个函数的引用。看看哪个Magik的订单现在是开放的,并把这个Magik号码放在你的EA中。 不,Magik是正确的,EURAUDUSD的是1111,EURUSD_GBPUSD的是1114(另一个人帮我纠正)。 两次交易都没有成交。我正在观察EURUSD_GBPUSD的总利润,但我的专家顾问无法关闭它。我已经为EURAUD_AUDUSD - 1111修改了你的版本,用于EURUSD_GBPUSD - 1114,它仍然不能关闭交易。猫头鹰的特点是,你不能在测试器中测试(因为有两对交易)--只能在演示器上测试。 Alexander 2013.12.30 19:40 #3854 alexey1979621: 不,法师是正确的,EURAUD_AUDUSD的是1111,EURUSD_GBPUSD的是1114(另一个人帮我纠正)。 两次交易都没有成交。我正在观察EURUSD_GBPUSD的总利润,但我的专家顾问无法关闭它。我已经为EURAUD_AUDUSD - 1111修改了你的版本,为EURUSD_GBPUSD - 1114修改了你的版本,它仍然不能关闭交易。猫头鹰的特点是,你不能在测试器中测试(因为有两对交易)--只能在演示器上测试。 让我们做一些改变。而不是 if(prof>=Profit) { for(int i=OrdersTotal()-1;i>=0;i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { double AS=MarketInfo(OrderSymbol(), MODE_ASK); double BI=MarketInfo(OrderSymbol(), MODE_BID); if(OrderType()==OP_BUY) price=BI; else price=AS; OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE); } } } 把 Comment("Profit = ",prof); if(prof>=Profit) { Print("Profit is good!"); for(int i=OrdersTotal()-1;i>=0;i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { double AS=MarketInfo(OrderSymbol(), MODE_ASK); double BI=MarketInfo(OrderSymbol(), MODE_BID); if(OrderType()==OP_BUY) price=BI; else price=AS; Print("OrderTicket - ",OrderTicket()," price - ",price); if(!OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE))Print ("Error - ",GetLastError()); } } } 运行EA,将利润设置为零,看看出来的结果和日志中的内容。 [删除] 2013.12.30 19:50 #3855 Roger: 请看这一行 否则,如果(order_type = OP_SELL() 谢谢!) TarasBY 2013.12.30 19:53 #3856 alexey1979621: 不,根据majik,一切都正确,EURAUD_AUDUSD的是1111,EURUSD_GBPUSD的是1114(另一个人帮助解决了这个问题)。 两次交易都没有成交。我正在观察EURUSD_GBPUSD的总利润,但我的专家顾问无法关闭它。我已经为EURAUD_AUDUSD - 1111修改了你的版本,用于EURUSD_GBPUSD - 1114,它仍然不能关闭交易。猫头鹰的特点是,我不能在测试器中测试(因为有两对交易)--只能在演示中测试。 首先,你没有正确解决指标问题。这个指标有很多外部参数。 extern string Symbol1.Name = "EURUSD";// Название инструмента 1 extern bool Symbol1.Reverse = false; // Является ли инструмент 1 реверсивным (с обратной корреляцией) // по отношению к остальным инструментам extern string Symbol2.Name = "USDCHF";// Название инструмента 2 extern bool Symbol2.Reverse = false; // Является ли инструмент 2 реверсивным (с обратной корреляцией) // по отношению к остальным инструментам extern string ___MISC___ = " == Прочие настройки =========="; extern bool UseVolatility = True ; //отрисовка с учетом волатильности extern bool Triangle = True ; // Рисовать треугольник? extern color Triangle.Color = DarkSalmon; // Цвет треугольника extern double Alert.ChannelMore = EMPTY; // Если ширина канала больше указанной, включается сигнал // -1 - контроль выключен. extern double Alert.ChannelLess = EMPTY; // Если ширина канала меньше указанной, включается сигнал // -1 - контроль выключен. extern string __VOL___ = " == Расчет объемов ===="; extern int VOL.Mode = 3; // Режим расчета объемов для торговли // 1 - по ценам открытия // 2 - по волатильности, а если невозможно - по ценам открытия // 3 - по волатильности (если возможно) и ценам открытия extern int VOL.PeriodATR = 144; // Период усреднения ATR extern string ___MA___ = " == Параметры МА ценовых линий ===="; extern int MA.Slow = 21; // Период медленной МА extern int MA.Fast = 8; // Период быстрой МА extern int MA.Method = 2; // Метод аппроксимации // - MODE_SMA=0 Простое скользящее среднее // - MODE_EMA=1 Экспоненциальное скользящее среднее // - MODE_SMMA=2 Сглаженное скользящее среднее // - MODE_LWMA=3 Линейно-взвешенное скользящее среднее extern int MA.Price = 6; // Расчетная цена: // - PRICE_CLOSE=0 Цена закрытия // - PRICE_OPEN=1 Цена открытия // - PRICE_HIGH=2 Максимальная цена // - PRICE_LOW=3 Минимальная цена // - PRICE_MEDIAN=4 Средняя цена, (high+low)/2 // - PRICE_TYPICAL=5 Типичная цена, (high+low+close)/3 // - PRICE_WEIGHTED=6 Взвешенная цена закрытия, (high+low+close+close)/4 并且在你调用指标时需要列出它们。如果你省略它们,参数将被默认,由于你想将其用于不同的货币对,这个选项并不适合。而其他一切都可以在考虑到EA开始时的参数变化的情况下进行。 extern string Symbol_1 = "EURAUD"; extern string Symbol_2 = "AUDUSD"; extern double Lot_1=0.01; extern double Lot_2=0.01; extern double Profit=10; extern string EXP_Comment = "KVAZ_"; extern int Magic = 1111; string gsa_SMB[2]; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { gsa_SMB[0] = Symbol_1; gsa_SMB[1] = Symbol_2; EXP_Comment = StringConcatenate (EXP_Comment, Symbol_1, "_", Symbol_2); return (0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int li_N; double prof = 0., ld_Price = 0.; for (int i = OrdersTotal() - 1; i >= 0; i--) { OrderSelect (i, SELECT_BY_POS); li_N = fGet_NumSymbol (OrderSymbol(), gsa_SMB); if (li_N < 0) continue; if (OrderMagicNumber() != Magic) continue; prof += OrderProfit(); Print ("Profit=", prof); } if (prof >= Profit) { for (i = OrdersTotal() - 1; i >= 0; i--) { OrderSelect (i, SELECT_BY_POS); li_N = fGet_NumSymbol (OrderSymbol(), gsa_SMB); if (li_N < 0) continue; if (OrderMagicNumber() != Magic) continue; if (OrderType() == OP_BUY) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_BID); else if (OrderType() == OP_SELL) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_ASK); OrderClose (OrderTicket(), OrderLots(), ld_Price, 5); } } double lda_Price[2], Line_1 = iCustom (Symbol(), 0, "Ind_2 Line+1", 0, 1), // Первый инструмент Line_2 = iCustom (Symbol(), 0, "Ind_2 Line+1", 1, 1); // Второй инструмент if (NumberOfPositions (gsa_SMB[0], -1, Magic) == 0) { lda_Price[0] = MarketInfo (gsa_SMB[0], MODE_BID); lda_Price[1] = MarketInfo (gsa_SMB[0], MODE_ASK); if (Line_1 > 0.1) if (Line_2 < -0.1) {OrderSend (gsa_SMB[0], OP_SELL, Lot_1, lda_Price[0], 3, 0, 0, EXP_Comment, Magic, 0, Red);} if (Line_1 < -0.1) if (Line_2 > 0.1) {OrderSend (gsa_SMB[0], OP_BUY, Lot_1, lda_Price[1], 3, 0, 0, EXP_Comment, Magic, 0, Blue);} } if (NumberOfPositions (gsa_SMB[1], -1, Magic) == 0) { lda_Price[0] = MarketInfo (gsa_SMB[1], MODE_BID); lda_Price[1] = MarketInfo (gsa_SMB[1], MODE_ASK); if (Line_1 < -0.1) if (Line_2 > 0.1) {OrderSend (gsa_SMB[1], OP_BUY, Lot_2, lda_Price[1], 3, 0, 0, EXP_Comment, Magic, 0, Blue);} if (Line_1 > 0.1) if (Line_2 < -0.1) {OrderSend (gsa_SMB[1], OP_SELL, Lot_2, lda_Price[0], 3, 0, 0, EXP_Comment, Magic, 0, Red);} } return (0); } //+------------------------------------------------------------------+ int fGet_NumSymbol (string fs_Symbol, string ar_SMB[]) { for (int li_IND = 0; li_IND < 2; li_IND++) {if (fs_Symbol == ar_SMB[li_IND]) return (li_IND);} return (-1); } //+------------------------------------------------------------------+ int NumberOfPositions(string sy="", int op=-1, int mn=1111) { int i, k=OrdersTotal(), kp=0; if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) kp++; } } } } } return(kp); } //+------------------------------------------------------------------+ 在此 阅读有关指标调用的信息。 Alexey Semenov 2013.12.30 19:53 #3857 Roger: 让我们做一些改变。而不是 把 运行EA,将利润设置为零,看看出来的结果和日志中的内容。 其结果是丑陋的。随着你的改变和利润等于0,专家顾问已经关闭了Meijic 1111, 1112, 1113, 1114, 1115的所有头寸。然后,5秒后,这些Meijic符号的新订单被打开,10秒后,它们都被关闭,同样的事情再次发生。仓位不是成对开的,而是混乱的。 Alexander 2013.12.30 20:02 #3858 alexey1979621: 这已经变成了一个可怕的问题。随着你的改变和利润等于0,EA完全关闭了Majic 1111, 1112, 1113, 1114, 1115的所有头寸。然后,5秒后,这些Meijic符号的新订单被打开,10秒后,它们都被关闭,同样的事情再次发生。仓位不是成对开的,而是混乱的。 我的指导性问题是:你在这个账户里有多少个EA? 你有一个条件--在盈利时关闭所有订单。 PS 你已经看到了你这个EA的隐患--它在关闭后会一直开单,最终会导致亏损。所以你必须放一个标志,禁止下新的订单,直到条件过去并再次出现。 Alexey Semenov 2013.12.30 20:07 #3859 TarasBY: 首先,你没有正确解决指标的问题。这个指标有很多外部参数。 并且在你调用指标时需要列出它们。如果你省略它们,参数将被默认,由于你想将其用于不同的货币对,这个选项并不适合。其他一切都可以考虑在EA开始时的参数变化来完成。 你可以在这里 阅读关于调用指标的信息。 谢谢你。我知道指标电话的事。但是,当我们在测试或操作中应用指标的可调参数时,应该列出这些参数。 由于这个EA不能在测试器中测试(因为有两个交易对),所以不可能在历史上找到这些参数。你的最后一个变体已经在演示中实现了。 我将看看交易将如何关闭。另一个小问题,对于两个工具的交易,要么在买入,要么在卖出。 如果我们需要一个工具在卖出,另一个在买入,我们应该怎么做?我已经探查过了,没有找到.....。再次,非常感谢你的辛勤工作。 Alexey Semenov 2013.12.30 20:18 #3860 Roger: 一个指导性的问题--你在这个账户里有多少个EA?而且你确实有一个条件--在盈利时关闭所有订单。PS 你已经看到了你这个EA的隐患--它在关闭后会一直开单,最终会导致亏损。所以你必须放一个标志,禁止下新的订单,直到条件过去并再次出现。 专家顾问为5人工作(双胞胎兄弟--针对不同的交易),当然是用不同的Meijic。 是的,我们有关闭订单的盈利条件,但这些订单与某个EA有关,例如,与MAJIC 1114有关。我从一开始就写了这个问题,并认为猫头鹰在关闭时没有看到自己的订单;事实证明,它看到了所有的订单,并非常希望关闭它们,但我们不需要所有的订单,而是需要一些特定的订单。 如果我们采取H4时期,当指标线 高于0.1和低于-0.1时,条件得到满足,交易被打开,也就是说,有可能在一个信号下获得几个利润(尽管有一个选项是在指标线收敛时关闭交易)。 1...379380381382383384385386387388389390391392393...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
谢谢,把你的代码拆开了。打开时确实有一个错误(我的眼睛已经湿透了)。我把修改后的EA放到一个演示中,在我们的Meijic上已经有开仓,总的来说是正的利润。然而,该职位并没有关闭。
我看到在新的代码中(在帖子的下面),传递给函数的默认参数已经改变。
原始版本有一个不同的Magik。我已经纠正了我的代码中对这个函数的引用。查看哪些Magik订单现在是开放的,并在你的EA中设置这个Magik号码。
P.S. 在命名变量时使用不同的编码并不是一个好的形式的标志...我的意思是。
请看这一行
否则,如果(order_type = OP_SELL()
还有这个。
我看到在新的代码中(在帖子的下面),传递给函数的默认参数已经改变。
原始版本有一个不同的Magik。我已经纠正了我的代码中对这个函数的引用。看看哪个Magik的订单现在是开放的,并把这个Magik号码放在你的EA中。
不,Magik是正确的,EURAUDUSD的是1111,EURUSD_GBPUSD的是1114(另一个人帮我纠正)。 两次交易都没有成交。我正在观察EURUSD_GBPUSD的总利润,但我的专家顾问无法关闭它。我已经为EURAUD_AUDUSD - 1111修改了你的版本,用于EURUSD_GBPUSD - 1114,它仍然不能关闭交易。猫头鹰的特点是,你不能在测试器中测试(因为有两对交易)--只能在演示器上测试。
不,法师是正确的,EURAUD_AUDUSD的是1111,EURUSD_GBPUSD的是1114(另一个人帮我纠正)。 两次交易都没有成交。我正在观察EURUSD_GBPUSD的总利润,但我的专家顾问无法关闭它。我已经为EURAUD_AUDUSD - 1111修改了你的版本,为EURUSD_GBPUSD - 1114修改了你的版本,它仍然不能关闭交易。猫头鹰的特点是,你不能在测试器中测试(因为有两对交易)--只能在演示器上测试。
让我们做一些改变。而不是
把
运行EA,将利润设置为零,看看出来的结果和日志中的内容。请看这一行
否则,如果(order_type = OP_SELL()
谢谢!)
不,根据majik,一切都正确,EURAUD_AUDUSD的是1111,EURUSD_GBPUSD的是1114(另一个人帮助解决了这个问题)。 两次交易都没有成交。我正在观察EURUSD_GBPUSD的总利润,但我的专家顾问无法关闭它。我已经为EURAUD_AUDUSD - 1111修改了你的版本,用于EURUSD_GBPUSD - 1114,它仍然不能关闭交易。猫头鹰的特点是,我不能在测试器中测试(因为有两对交易)--只能在演示中测试。
首先,你没有正确解决指标问题。这个指标有很多外部参数。
并且在你调用指标时需要列出它们。如果你省略它们,参数将被默认,由于你想将其用于不同的货币对,这个选项并不适合。而其他一切都可以在考虑到EA开始时的参数变化的情况下进行。
在此 阅读有关指标调用的信息。
让我们做一些改变。而不是
把
运行EA,将利润设置为零,看看出来的结果和日志中的内容。其结果是丑陋的。随着你的改变和利润等于0,专家顾问已经关闭了Meijic 1111, 1112, 1113, 1114, 1115的所有头寸。然后,5秒后,这些Meijic符号的新订单被打开,10秒后,它们都被关闭,同样的事情再次发生。仓位不是成对开的,而是混乱的。
这已经变成了一个可怕的问题。随着你的改变和利润等于0,EA完全关闭了Majic 1111, 1112, 1113, 1114, 1115的所有头寸。然后,5秒后,这些Meijic符号的新订单被打开,10秒后,它们都被关闭,同样的事情再次发生。仓位不是成对开的,而是混乱的。
我的指导性问题是:你在这个账户里有多少个EA?
你有一个条件--在盈利时关闭所有订单。
PS 你已经看到了你这个EA的隐患--它在关闭后会一直开单,最终会导致亏损。所以你必须放一个标志,禁止下新的订单,直到条件过去并再次出现。
首先,你没有正确解决指标的问题。这个指标有很多外部参数。
并且在你调用指标时需要列出它们。如果你省略它们,参数将被默认,由于你想将其用于不同的货币对,这个选项并不适合。其他一切都可以考虑在EA开始时的参数变化来完成。
你可以在这里 阅读关于调用指标的信息。
一个指导性的问题--你在这个账户里有多少个EA?
而且你确实有一个条件--在盈利时关闭所有订单。
PS 你已经看到了你这个EA的隐患--它在关闭后会一直开单,最终会导致亏损。所以你必须放一个标志,禁止下新的订单,直到条件过去并再次出现。
专家顾问为5人工作(双胞胎兄弟--针对不同的交易),当然是用不同的Meijic。
是的,我们有关闭订单的盈利条件,但这些订单与某个EA有关,例如,与MAJIC 1114有关。我从一开始就写了这个问题,并认为猫头鹰在关闭时没有看到自己的订单;事实证明,它看到了所有的订单,并非常希望关闭它们,但我们不需要所有的订单,而是需要一些特定的订单。
如果我们采取H4时期,当指标线 高于0.1和低于-0.1时,条件得到满足,交易被打开,也就是说,有可能在一个信号下获得几个利润(尽管有一个选项是在指标线收敛时关闭交易)。