[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 228 1...221222223224225226227228229230231232233234235...432 新评论 Dimka-novitsek 2013.03.18 11:27 #2271 //записать void SaveArray(string File, double &a[]) { int h = FileOpen(File, FILE_BIN|FILE_WRITE); if(h>0) { int sz = ArraySize(a); FileWriteArray(h,a,0,sz); FileClose(h); } } //прочитать void OpenArray(string File, double &a[], int sz) { int h = FileOpen(File, FILE_BIN|FILE_READ); if(h>0) { ArrayResize(a,sz); FileReadArray(h,a,0,sz); FileClose(h); } } Dimka-novitsek 2013.03.18 11:29 #2272 以下是广告内容int Buy[];int Sell[]; string FileBuy="FileBuy.csv",FileSell="FileSell.csv"; Рустам 2013.03.18 12:37 #2273 paladin80: 从减少程序执行的资源消耗的角度来看,哪里是声明变量类型(int、double等)的最佳位置。例如,int i可以全局声明,也可以在int start()中声明 ... for (int i=OrdersTotal()-1; i>=0; i--) ...我有一种感觉,在每个tick上声明比在全局层面上声明一次,就在extern参数之后,成本更高。 或者在资源密集度方面的差异是一样的? 所有的变量(内存位置)都是在程序启动时创建一次,然后必须在文本中出现的地方进行初始化(变量声明),但这并不总是发生,所以如果你想让它正常工作,不要忘记在声明时明确初始化。 Alexander 2013.03.18 14:14 #2274 舒尔金。纠正了代码以符合你的要求。 在测试时,四个订单按照设定的顺序在第一个tick上关闭,第五个在下一个tick上关闭。可能这里有别的问题,因为我已经反复测试过了。 我向你提供程序的代码和测试者的日志。 真诚的。舒尔金这很清楚。替换for(i=0, int k=0; i<OrdersTotal();i++,k++)//到 。int total=OrdersTotal(); for(i=0, int k=0; i<total;i++,k++)// [Deleted] 2013.03.18 18:41 #2275 你好,你能告诉我如何在每个独立的柱状图块中计算指标值的总和吗? 我写了一个指标,但它只有在被设置时才开始工作。 在以前的柱状图中--什么都没有!你知道吗?我不设法循环 "而"!帮助,专业人士。 Viktar Dzemikhau 2013.03.18 22:31 #2276 有以下情况。//+-------------------------------------------------------------------------------------+ //| Блок поиска своих объектов | //+-------------------------------------------------------------------------------------+ bool IsObjectFound() { for (int obj=0; obj<=ObjectsTotal()-1; obj++) { objName = ObjectName(obj); isObj = ObjectFind(objName); objPrice1 = ObjectGet(objName, OBJPROP_PRICE1); objPrice2 = ObjectGet(objName, OBJPROP_PRICE2); objPriceCurr = ObjectGetValueByShift(objName,0); } Print("objPriceCurr = ", objPriceCurr); if (isObj != -1) // Если объект найден, значит выходим из функции return (true); return (false); // Объект не найден! } //+-------------------------------------------------------------------------------------+ //| Функция start | //+-------------------------------------------------------------------------------------+ int start() { int signal = GetSignal(); if (IsObjectFound() == false) { Print("В окне отсуствуют объекты, поиск продолжается..."); return (0); }我已经展示了一段存在误解的代码。所有的变量都被宣布为全局变量。在IsObjectFound() 函数中,我得到了该对象的第一个和第二个价格点的值,名称,以及该对象在当前条上的价格值。如果找到了对象,它应该以真 模式退出函数, 否则以假 模式退出。 在开始时,我规定了一个条件,如果没有找到对象,那么我就退出函数。if (IsObjectFound() == false) { Print("В окне отсуствуют объекты, поиск продолжается..."); return (0); }我在测试器中运行它,我没有画任何对象,什么都没有--一个光秃秃的图。然而,该函数并没有退出,也没有相应的打印。 Print("В окне отсуствуют объекты, поиск продолжается...");启动功能继续进行。这到底是怎么回事? Алексей Тарабанов 2013.03.18 22:35 #2277 这一点也不好。 Viktar Dzemikhau 2013.03.18 22:44 #2278 怎么了? Алексей Тарабанов 2013.03.18 22:50 #2279 全局变量 是全局搜索。在没有看到数据模型的情况下,你能对该算法说些什么?我将准确地追踪数据。而isObj真的是布尔值,以及所有这些......。 Viktar Dzemikhau 2013.03.18 22:56 #2280 tara:全局变量是全局搜索。在没有看到数据模型的情况下,你能对该算法说些什么?我将准确地追踪数据。而isObj真的是布尔值,以及所有这些......。 //+-------------------------------------------------------------------------------------+ //| TradingByLine.mq4 | //| hoz | //| | //+-------------------------------------------------------------------------------------+ #property copyright "hoz" #property link "" extern string ___H0 = "Параметры отклонений зоны сигнала"; extern double dernovich = 40, faustUs = 40; /*extern double limitOverLine = 3, limitUnderLine = 20;*/ string objName; // Имя объекта int isObj; // Возвращает окно, которому принадлежит // ..наденнный объект, либо -1 double objPrice1, // Первая координата цены луча objPrice2, // Вторая координата цены луча objPriceCurr; // Цена объекта на заданном баре int pt; #define SIGNAL_BUY 0 // Сигнал на покупку #define SIGNAL_SELL 1 // Сигнал на продажу #define SIGNAL_NO -1 // Сигнала нет //+-------------------------------------------------------------------------------------+ //| Функция иницилизации | //+-------------------------------------------------------------------------------------+ int init() { if(Digits == 2 || Digits == 4) pt = Point; if(Digits == 1 || Digits == 3 || Digits == 5) pt = Point*10; if(Digits == 6) pt = Point*100; if(Digits == 7) pt = Point*1000; return (0); } //+-------------------------------------------------------------------------------------+ //| Функция деиницилизации | //+-------------------------------------------------------------------------------------+ int deinit() { //---- //---- return (0); } //+-------------------------------------------------------------------------------------+ //| Сигнализатор касания о луч | //+-------------------------------------------------------------------------------------+ bool AlertByTouching(int signal) { double priceDevBefore, priceDevAfter; if (signal == SIGNAL_SELL) { priceDevAfter = objPriceCurr + faustUs * pt; priceDevBefore = objPriceCurr - dernovich * pt; if (Bid <= priceDevAfter && Bid >= priceDevBefore) { Print("Внимание. На инструменте ", Symbol(), " ожидается 3-е касание луча. Готовься продавать!"); Alert("Внимание. На инструменте ", Symbol(), " ожидается 3-е касание луча. Готовься продавать!"); return (true); } } if (signal == SIGNAL_BUY) { priceDevAfter = objPriceCurr - faustUs * pt; priceDevBefore = objPriceCurr + dernovich * pt; Print("priceDevAfter = ", objPriceCurr - faustUs * pt); Print("priceDevBefore = ", objPriceCurr - faustUs * pt); Print("Ask >= priceDevAfter && Ask >= priceDevBefore ", Ask ," >= ", priceDevAfter ," && ", Ask ," >= ", priceDevBefore); if (Ask >= priceDevAfter && Ask >= priceDevBefore) { Print("Внимание. На инструменте ", Symbol(), " ожидается 3-е касание луча. Готовься покупать!"); Alert("Внимание. На инструменте ", Symbol(), " ожидается 3-е касание луча. Готовься покупать!"); return (true); } } return (false); } //+-------------------------------------------------------------------------------------+ //| Блок поиска своих объектов | //+-------------------------------------------------------------------------------------+ bool GetSignal() { if (!IsObjectFound()) return (SIGNAL_NO); if (objPrice1 > objPrice2) return (SIGNAL_BUY); if (objPrice1 < objPrice2) return (SIGNAL_SELL); } //+-------------------------------------------------------------------------------------+ //| Блок поиска своих объектов | //+-------------------------------------------------------------------------------------+ bool IsObjectFound() { for (int obj=0; obj<=ObjectsTotal()-1; obj++) { objName = ObjectName(obj); isObj = ObjectFind(objName); objPrice1 = ObjectGet(objName, OBJPROP_PRICE1); objPrice2 = ObjectGet(objName, OBJPROP_PRICE2); objPriceCurr = ObjectGetValueByShift(objName,0); } Print("objPriceCurr = ", objPriceCurr); if (isObj != -1) // Если объект найден, значит выходим из функции return (true); return (false); // Объект не найден } //+-------------------------------------------------------------------------------------+ //| Функция start | //+-------------------------------------------------------------------------------------+ int start() { int signal = GetSignal(); if (IsObjectFound() == false) { Print("В окне отсуствуют объекты, поиск продолжается..."); return (0); } if (signal != SIGNAL_NO) if (!AlertByTouching(signal)) return (0); Print("objPrice1 = ", objPrice1, ", objPrice2 = ", objPrice2); // Print("objPriceCurr = ", objPriceCurr); return (0); }isObj 是一个int。如果有的话,返回拥有该对象的窗口。如果它不存在,我理解它将返回-1。根据文档,主窗口从0 开始,然后是子窗口...到目前为止,这是一个交易专家顾问的纲要,纯粹是信号。但它想什么时候发信息就什么时候发。 1...221222223224225226227228229230231232233234235...432 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
从减少程序执行的资源消耗的角度来看,哪里是声明变量类型(int、double等)的最佳位置。例如,int i可以全局声明,也可以在int start()中声明 ... for (int i=OrdersTotal()-1; i>=0; i--) ...我有一种感觉,在每个tick上声明比在全局层面上声明一次,就在extern参数之后,成本更高。 或者在资源密集度方面的差异是一样的?
所有的变量(内存位置)都是在程序启动时创建一次,然后必须在文本中出现的地方进行初始化(变量声明),但这并不总是发生,所以如果你想让它正常工作,不要忘记在声明时明确初始化。
纠正了代码以符合你的要求。
在测试时,四个订单按照设定的顺序在第一个tick上关闭,第五个在下一个tick上关闭。可能这里有别的问题,因为我已经反复测试过了。
我向你提供程序的代码和测试者的日志。
真诚的。舒尔金
这很清楚。替换
到 。
有以下情况。
我已经展示了一段存在误解的代码。所有的变量都被宣布为全局变量。在IsObjectFound() 函数中,我得到了该对象的第一个和第二个价格点的值,名称,以及该对象在当前条上的价格值。如果找到了对象,它应该以真 模式退出函数, 否则以假 模式退出。
在开始时,我规定了一个条件,如果没有找到对象,那么我就退出函数。
我在测试器中运行它,我没有画任何对象,什么都没有--一个光秃秃的图。然而,该函数并没有退出,也没有相应的打印。
启动功能继续进行。这到底是怎么回事?
全局变量 是全局搜索。在没有看到数据模型的情况下,你能对该算法说些什么?
我将准确地追踪数据。而isObj真的是布尔值,以及所有这些......。
全局变量是全局搜索。在没有看到数据模型的情况下,你能对该算法说些什么?
我将准确地追踪数据。而isObj真的是布尔值,以及所有这些......。
isObj 是一个int。如果有的话,返回拥有该对象的窗口。如果它不存在,我理解它将返回-1。根据文档,主窗口从0 开始,然后是子窗口...到目前为止,这是一个交易专家顾问的纲要,纯粹是信号。但它想什么时候发信息就什么时候发。