新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 440 1...433434435436437438439440441442443444445446447...1953 新评论 Vladislav Andruschenko 2018.01.30 10:01 #4391 STARIJ:它对我来说是有效的--它可以跟踪鼠标的移动 我的意思是说surolling)。 voron_026 2018.01.30 10:42 #4392 大家好。有必要从高级的时间框架来分析信息。该系统有一个条件,就是建立一个渠道。这是在寻找一定数量的酒吧的最高和最低价格。我用以下方法实现了它。extern ENUM_TIMEFRAMES TimeFrameRZ = PERIOD_M15; //Период разворотной зоны extern ENUM_TIMEFRAMES TimeFrameIn = PERIOD_M5; //Период точки входа extern int ATR_period = 14; extern int UpLineSell = 7; extern int DownLineSell = 7; extern int UpLineBuy = 7; extern int DownLineBuy = 7; // Параметры разворотных свечей extern string Comment2 = "---------------------------------Параметры разворотных свечей------------------------------------------"; extern int Volotilnost = 20; // Диапазон цен для трех разворотных свечей (в пунктах) extern int MaxLineSell = 3; extern int MaxLineBuy = 3; bool SellPattern = false; bool BuyPattern = false; bool New_Bar = false; double UpLine_Sell = 0; double DownLine_Sell = 0; double UpLine_Buy = 0; double DownLine_Buy = 0; int i = 0, j = 0; int ULs = 0; int DLs = 0; int ULb = 0; int DLb = 0; double MassZone[2][10]; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if(Digits == 3 || Digits ==5 ) { Volotilnost *=10; UpLineSell *= 10; DownLineSell *= 10; UpLineBuy*= 10; DownLineBuy*= 10; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { RazvorotZona(); if(SellPattern == true) { if(ObjectCreate(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJ_HLINE,0,TimeCurrent(),UpLine_Sell)) { ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_COLOR,clrOrange);//--- установим цвет прямоугольника ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане } if(ObjectCreate(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJ_HLINE,0,TimeCurrent(),DownLine_Sell)) { ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_COLOR,clrMagenta);//--- установим цвет прямоугольника ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане } ULs++; DLs++; if(DLs >= MaxLineSell && ULs >= MaxLineSell) { ObjectDelete(ChartID(),"UpLine_Sell"+IntegerToString(ULs - MaxLineSell)); ObjectDelete(ChartID(),"DownLine_Sell"+IntegerToString(DLs - MaxLineSell)); } } if(BuyPattern == true) { if(ObjectCreate(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJ_HLINE,0,TimeCurrent(),UpLine_Buy)) { ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_COLOR,clrDeepSkyBlue);//--- установим цвет прямоугольника ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане } if(ObjectCreate(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJ_HLINE,0,TimeCurrent(),DownLine_Buy)) { ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_COLOR,clrBrown);//--- установим цвет прямоугольника ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане } ULb++; DLb++; if(ULb >= MaxLineBuy && DLb >= MaxLineBuy) { ObjectDelete(ChartID(),"UpLine_Buy"+IntegerToString(ULb - MaxLineBuy)); ObjectDelete(ChartID(),"DownLine_Buy"+IntegerToString(DLb - MaxLineBuy)); } } } //+------------------------------------------------------------------+ // Функция определения нового бара | //+------------------------------------------------------------------+ void Find_New_Bar() { datetime TimeBar0 = iTime(Symbol(),TimeFrameRZ,0); static datetime New_Time=0; // Время текущего бара New_Bar=false; // Нового бара нет if(New_Time != TimeBar0) // Сравниваем время { New_Time = TimeBar0; // Теперь время такое New_Bar = true; // Поймался новый бар } } //+------------------------------------------------------------------+ // Функция определения разворотной зоны | //+------------------------------------------------------------------+ void RazvorotZona() { Find_New_Bar(); double Open3= NormalizeDouble (iOpen(Symbol(), TimeFrameRZ,4),Digits); double Close3 = NormalizeDouble (iClose(Symbol(), TimeFrameRZ,4),Digits); double High3 = NormalizeDouble (iHigh(Symbol(), TimeFrameRZ,4),Digits); double Low3 = NormalizeDouble (iLow(Symbol(), TimeFrameRZ,4),Digits); //Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед перевернутым Молотом double ATR = iATR(Symbol(),TimeFrameRZ,ATR_period,1); SellPattern = false; BuyPattern = false; int bar1 = 1; int bar2 = 3; double Max, Min; Max = High[iHighest(NULL, TimeFrameRZ, MODE_HIGH, bar2, bar1)]; //1. Ищем High и Low на отрезке [bar1, bar2]. Min = Low[iLowest(NULL, TimeFrameRZ, MODE_LOW, bar2, bar1)]; if(NormalizeDouble((Max - Min) / Point, Digits) < Volotilnost && MathAbs(Close3-Open3) > 1.5*ATR) { if((Close3 > Open3) && New_Bar == true) { UpLine_Sell = Max; DownLine_Sell = Min; SellPattern = true; Print ("Идентифицирован паттерн"); Print ("Максимальная цена "+DoubleToStr(Max)); Print ("Минимальная цена "+DoubleToStr(Min)); } else {SellPattern = false;} if((Close3 < Open3) && New_Bar == true) { UpLine_Buy = Max; DownLine_Buy = Min; BuyPattern = true; Print ("Идентифицирован паттерн"); } else {BuyPattern = false;} } } 但这种方法导致了对当前工作时间框架M5的条形分析。我需要从M15中获取bar1和bar2参数 如何实现这一点? voron_026 2018.01.30 10:45 #4393 我有一种感觉,问题就在这里的某个地方。 Max = High[iHighest(NULL, TimeFrameRZ, MODE_HIGH, bar2, bar1)]; //1. Ищем High и Low на отрезке [bar1, bar2]. Min = Low[iLowest(NULL, TimeFrameRZ, MODE_LOW, bar2, bar1)]; 谁能说什么? Konstantin Erin 2018.01.30 10:59 #4394 voron_026:我有一种感觉,问题就在这里的某个地方。 谁能说什么?嗯,是的,指定正确的时间框架。 voron_026 2018.01.30 11:13 #4395 STARIJ:对,指定正确的时间框架所以我说... TimeFrameRZ = PERIOD_M15 这是一个外部变量。 Juer 2018.01.30 11:13 #4396 double array[10]; array[0]=0.1;我声明一个数组,并填入元素。 为什么我在第二行得到一个没有类型的声明错误? voron_026 2018.01.30 11:18 #4397 Juer:我声明一个数组,并填入元素。 为什么我在第二行得到一个没有类型的声明错误?在void OnTick()中写代码,一切都会正常。 或者写数组[0]=0.1; 在 void OnTick() Artyom Trishkin 2018.01.30 11:37 #4398 Juer:我声明一个数组,并填入元素。 为什么我在第二行得到一个没有类型的声明错误?你是否在全局变量的区域内声明了数组? 然后一次性声明它的值(因为你在代码中自己填写,所以它们是预定义的),比如说。 double array[10]={0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0}; ...或者在OnInit()中或在函数中用数值填充数组,在这里它将被填充。 ZZuretc 2018.01.30 12:11 #4399 你能告诉我如何将ZigZag指标值输出到EA中吗?其他的是通过写iMA、iStochastic、iWPR...来输出。我如何手动计算ZigZag? Konstantin Erin 2018.01.30 12:19 #4400 ZZuretc: 请告知如何将ZigZag指标的数值输出到EA中?其他的是由iMA、iStochastic、iWPR......印刷的。我如何手动计算ZigZag?决定使用?ZigZag指标值 在任何地方都是零。只有在顶部,人字形的价值才等于顶部的价格。 你必须在一个循环中穿过酒吧。见实例 附加的文件: Zig2fl.mq4 4 kb 1...433434435436437438439440441442443444445446447...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
它对我来说是有效的--它可以跟踪鼠标的移动
我的意思是说surolling)。大家好。有必要从高级的时间框架来分析信息。
该系统有一个条件,就是建立一个渠道。这是在寻找一定数量的酒吧的最高和最低价格。我用以下方法实现了它。
但这种方法导致了对当前工作时间框架M5的条形分析。我需要从M15中获取bar1和bar2参数
如何实现这一点?
我有一种感觉,问题就在这里的某个地方。
谁能说什么?
我有一种感觉,问题就在这里的某个地方。
谁能说什么?
嗯,是的,指定正确的时间框架。
对,指定正确的时间框架
所以我说...
TimeFrameRZ = PERIOD_M15
这是一个外部变量。我声明一个数组,并填入元素。
为什么我在第二行得到一个没有类型的声明错误?
我声明一个数组,并填入元素。
为什么我在第二行得到一个没有类型的声明错误?
在void OnTick()中写代码,一切都会正常。
或者写数组[0]=0.1; 在 void OnTick()
我声明一个数组,并填入元素。
为什么我在第二行得到一个没有类型的声明错误?
你是否在全局变量的区域内声明了数组?
然后一次性声明它的值(因为你在代码中自己填写,所以它们是预定义的),比如说。
...或者在OnInit()中或在函数中用数值填充数组,在这里它将被填充。
请告知如何将ZigZag指标的数值输出到EA中?其他的是由iMA、iStochastic、iWPR......印刷的。我如何手动计算ZigZag?
决定使用?ZigZag指标值 在任何地方都是零。只有在顶部,人字形的价值才等于顶部的价格。
你必须在一个循环中穿过酒吧。见实例