新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1870 1...186318641865186618671868186918701871187218731874187518761877...1953 新评论 Maksim Emeliashin 2022.01.20 10:42 #18691 我已经挣扎了几个小时,试图从数据库中读取数据,但做不到。 下面是测试的代码。 简而言之。一个数据库被创建,有一个表(如果数据库存在,表被删除并重新创建)。一个单一的行被添加到表中。 然后,数据库被关闭并再次打开。对这一记录进行了简单的选择,但命令返回错误,即查询结果为空。 通过IDE检查--所有东西都被同一个查询所选择。搞不清楚这到底是一个错误还是一个修复? int OnInit() { //--- int db_handle = DatabaseOpen("test3", DATABASE_OPEN_COMMON | DATABASE_OPEN_CREATE | DATABASE_OPEN_READWRITE); if (db_handle != INVALID_HANDLE) { // Структура таблицы if (DatabaseTableExists(db_handle, "ea_dsc")) if(!DatabaseExecute(db_handle, "DROP TABLE IF EXISTS ea_dsc")) Print("Failed to drop table with code ", GetLastError()); string t_create = "CREATE TABLE ea_dsc (dsc_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " " ea_symb TEXT NOT NULL, dt_from TEXT NOT NULL, dt_to TEXT, magic_buy INTEGER NOT NULL, " " magic_sell INTEGER NOT NULL, version TEXT NOT NULL, ea_method TEXT NOT NULL)"; if(!DatabaseExecute(db_handle, t_create)) Print("Failed to create table with code ", GetLastError()); string t_add = "INSERT INTO ea_dsc (ea_symb, dt_from, dt_to, magic_buy, magic_sell, version, ea_method)" "VALUES ('EURUSD', 'dt_from', NULL, '123', '456', 'version', 'ea_method')"; if(!DatabaseExecute(db_handle, t_add)) Print("Failed to add table data with code ", GetLastError()); DatabaseClose(db_handle); } db_handle = DatabaseOpen("test3", DATABASE_OPEN_COMMON | DATABASE_OPEN_READWRITE); if (db_handle != INVALID_HANDLE) { // Запрос string s_quer = "SELECT dsc_id, ea_symb, dt_from, dt_to, magic_buy," "magic_sell, version, ea_method FROM ea_dsc WHERE ea_symb = ?1"; int c_request = DatabasePrepare(db_handle, s_quer); if (c_request != INVALID_HANDLE) { if (DatabaseBind(c_request, 0, "EURUSD")) if (DatabaseRead(c_request)) { Print("Found!"); } else PrintFormat("Error=%d", GetLastError()); DatabaseFinalize(c_request); } DatabaseClose(db_handle); } //--- return(INIT_SUCCEEDED); } 工作的结果。 PrintFormat("Error=%d", GetLastError()); 另外,附上完整的代码 附加的文件: testDB_NW.mq5 8 kb x572intraday 2022.01.20 17:08 #18692 为什么我们不能通过输入 参数进行循环?你为什么要这样惩罚我们? Alexey Viktorov 2022.01.20 17:31 #18693 x572intraday #: 为什么你不能在一个循环中浏览输入参数?你为什么要这样惩罚我们? 这样做的意义何在?分享秘密... Vladimir Makhnin 2022.01.20 18:05 #18694 我如何从市场上安装EA?我有几个终端。,我在市场上按下下载,默认打开的是错误的终端。我删除了它。现在按下 "下载 "按钮后没有任何反应 Mihail Matkovskij 2022.01.20 21:00 #18695 Vladimir Makhnin #: 我如何从市场上安装EA?我有几个终端。 ,我在市场上按了下载键,默认打开了错误的终端。我删除了它。现在,在我按下 "下载 "按钮后,什么也没有发生。 你用什么浏览器下载? x572intraday 2022.01.21 00:09 #18696 Alexey Viktorov #:这样做的意义何在?分享秘密...这是在下一个主题,你不必走远。enum LIST { L01=111, // ITEM 1 L02=222, // ITEM 2 L03=333, // ITEM 3 L04=444, // ITEM 4 L05=555, // ITEM 5 L06=666, // ITEM 6 L07=777, // ITEM 7 L08=888, // ITEM 8 }; input LIST LISTING_01=L01; input LIST LISTING_02=L02; input LIST LISTING_03=L03; input LIST LISTING_04=L04; input LIST LISTING_05=L05; input LIST LISTING_06=L06; input LIST LISTING_07=L07; input LIST LISTING_08=L08; LArray[0]=LISTING_01; LArray[1]=LISTING_02; LArray[2]=LISTING_03; LArray[3]=LISTING_04; LArray[4]=LISTING_05; LArray[5]=LISTING_06; LArray[6]=LISTING_07; LArray[7]=LISTING_08;用手把所有的东西塞进一个Array数组,而不是用一个循环,这是一种狗的乐趣。而这只是一个例子。在现实中,可能会有很多的枚举。 我甚至不会说没有枚举和ENUM_TIMEFRAMES枚举的问题。这很令人厌烦。 Mihail Matkovskij 2022.01.21 00:22 #18697 x572intraday #: 我甚至不会提到缺乏枚举和ENUM_TIMEFRAMES枚举的问题。 曾几何时,我为了兴趣,试图做一个类似的超限动作。 关于交易、自动交易系统和交易策略测试的论坛 通过服务台与开发人员进行沟通! Mihail Matkovskij, 2019.10.05 22:07 如果你需要通过任何数量的常数进行偏移或右/左移,将非常有用。这是我得到的东西。 #property script_show_inputs //--- input parameters input uint shift = 1; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool incE_TF(ENUM_TIMEFRAMES &__tf, int _n = 1) { int i = __tf, n = _n; if(_n > 0) { while(i < PERIOD_W1) { i++; if(StringFind(EnumToString((ENUM_TIMEFRAMES)i), "PERIOD_", 0) == 0){ n--; if(n == 0) { __tf = (ENUM_TIMEFRAMES)i; return true; } } } } else if(_n < 0) { while(i > PERIOD_CURRENT) { i--; if(StringFind(EnumToString((ENUM_TIMEFRAMES)i), "PERIOD_", 0) == 0){ n++; if(n == 0) { __tf = (ENUM_TIMEFRAMES)i; return true; } } } } return false; } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { ENUM_TIMEFRAMES i; i = PERIOD_CURRENT; Print("Go"); Print(EnumToString(i), " = ", i); while(i < PERIOD_W1) { if(!incE_TF(i, shift)) break; Print(EnumToString(i), " = ", i); } i = PERIOD_W1; Print("Back"); Print(EnumToString(i), " = ", i); while(i > PERIOD_CURRENT) { if(!incE_TF(i, -shift)) break; Print(EnumToString(i), " = ", i); } } 抵消了1。 2019.10.05 23:04:12.198 EnumTimeframeIteration (EURUSD,M12) Go 2019.10.05 23:04:12.198 EnumTimeframeIteration (EURUSD,M12) PERIOD_CURRENT = 0 2019.10.05 23:04:12.198 EnumTimeframeIteration (EURUSD,M12) PERIOD_M1 = 1 2019.10.05 23:04:12.198 EnumTimeframeIteration (EURUSD,M12) PERIOD_M2 = 2 2019.10.05 23:04:12.198 EnumTimeframeIteration (EURUSD,M12) PERIOD_M3 = 3 2019.10.05 23:04:12.198 EnumTimeframeIteration (EURUSD,M12) PERIOD_M4 = 4 2019.10.05 23:04:12.198 EnumTimeframeIteration (EURUSD,M12) PERIOD_M5 = 5 2019.10.05 23:04:12.198 EnumTimeframeIteration (EURUSD,M12) PERIOD_M6 = 6 2019.10.05 23:04:12.198 EnumTimeframeIteration (EURUSD,M12) PERIOD_M10 = 10 2019.10.05 23:04:12.198 EnumTimeframeIteration (EURUSD,M12) PERIOD_M12 = 12 2019.10.05 23:04:12.198 EnumTimeframeIteration (EURUSD,M12) PERIOD_M15 = 15 2019.10.05 23:04:12.198 EnumTimeframeIteration (EURUSD,M12) PERIOD_M20 = 20 2019.10.05 23:04:12.198 EnumTimeframeIteration (EURUSD,M12) PERIOD_M30 = 30 2019.10.05 23:04:12.204 EnumTimeframeIteration (EURUSD,M12) PERIOD_H1 = 16385 2019.10.05 23:04:12.204 EnumTimeframeIteration (EURUSD,M12) PERIOD_H2 = 16386 2019.10.05 23:04:12.204 EnumTimeframeIteration (EURUSD,M12) PERIOD_H3 = 16387 2019.10.05 23:04:12.204 EnumTimeframeIteration (EURUSD,M12) PERIOD_H4 = 16388 2019.10.05 23:04:12.204 EnumTimeframeIteration (EURUSD,M12) PERIOD_H6 = 16390 2019.10.05 23:04:12.204 EnumTimeframeIteration (EURUSD,M12) PERIOD_H8 = 16392 2019.10.05 23:04:12.204 EnumTimeframeIteration (EURUSD,M12) PERIOD_H12 = 16396 2019.10.05 23:04:12.204 EnumTimeframeIteration (EURUSD,M12) PERIOD_D1 = 16408 2019.10.05 23:04:12.210 EnumTimeframeIteration (EURUSD,M12) PERIOD_W1 = 32769 2019.10.05 23:04:12.210 EnumTimeframeIteration (EURUSD,M12) Back 2019.10.05 23:04:12.210 EnumTimeframeIteration (EURUSD,M12) PERIOD_W1 = 32769 2019.10.05 23:04:12.217 EnumTimeframeIteration (EURUSD,M12) PERIOD_D1 = 16408 2019.10.05 23:04:12.217 EnumTimeframeIteration (EURUSD,M12) PERIOD_H12 = 16396 2019.10.05 23:04:12.217 EnumTimeframeIteration (EURUSD,M12) PERIOD_H8 = 16392 2019.10.05 23:04:12.217 EnumTimeframeIteration (EURUSD,M12) PERIOD_H6 = 16390 2019.10.05 23:04:12.217 EnumTimeframeIteration (EURUSD,M12) PERIOD_H4 = 16388 2019.10.05 23:04:12.217 EnumTimeframeIteration (EURUSD,M12) PERIOD_H3 = 16387 2019.10.05 23:04:12.217 EnumTimeframeIteration (EURUSD,M12) PERIOD_H2 = 16386 2019.10.05 23:04:12.217 EnumTimeframeIteration (EURUSD,M12) PERIOD_H1 = 16385 2019.10.05 23:04:12.223 EnumTimeframeIteration (EURUSD,M12) PERIOD_M30 = 30 2019.10.05 23:04:12.223 EnumTimeframeIteration (EURUSD,M12) PERIOD_M20 = 20 2019.10.05 23:04:12.223 EnumTimeframeIteration (EURUSD,M12) PERIOD_M15 = 15 2019.10.05 23:04:12.223 EnumTimeframeIteration (EURUSD,M12) PERIOD_M12 = 12 2019.10.05 23:04:12.223 EnumTimeframeIteration (EURUSD,M12) PERIOD_M10 = 10 2019.10.05 23:04:12.223 EnumTimeframeIteration (EURUSD,M12) PERIOD_M6 = 6 2019.10.05 23:04:12.223 EnumTimeframeIteration (EURUSD,M12) PERIOD_M5 = 5 2019.10.05 23:04:12.223 EnumTimeframeIteration (EURUSD,M12) PERIOD_M4 = 4 2019.10.05 23:04:12.223 EnumTimeframeIteration (EURUSD,M12) PERIOD_M3 = 3 2019.10.05 23:04:12.223 EnumTimeframeIteration (EURUSD,M12) PERIOD_M2 = 2 2019.10.05 23:04:12.223 EnumTimeframeIteration (EURUSD,M12) PERIOD_M1 = 1 2019.10.05 23:04:12.223 EnumTimeframeIteration (EURUSD,M12) PERIOD_CURRENT = 0 抵消了2。 2019.10.05 23:06:11.462 EnumTimeframeIteration (EURUSD,M12) Go 2019.10.05 23:06:11.462 EnumTimeframeIteration (EURUSD,M12) PERIOD_CURRENT = 0 2019.10.05 23:06:11.462 EnumTimeframeIteration (EURUSD,M12) PERIOD_M2 = 2 2019.10.05 23:06:11.462 EnumTimeframeIteration (EURUSD,M12) PERIOD_M4 = 4 2019.10.05 23:06:11.462 EnumTimeframeIteration (EURUSD,M12) PERIOD_M6 = 6 2019.10.05 23:06:11.463 EnumTimeframeIteration (EURUSD,M12) PERIOD_M12 = 12 2019.10.05 23:06:11.463 EnumTimeframeIteration (EURUSD,M12) PERIOD_M20 = 20 2019.10.05 23:06:11.469 EnumTimeframeIteration (EURUSD,M12) PERIOD_H1 = 16385 2019.10.05 23:06:11.469 EnumTimeframeIteration (EURUSD,M12) PERIOD_H3 = 16387 2019.10.05 23:06:11.469 EnumTimeframeIteration (EURUSD,M12) PERIOD_H6 = 16390 2019.10.05 23:06:11.469 EnumTimeframeIteration (EURUSD,M12) PERIOD_H12 = 16396 2019.10.05 23:06:11.475 EnumTimeframeIteration (EURUSD,M12) PERIOD_W1 = 32769 2019.10.05 23:06:11.475 EnumTimeframeIteration (EURUSD,M12) Back 2019.10.05 23:06:11.475 EnumTimeframeIteration (EURUSD,M12) PERIOD_W1 = 32769 2019.10.05 23:06:11.482 EnumTimeframeIteration (EURUSD,M12) PERIOD_H12 = 16396 2019.10.05 23:06:11.482 EnumTimeframeIteration (EURUSD,M12) PERIOD_H6 = 16390 2019.10.05 23:06:11.482 EnumTimeframeIteration (EURUSD,M12) PERIOD_H3 = 16387 2019.10.05 23:06:11.482 EnumTimeframeIteration (EURUSD,M12) PERIOD_H1 = 16385 2019.10.05 23:06:11.488 EnumTimeframeIteration (EURUSD,M12) PERIOD_M20 = 20 2019.10.05 23:06:11.488 EnumTimeframeIteration (EURUSD,M12) PERIOD_M12 = 12 2019.10.05 23:06:11.488 EnumTimeframeIteration (EURUSD,M12) PERIOD_M6 = 6 2019.10.05 23:06:11.488 EnumTimeframeIteration (EURUSD,M12) PERIOD_M4 = 4 2019.10.05 23:06:11.488 EnumTimeframeIteration (EURUSD,M12) PERIOD_M2 = 2 2019.10.05 23:06:11.488 EnumTimeframeIteration (EURUSD,M12) PERIOD_CURRENT = 0 然而,这种方法在速度上仍然输给了开关方法。 所以,只要你想,一切皆有可能!"。 Maksim Emeliashin 2022.01.21 02:02 #18698 x572intraday #: 为什么输入参数 不能在循环中被列举出来?你为什么要惩罚我们? 我也加入了这个问题。 关于枚举:如果有EnumToString函数,为什么没有StringToEnum--一些难以置信的复杂任务? 在数据库中把枚举值保存为数字是不可取的,因为如果你在中间给枚举添加一个新的值--就是这样,数据库中的数据变成了南瓜,它们作为数字是无法阅读的,你无法用眼睛来查看它们。 Maksim Emeliashin 2022.01.21 03:54 #18699 有什么方法可以明确地将NULL值传递给数据库查询参数吗? 这是一种会导致编译时错误 的结构。 res = DatabaseBind(request, column, NULL); Vitaly Muzichenko 2022.01.21 04:09 #18700 Maksim Emeliashin 编译时错误 的结构。 DatabaseBind(request, column, ""); 1...186318641865186618671868186918701871187218731874187518761877...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我已经挣扎了几个小时,试图从数据库中读取数据,但做不到。
下面是测试的代码。
简而言之。一个数据库被创建,有一个表(如果数据库存在,表被删除并重新创建)。一个单一的行被添加到表中。
然后,数据库被关闭并再次打开。对这一记录进行了简单的选择,但命令返回错误,即查询结果为空。
通过IDE检查--所有东西都被同一个查询所选择。搞不清楚这到底是一个错误还是一个修复?
工作的结果。
另外,附上完整的代码
为什么你不能在一个循环中浏览输入参数?你为什么要这样惩罚我们?
这样做的意义何在?分享秘密...
,我在市场上按下下载,默认打开的是错误的终端。我删除了它。现在按下 "下载 "按钮后没有任何反应
我如何从市场上安装EA?我有几个终端。 ,我在市场上按了下载键,默认打开了错误的终端。我删除了它。现在,在我按下 "下载 "按钮后,什么也没有发生。
你用什么浏览器下载?
这样做的意义何在?分享秘密...
这是在下一个主题,你不必走远。
用手把所有的东西塞进一个Array数组,而不是用一个循环,这是一种狗的乐趣。而这只是一个例子。在现实中,可能会有很多的枚举。
我甚至不会说没有枚举和ENUM_TIMEFRAMES枚举的问题。这很令人厌烦。我甚至不会提到缺乏枚举和ENUM_TIMEFRAMES枚举的问题。
曾几何时,我为了兴趣,试图做一个类似的超限动作。
关于交易、自动交易系统和交易策略测试的论坛
通过服务台与开发人员进行沟通!
Mihail Matkovskij, 2019.10.05 22:07
如果你需要通过任何数量的常数进行偏移或右/左移,将非常有用。这是我得到的东西。
抵消了1。
抵消了2。
然而,这种方法在速度上仍然输给了开关方法。
为什么输入参数 不能在循环中被列举出来?你为什么要惩罚我们?
我也加入了这个问题。
关于枚举:如果有EnumToString函数,为什么没有StringToEnum--一些难以置信的复杂任务?
在数据库中把枚举值保存为数字是不可取的,因为如果你在中间给枚举添加一个新的值--就是这样,数据库中的数据变成了南瓜,它们作为数字是无法阅读的,你无法用眼睛来查看它们。
有什么方法可以明确地将NULL值传递给数据库查询参数吗?
这是一种会导致编译时错误 的结构。
res = DatabaseBind(request, column, NULL);
DatabaseBind(request, column, "");