[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 511 1...504505506507508509510511512513514515516517518...631 新评论 TarasBY 2012.11.15 17:49 #5101 hoz: 是的,我错了。一般来说。如果这里很清楚,挂单只按价格设置。下面是代码。这个问题本质上并不复杂。我向Trade(int signal, double& priceForBuy, double& priceForSell) 函数传递正式参数priceForBuy 和priceForSell 。参数是由链接传递的。不是这样做的吗?这些功能是局部的,不是全局的。编译过程中发生了一个错误。错误是从哪里来的?我已经在GetPriceToInput() 函数中定义了这些参数。 没有找到priceForBuy和priceForSell的变量--编译器说。你需要弄清楚如何通过引用来传递变量的值。 Роман 2012.11.15 17:49 #5102 hoz: 不然怎么会这样呢?你必须把同一件事反复计算100次吗?让信号成为专家的一部分,就像教科书上说的那样,你会很高兴的! 我在前面的主题中给了你所有的链接... TarasBY 2012.11.15 17:50 #5103 hoz: 不然怎么会这样呢?你必须把同样的事情计算100次吗? 想法是对的,实施是错的!:))) Viktar Dzemikhau 2012.11.15 17:57 #5104 嗯,这里没有具体的例子。https://docs.mql4.com/ru/basis/variables/formal它写在像我这样的函数参数的顶部,即&在数据类型的 后面。 TarasBY 2012.11.15 18:09 #5105 hoz:嗯,这里没有具体的例子。https://docs.mql4.com/ru/basis/variables/formal它写在像我这样的函数参数的顶部,即&在数据类型之后。 也许它能以这种方式进行编译。//+-------------------------------------------------------------------------------------+ //| Получение цены входа в покупку или в продажу | //+-------------------------------------------------------------------------------------+ bool GetPriceToInput (int signal) { firstBarClosed = iClose(Symbol(),1440,2); secondBarClosed = iClose(Symbol(),1440,1); double deltaForSell = (firstBarClosed - secondBarClosed)/2; double priceForSell = secondBarClosed - deltaForSell; double deltaForBuy = (secondBarClosed - firstBarClosed)/2; double priceForBuy = secondBarClosed + deltaForBuy; return (Trade (signal, priceForBuy, priceForSell)); } //+-------------------------------------------------------------------------------------+ //| Функция Start | //+-------------------------------------------------------------------------------------+ int start() { int signal = GetSignal(); if (signal != SIGNAL_NO) if(!GetPriceToInput (signal)) return(0); return(0); } 尽管代码结构有点 "左撇子"... Viktar Dzemikhau 2012.11.15 18:16 #5106 TarasBY:也许它能以这种方式进行编译。尽管代码结构有点 "左撇子"... 嗯......是我写的。唱出第一声瓢。:) Viktar Dzemikhau 2012.11.15 18:29 #5107 我重写了一点专家的意见。这就是出来的东西。//+------------------------------------------------------------------+ //| 2 Days.mq4 | //| hoz | //| | //+------------------------------------------------------------------+ #property copyright "hoz" #property link "" extern string A1 = "Объем сделки. Если i_lots = 0, то считается в процентах"; extern double i_lots = 0.1; extern string A2 = "Управление рисками"; extern double i_sl = 15, i_tp = 10; extern int slippage, price_b, price_a; extern string Z1 = "=== Прочие настройки ==="; extern string i_openOrderSound = "ok.wav"; extern int i_magicNumber = 400021; double firstBarClosed, secondBarClosed; // Идентификаторы типов сигналов #define SIGNAL_BUY 1 // Сигнал на покупку #define SIGNAL_SELL -1 // Сигнал на продажу #define SIGNAL_NO 0 // Нет сигнала #include <stderror.mqh> //+-------------------------------------------------------------------------------------+ //| Функция деиницилизации эксперта | //+-------------------------------------------------------------------------------------+ int init() { return(0); } //+-------------------------------------------------------------------------------------+ //| Функция деиницилизации эксперта | //+-------------------------------------------------------------------------------------+ int deinit() { return(0); } //+-------------------------------------------------------------------------------------+ //| Открытие позиций | //+-------------------------------------------------------------------------------------+ bool Trade(int signal, double& priceForBuy, double& priceForSell) { // FindOrders(); priceForBuy = NormalizeDouble(priceForBuy,Digits); priceForSell = NormalizeDouble(priceForSell,Digits); if (signal == SIGNAL_BUY) if (!OrderSend(Symbol(),OP_BUYLIMIT, i_lots,priceForBuy,slippage,i_sl,i_tp,"",i_magicNumber,3)) return(false); if (signal == SIGNAL_SELL) if (!OrderSend(Symbol(),OP_SELLLIMIT,i_lots,priceForSell,slippage,i_sl,i_tp,"",i_magicNumber,3)) return(false); return(true); } //+-------------------------------------------------------------------------------------+ //| Получение цены входа в покупку или в продажу | //+-------------------------------------------------------------------------------------+ double GetPriceToInput(int signal) { firstBarClosed = iClose(Symbol(),1440,2); secondBarClosed = iClose(Symbol(),1440,1); double deltaForSell = (firstBarClosed - secondBarClosed)/2; double priceForSell = secondBarClosed - deltaForSell; // return(priceForSell); double deltaForBuy = (secondBarClosed - firstBarClosed)/2; double priceForBuy = secondBarClosed + deltaForBuy; return(Trade(signal, priceForBuy, priceForSell)); } //+-------------------------------------------------------------------------------------+ //| Генерация сигнала закрытия, покупки или продажи | //+-------------------------------------------------------------------------------------+ int GetSignal() { if(firstBarClosed > secondBarClosed) return(SIGNAL_BUY); if(firstBarClosed < secondBarClosed) return(SIGNAL_NO); } //+-------------------------------------------------------------------------------------+ //| Функция Start | //+-------------------------------------------------------------------------------------+ int start() { int signal = GetSignal(); if (signal != SIGNAL_NO) if(!Trade(signal, priceForBuy, priceForSell)) return(0); return(0); } 顺便说一下,这个错误。'priceForBuy' - variable not defined E:\Insall'd soft's\Forex\Admiral Markets\experts\2 Days.mq4 (103, 25) 'priceForSell' - variable not defined E:\Insall'd soft's\Forex\Admiral Markets\experts\2 Days.mq4 (103, 38) 恰好发生在启动 函数中,这些变量没有被定义,而不是在其他地方。所以需要添加一些东西来启动? Yury Reshetov 2012.11.15 18:31 #5108 hoz:顺便说一下,这个错误。恰好发生在启动 函数中,这些变量没有被定义,而不是在其他地方。所以需要添加一些东西来启动? 它们必须在start()中定义,并通过引用传递给被调函数。 Viktar Dzemikhau 2012.11.15 18:43 #5109 Reshetov: 它们必须在start()中定义,并通过引用传递给我们调用的函数。 这是最简单的方法。但我在看一个程序员写的文章,start()函数中根本没有定义。这里有他的顾问的链接。http://www.forextrade.ru/media/Image/MQLabs/181_ag/ChannelByMACross_Expert.mq4特别是,我对他如何智能地写代码非常感兴趣。所以,我想学习如何把所有的东西都写在独立的函数中,只添加精华部分开始,而不在那里声明变量。如果我们将一个变量通过引用传递到一个函数中,我们是在用原始变量的缓冲区工作,而不是用其单独的双倍数。这意味着我们之前在哪个函数中声明它并不重要。不是吗? Yury Reshetov 2012.11.15 18:56 #5110 hoz: 这是最简单的变体。但我在观察一个程序员写的文章,他的启动 函数中根本没有声明什么。你可以在函数之外声明一个静态变量,然后你就完全不必通过引用来传递任何东西。hoz: 如果我们将一个变量通过引用传递到一个函数中,我们是在用我们传递的初始变量本身的缓冲区工作,而不是其单独的副本。这意味着我们之前在哪个函数中声明它并不重要。不是吗? 你的想法不正确。如果你把一个变量作为参数传递给一个函数,你不需要向函数主体声明它--它已经在参数中声明了。你必须声明它所传递的函数。 1...504505506507508509510511512513514515516517518...631 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
是的,我错了。一般来说。如果这里很清楚,挂单只按价格设置。
下面是代码。
这个问题本质上并不复杂。我向Trade(int signal, double& priceForBuy, double& priceForSell) 函数传递正式参数priceForBuy 和priceForSell 。参数是由链接传递的。不是这样做的吗?这些功能是局部的,不是全局的。
编译过程中发生了一个错误。
错误是从哪里来的?我已经在GetPriceToInput() 函数中定义了这些参数。
不然怎么会这样呢?你必须把同一件事反复计算100次吗?
让信号成为专家的一部分,就像教科书上说的那样,你会很高兴的!
我在前面的主题中给了你所有的链接...
不然怎么会这样呢?你必须把同样的事情计算100次吗?
嗯,这里没有具体的例子。
https://docs.mql4.com/ru/basis/variables/formal
它写在像我这样的函数参数的顶部,即&在数据类型的 后面。
嗯,这里没有具体的例子。
https://docs.mql4.com/ru/basis/variables/formal
它写在像我这样的函数参数的顶部,即&在数据类型之后。
也许它能以这种方式进行编译。
尽管代码结构有点 "左撇子"...
也许它能以这种方式进行编译。
尽管代码结构有点 "左撇子"...
嗯......是我写的。唱出第一声瓢。:)
我重写了一点专家的意见。这就是出来的东西。
顺便说一下,这个错误。
恰好发生在启动 函数中,这些变量没有被定义,而不是在其他地方。所以需要添加一些东西来启动?
顺便说一下,这个错误。
恰好发生在启动 函数中,这些变量没有被定义,而不是在其他地方。所以需要添加一些东西来启动?
它们必须在start()中定义,并通过引用传递给我们调用的函数。
这是最简单的方法。但我在看一个程序员写的文章,start()函数中根本没有定义。
这里有他的顾问的链接。
http://www.forextrade.ru/media/Image/MQLabs/181_ag/ChannelByMACross_Expert.mq4
特别是,我对他如何智能地写代码非常感兴趣。所以,我想学习如何把所有的东西都写在独立的函数中,只添加精华部分开始,而不在那里声明变量。
如果我们将一个变量通过引用传递到一个函数中,我们是在用原始变量的缓冲区工作,而不是用其单独的双倍数。这意味着我们之前在哪个函数中声明它并不重要。不是吗?
这是最简单的变体。但我在观察一个程序员写的文章,他的启动 函数中根本没有声明什么。
你可以在函数之外声明一个静态变量,然后你就完全不必通过引用来传递任何东西。
如果我们将一个变量通过引用传递到一个函数中,我们是在用我们传递的初始变量本身的缓冲区工作,而不是其单独的副本。这意味着我们之前在哪个函数中声明它并不重要。不是吗?