任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 602 1...595596597598599600601602603604605606607608609...1178 新评论 Denis Lysenko 2014.05.13 14:15 #6011 AlexeyVik: 要么是我不理解你,要么是你不理解某些东西......。.csv文件有什么问题?只要不计算第一个条形图,prev_calculated或IndicatorCounted()(在旧版本中)将为零,这是对的。 是的,这是可以理解的。我已经附上了我的日志。事实证明,当我从第20000条到第0条走到尽头时,它就像开始把所有20000条都搅和在一起。也就是说,它要么不完成OnCalculate,要么返回0而不是rate_total。 但由于某些原因,这个错误并没有影响到你。在你的情况下,一切工作都很顺利。 所以,我不明白我的机器/系统出了什么问题? Alexey Viktorov 2014.05.13 14:27 #6012 Expert: 是的,这是可以理解的。我附上了我的日志。事实证明,当我达到20000巴的终点到0时,就像它又开始了整个20000巴。也就是说,它要么不完成OnCalculate,要么返回0而不是rate_total。 但由于某些原因,这个错误并没有影响到你。对你来说,它工作得很好... 所以我无法弄清我的机器/系统出了什么问题? 试着先把嵌套的循环减少100倍,然后再增加。这样你就会知道你的i5是否无法处理,或者MT是否变慢了。 你是否注意到,我把一个嵌套循环减少了10倍?我花了2分12秒的时间来重新计算,就像这样。 你可以在这一行 limit = (prev_calculated > 0)?rate_total-prev_calculated:rate_total-100。 增加100。这将使指标启动时重新计算的条数减少。 ANDREY 2014.05.13 14:52 #6013 大家晚上好(晚上、早上、下午)!我想说的是 你能告诉我如何对以下条件进行编码吗? 如果High[1]......High[300]。(所有例外)< Open[0]。 打开一个订单。 谢谢你。 isn-88 2014.05.13 15:10 #6014 solnce600: 大家晚上好(晚上、早上、下午)!我想说的是 你能告诉我如何对以下条件进行编码吗? 如果High[1]......High[300]。(所有例外)< Open[0]。 打开一个订单。 谢谢你。 作为一种选择。 int index=iHighest(NULL,0,MODE_HIGH,300,1); if(High[index]<Open[0]) { //открываем ордер } ANDREY 2014.05.13 15:32 #6015 isn-88: 作为一种选择。 谢谢你。 Александр 2014.05.14 01:45 #6016 我找不到EA中哪个功能可以让我展望未来。问题是,EA在一定时间内开仓,有大量的漏洞,寻找绕过这种事情的方法。 Alexey Oreshkin 2014.05.14 02:56 #6017 001: 我找不到EA中哪个功能可以让我展望未来。问题是,EA在一定时间内开仓,有大量的漏洞,寻找绕过这种事情的方法。 你不需要看未来,而是看过去,只需检查是否有漏洞,就可以了。 Alexey Viktorov 2014.05.14 03:42 #6018 001: 我找不到EA中哪个功能可以让我展望未来。问题是,EA在一定时间内开仓,有很多漏洞,寻找绕过这种事情的方法。 。 你说的是哪个洞?当你提出关于编程的问题时,这样的表达方式是不合适的,孔是一个符号的历史数据 的差距,在这种情况下,你是什么意思?如果问题中出现了 "时间",你可能是指 "时间旅行洞 "传送。 如果我有任何心灵感应的能力,我只需要在仪器上得到一个好的历史。 [删除] 2014.05.14 05:12 #6019 需要帮助,同事们。 我正在编写一个EA(初生),它需要分析历史数据才能正常工作。 我正在使用开盘价、高点和低点的开盘时间 的数组。 当把数组划分为每日时段时,我几乎在每个时段都得到不同数量的分钟条。所有1440分钟的条形图都是实际存在的,而历史上显示的是1380、1378或每天3000多条。 请帮助我了解问题出在哪里。在我看来,历史不可能与真实的(绘制的)图表不同。 这里有一段代码,可以计算出这一切。 void CountStartTime(int i)//Собственно функция расчета времен, параметр - номер периода расчета { int my_by_tp, my_sell_tp, my_by_sl, my_sell_sl; int j_v_t = my_period_array_start[i];//Смещение от начала расчетного периода // Alert("Обсчет истории в ", i, " день"); do { //Устанавливаем пороги double MyOpenPrise = my_open_array[j_v_t]; double MyByTakeProfit = MyOpenPrise + (TakeProfit + 5)*RealPoint; double MySellTakeProfit = MyOpenPrise - (TakeProfit + 5)*RealPoint; double MyByStopLoss = MyOpenPrise - (StopLoss - 5)*RealPoint; double MySellStopLoss = MyOpenPrise + (StopLoss - 5)*RealPoint; for ( my_by_tp = j_v_t; my_by_tp >= my_period_array_stop[i-1]; my_by_tp--) { if(my_max_array[my_by_tp] >= MyByTakeProfit) break;//Срабатывает при превышении уровня тейк-профита } for ( my_by_sl = j_v_t; my_by_sl >= my_period_array_stop[i-1]; my_by_sl--) { if(my_min_array[my_by_sl] <= MyByStopLoss) break;//Срабатывает при превышении уровня стоп-лоса } for ( my_sell_tp = j_v_t; my_sell_tp >= my_period_array_stop[i-1]; my_sell_tp--) { if(my_min_array[my_sell_tp] <= MySellTakeProfit) break;//Срабатывает при превышении уровня тейк-профита } for ( my_sell_sl = j_v_t; my_sell_sl >= my_period_array_stop[i-1]; my_sell_sl--) { if(my_max_array[my_sell_sl] >= MySellStopLoss) break;//Срабатывает при превышении уровня стоп-лоса } //А теперь проверка на наличие всех четырех точек if(my_by_tp >= my_period_array_stop[i-1] && my_sell_tp >= my_period_array_stop[i-1] && my_by_sl <= my_by_tp && my_sell_sl <= my_sell_tp) { my_time_vvoda_array[TimeHour(my_time_array[j_v_t])][TimeMinute(my_time_array[j_v_t])][i-1] = 1; } j_v_t--;//отступаем на 1 тикет в сторону окончания периода расчета } while(j_v_t >= my_period_array_stop[i-1]);//и расчет точек по новой Alert("дата первого бара ",TimeToString(my_time_array[my_period_array_start[i]],TIME_DATE),", Start - ",my_period_array_start[i],", дата последнего бара ",TimeToString(my_time_array[my_period_array_stop[i]],TIME_DATE),", Stop - ",my_period_array_stop[i]); return; } void CountStartTimeFinal()//Собственно функция расчета времени на конце истории { int my_by_tp, my_sell_tp, my_by_sl, my_sell_sl; int j_v_f = 2500;//Смещение от начала расчетного периода do { //Устанавливаем пороги double MyOpenPrise = my_open_array[j_v_f]; double MyByTakeProfit = MyOpenPrise + (TakeProfit + 5)*RealPoint; double MySellTakeProfit = MyOpenPrise - (TakeProfit + 5)*RealPoint; double MyByStopLoss = MyOpenPrise - (StopLoss - 5)*RealPoint; double MySellStopLoss = MyOpenPrise + (StopLoss - 5)*RealPoint; for ( my_by_tp = j_v_f; my_by_tp >= 1; my_by_tp--) { if(my_max_array[my_by_tp] >= MyByTakeProfit) break;//Срабатывает при превышении уровня тейк-профита } for ( my_by_sl = j_v_f; my_by_sl >= 1; my_by_sl--) { if(my_min_array[my_by_sl] <= MyByStopLoss) break;//Срабатывает при превышении уровня стоп-лоса } for ( my_sell_tp = j_v_f; my_sell_tp >= 1; my_sell_tp--) { if(my_min_array[my_sell_tp] <= MySellTakeProfit) break;//Срабатывает при превышении уровня тейк-профита } for ( my_sell_sl = j_v_f; my_sell_sl >= 1; my_sell_sl--) { if(my_max_array[my_sell_sl] >= MySellStopLoss) break;//Срабатывает при превышении уровня стоп-лоса } //А теперь проверка на наличие всех четырех точек if(my_by_tp > 1 && my_sell_tp > 1 && my_by_sl <= my_by_tp && my_sell_sl <= my_sell_tp) { my_time_vvoda_final[TimeHour(my_time_array[j_v_f])*60 + TimeMinute(my_time_array[j_v_f])] = 1; } j_v_f--;//отступаем на 1 тикет в сторону окончания периода расчета } while(j_v_f >= 1);//и расчет точек по новой return; } void tochka_vvoda () { if(AutoCountTime == true) { int i, j_v, k_v = 0, l = 0, m, n, a_i = 0; PointCount();//Считаем значение пункта for(i=0;i<=23;i++)//Обнуляем значения массивов { for(j_v=0;j_v<=59;j_v++) { for(k_v=0;k_v<=39;k_v++) my_time_vvoda_array[i][j_v][k_v] = 0;//Итоговый массив по суткам my_time_vvoda_start[60*i + j_v] = 0;//Итоговый суточный массив дальней истории my_time_vvoda_final[60*i + j_v] = 0;//Итоговый суточный массив ближайшей истории my_time_vvoda_count[60*i + j_v] = 0;//Итоговый массив } } k_v = 0; j_v = 0; m = 0; n = 0; bool srt = false; Alert(""); Alert(""); Alert(""); datetime StartTime;//Время начала периода расчета StartTime = StrToTime(StartBarTime); // текущая дата + время datetime EndTime;//Время конца периода расчета EndTime = StrToTime(FinishBarTime); // текущая дата + время k_v = 1; for(i=0;i<=49999;i++)//Чтение истории на минутном графике и запись ее по массивам { while(iTime(Symbol(),1,k_v) == 0) k_v++; my_open_array[i] = iOpen(Symbol(),1,k_v);//Массив цен открытия my_max_array[i] = iHigh(Symbol(),1,k_v);//Массим максимумов my_min_array[i] = iLow(Symbol(),1,k_v);//Массив минимумов my_time_array[i] = iTime(Symbol(),1,k_v);//Массив времен открытия k_v++; if((j_v <= i) && srt == false && (TimeHour(my_time_array[i]) == TimeHour(EndTime)) && (TimeMinute(my_time_array[i]) == TimeMinute(EndTime))) { j_v = i + 10; srt = true; if(a_i < 40) my_period_array_stop[a_i] = i;//Массив тикетов окончания расчетного периода, разделенный по дням } if((j_v <= i)&& srt == true && (TimeHour(my_time_array[i]) == TimeHour(StartTime)) && (TimeMinute(my_time_array[i]) == TimeMinute(StartTime))) { j_v = i; srt = false; if(a_i < 40) my_period_array_start[a_i] = i;//Массив тикетов начал расчетного периода, разделенный по дням a_i++; } if(k_v >= iBars(Symbol(),1)) break; } Alert("Величина истории (iBars) = ",iBars(Symbol(),1), " баров"); Alert("Для расчета можно использовать ",a_i, " периодов"); if(a_i == 0) { MessageBox("Расчет истории не возможен","ВНИМАНИЕ",0x00000030); return; } //Вызов функции обсчета истории по дням if(a_i < VelichinaIstorii) MyHistiryLoss = true; else MyHistiryLoss = false; for(day_id = VelichinaIstorii; day_id >= 1; day_id--) CountStartTime(day_id); for(i=0;i<=23;i++) { for(j_v=0;j_v<=59;j_v++) { k_v=0; for(day_id = VelichinaIstorii - 1; day_id >= 0; day_id--) { k_v = k_v + my_time_vvoda_array[i][j_v][day_id]; } if(k_v == VelichinaIstorii - 1) my_time_vvoda_start[60*i + j_v] = 1;//Alert("Полное совпадение в ", i," часов ", j," минут"); } } CountStartTimeFinal();//Вызов функции обсчета ближайшей истории m = 0; n = 0; for(i=0;i<=1439;i++) { if(my_time_vvoda_start[i] == 1 && my_time_vvoda_final[i] == 1) { if( m == 0) m = i; n++; } else { if(m != 0 && n != 0) my_time_vvoda_count[m] = n; m = 0; n = 0; } } if(m != 0 && n != 0) my_time_vvoda_count[m] = n; if(MyHistiryLoss != true) { k_v = ArrayMaximum(my_time_vvoda_count,WHOLE_ARRAY,0); l = k_v + MathFloor(my_time_vvoda_count[k_v]/2); if(my_time_vvoda_count[k_v] != 0) { Alert("Максималиное совпадение с ",MathFloor(k_v/60)," часов ",MathMod(k_v, 60)," минут",", длительностью ",my_time_vvoda_count[k_v]," минут"); StartSessionTime = DoubleToStr(MathFloor(l/60),0) + ":" + DoubleToStr(MathMod(l, 60),0); l = l + MathFloor(my_time_vvoda_count[k_v]/2); EndSessionTime = DoubleToStr(MathFloor(l/60),0) + ":" + DoubleToStr(MathMod(l, 60),0); Alert("Начало торговли в ",StartSessionTime); } else { Alert("Точка входа не найдена"); MyHistiryLoss = true; } } else MessageBox("Расчет точки входа не возможен,\n нет достаточной истории","ВНИМАНИЕ",0x00000030); } else { Alert("Время торговли устанавливается в ручном режиме"); MyHistiryLoss = false; } return; } Александр 2014.05.14 05:41 #6020 AlexeyVik: 你说的是什么洞?当你问一个关于编程的问题时,这样的表达是不合适的,孔是工具的历史数据的差距,但你在这里是什么意思?如果问题中出现了 "时间",你可能是指 "时间旅行洞 "传送。 如果我有任何心灵感应的能力,我只需要在仪器上得到一个好的历史。 当然,是关于历史上的漏洞。还有一个问题要问你:你是如何实现乐器上的优质故事的? 1...595596597598599600601602603604605606607608609...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
要么是我不理解你,要么是你不理解某些东西......。.csv文件有什么问题?只要不计算第一个条形图,prev_calculated或IndicatorCounted()(在旧版本中)将为零,这是对的。
是的,这是可以理解的。我已经附上了我的日志。事实证明,当我从第20000条到第0条走到尽头时,它就像开始把所有20000条都搅和在一起。也就是说,它要么不完成OnCalculate,要么返回0而不是rate_total。 但由于某些原因,这个错误并没有影响到你。在你的情况下,一切工作都很顺利。
所以,我不明白我的机器/系统出了什么问题?
是的,这是可以理解的。我附上了我的日志。事实证明,当我达到20000巴的终点到0时,就像它又开始了整个20000巴。也就是说,它要么不完成OnCalculate,要么返回0而不是rate_total。
但由于某些原因,这个错误并没有影响到你。对你来说,它工作得很好...
所以我无法弄清我的机器/系统出了什么问题?
试着先把嵌套的循环减少100倍,然后再增加。这样你就会知道你的i5是否无法处理,或者MT是否变慢了。
你是否注意到,我把一个嵌套循环减少了10倍?我花了2分12秒的时间来重新计算,就像这样。
你可以在这一行
limit = (prev_calculated > 0)?rate_total-prev_calculated:rate_total-100。
增加100。这将使指标启动时重新计算的条数减少。
大家晚上好(晚上、早上、下午)!我想说的是
你能告诉我如何对以下条件进行编码吗?
如果High[1]......High[300]。(所有例外)< Open[0]。
打开一个订单。
谢谢你。
大家晚上好(晚上、早上、下午)!我想说的是
你能告诉我如何对以下条件进行编码吗?
如果High[1]......High[300]。(所有例外)< Open[0]。
打开一个订单。
谢谢你。
作为一种选择。
作为一种选择。
我找不到EA中哪个功能可以让我展望未来。问题是,EA在一定时间内开仓,有大量的漏洞,寻找绕过这种事情的方法。
你不需要看未来,而是看过去,只需检查是否有漏洞,就可以了。
我找不到EA中哪个功能可以让我展望未来。问题是,EA在一定时间内开仓,有很多漏洞,寻找绕过这种事情的方法。 。
如果我有任何心灵感应的能力,我只需要在仪器上得到一个好的历史。
需要帮助,同事们。
我正在编写一个EA(初生),它需要分析历史数据才能正常工作。
我正在使用开盘价、高点和低点的开盘时间 的数组。
当把数组划分为每日时段时,我几乎在每个时段都得到不同数量的分钟条。所有1440分钟的条形图都是实际存在的,而历史上显示的是1380、1378或每天3000多条。
请帮助我了解问题出在哪里。在我看来,历史不可能与真实的(绘制的)图表不同。
这里有一段代码,可以计算出这一切。
你说的是什么洞?当你问一个关于编程的问题时,这样的表达是不合适的,孔是工具的历史数据的差距,但你在这里是什么意思?如果问题中出现了 "时间",你可能是指 "时间旅行洞 "传送。
如果我有任何心灵感应的能力,我只需要在仪器上得到一个好的历史。
当然,是关于历史上的漏洞。还有一个问题要问你:你是如何实现乐器上的优质故事的?