初学者的问题 MQL5 MT5 MetaTrader 5 - 页 747

 
Sergey Gritsay:

维塔利,查看https://www.mql5.com/ru/docs/series/timeseries_access#synchronized, 有一个加载历史的样本脚本,它可能会有所帮助

谢谢你,我会努力处理的。

现在已经出现了一个问题。

下一个重要的检查是检查调用该函数的程序的类型。回顾一下,发送刷新时间序列的请求与调用刷新的指标的周期相同是非常不可取的。由于历史数据的更新是在指标工作的同一线程中进行的,因此,请求提供与指标相同的符号周期的数据是不可取的。因此,发生冲突的概率很高。为了检查它,我们使用带有 MQL5_PROGRAM_TYPE修改器的MQL5InfoInteger() 函数。

如果(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR&&Period()==period&&Symbol()==symbol)
返回(-4)。


它应该在我的指标中起作用。

 

先生们,与ZigZag斗争。

我需要得到四个顶点的确切数据。结果是第一个,最必要的顶点iCustom给的不正确。从图形图像上看,它是滞后的,后面三个是正确的。类似的事情已经被发现了 -https://www.mql5.com/ru/forum/100123

我已经尝试了一切可能的方法,我甚至创建了一个单独的专家顾问,专门用于检查ZigZag的数据。自己看吧,也许我在什么地方犯了错?只需安装并启用开盘价格的可视化。得到这个--


//+------------------------------------------------------------------+
//|                                                  data_ZigZag.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

input string   data_Zig_Zag_IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII;
input int      ExtDepth=12;
input int      ExtDeviation=5;
input int      ExtBackstep =3;
input int n_zz=100;//n_zz =100; 
double pd_1,pd_2,pd_3,pd_4;
int pn_1,pn_2,pn_3,pn_4;
int zz_Handle;
double zz_buf[];
datetime time[];
string this_sym;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   this_sym=Symbol();
//+------------------------------------------------------------------+
//--- сохраним текущий символ графика для дальнейшей работы советника именно на этом символе
   zz_Handle=iCustom(this_sym,0,"Examples\\Zigzag",
                     ExtDepth,
                     ExtDeviation,
                     ExtBackstep
                     );
   Print(__FUNCTION__,"__LINE__",__LINE__," . . . . . ",
         "zz_Handle = ",zz_Handle,"  error = ",GetLastError());
//--- проверяем наличие хендла индикатора
   if(zz_Handle==INVALID_HANDLE)
     {
      //--- хендл не получен, выводим сообщение в лог об ошибке, завершаем работу с ошибкой
      Print(__FUNCTION__,"__LINE__",__LINE__," ----- ",
            "Не удалось получить хендл индикатора zz_Handle","  error = ",GetLastError());
      return(-1);
     }
//--- добавляем индикатор на ценовой график
   ChartIndicatorAdd(ChartID(),0,zz_Handle);
//--- устанавливаем индексацию для массива zz_buf как в таймсерии
   ArraySetAsSeries(zz_buf,true);
   ArraySetAsSeries(time,true);
//---

//+------------------------------------------------------------------+
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(zz_Handle);
   ArrayFree(zz_buf);
   ArrayFree(time);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//+------------------------------------------------------------------+
   int zz_copy=0;
//--- копируем данные из индикаторного массива в динамический массив 
   zz_copy=CopyBuffer(zz_Handle,0,0,n_zz,zz_buf);
//--- если есть ошибки, то выводим сообщение в лог об ошибке и выходим из функции
   if(zz_copy<0)
     {
      Print("Не удалось скопировать данные из индикаторного буфера zz_buf.  error = ",
            GetLastError()); return;
     }
//+------------------------------------------------------------------+
   pd_1 =0;
   pd_2 =0;
   pd_3 =0;
   pd_4 =0;
   pn_1 =0;
   pn_2 =0;
   pn_3 =0;
   pn_4 =0;

   int zz_q=ArraySize(zz_buf);
   int q=0;

   for(q=0; q<zz_q; q++)
     {
      if(zz_buf[q]!=0 && zz_buf[q]!=EMPTY_VALUE)
        {
              if(pd_1==0) { pn_1=q; pd_1=zz_buf[q]; }
         else if(pd_2==0) { pn_2=q; pd_2=zz_buf[q]; }
         else if(pd_3==0) { pn_3=q; pd_3=zz_buf[q]; }
         else if(pd_4==0) { pn_4=q; pd_4=zz_buf[q]; }
        }
      if(pn_4>0)break;
     }
//+------------------------------------------------------------------+
   CopyTime(this_sym,Period(),0,n_zz,time);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name1");
   string name1="name1";

   if(!ObjectCreate(0,name1,OBJ_ARROW_UP,0,time[pn_1],pd_1))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name1,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name2");
   string name2="name2";

   if(!ObjectCreate(0,name2,OBJ_ARROW_UP,0,time[pn_2],pd_2))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name2,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name3");
   string name3="name3";

   if(!ObjectCreate(0,name3,OBJ_ARROW_UP,0,time[pn_3],pd_3))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name3,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name4");
   string name4="name4";

   if(!ObjectCreate(0,name4,OBJ_ARROW_UP,0,time[pn_4],pd_4))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name4,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
///*
   if(pd_1!=0 && pd_2!=0 && pd_3!=0 && pd_4!=0)
      Alert(__FUNCTION__,"__LINE__",__LINE__,
            "   q =",q,
            "   pd_1 =",pd_1,
            "   pd_2 =",pd_2,
            "   pd_3 =",pd_3,
            "   pd_4 =",pd_4,

            "   pn_1 =",pn_1,
            "   pn_2 =",pn_2,
            "   pn_3 =",pn_3,
            "   pn_4 =",pn_4,
            "   TimeCurrent()=",TimeCurrent()
            );
//*/
//+------------------------------------------------------------------+
  }
//+------------------------------------------------------------------+
如何获得准确的数据?
Как получить значение индикатора ZigZag в точках...
Как получить значение индикатора ZigZag в точках...
  • 2006.04.09
  • www.mql5.com
Уважаемые гуру и другие адепты MQ4 Я прикрепил схемку. Это стандартный ZigZag...
 
你好。前天我开始学习MQL。


测试仪给出了这样的结果。


我想不出其中的奥妙。亲爱的专业人士请指点迷津,我将不胜感激。


 

问题 我能否在Metatrader 4中编写一个程序,在设定了止损和利润的情况下,一键开启2至250个我选择的头寸?这样我就不必每次都手动打开一个了

 
fxtz:

问题 我能否在Metatrader 4中编写一个程序,在设定了止损和利润的情况下,一键开启2至250个我选择的头寸?你不需要逐一打开

是的,你可以。但你在错误的地方问这个问题--在MT5上。

有几个关于MT4的新手的主题。

例如--这里

 
antonsinichkin:
你好。前天我开始学习MQL。


测试仪给出了这样的结果。


我想不明白的是,哪里有陷阱。尊敬的专业人士请给我指点迷津,我将非常感激。



在打印前将其翻译成字符串。或者解释什么是错的。
 
与本主题无关的评论已被移至 "MQL4 MT4 MetaTrader 4初学者的问题"。
 
下午好。在MT5最新更新到1604版本后,我的指标不再正常工作。我正在使用
所谓的 "液体 "指标。例如,我在一个窗口里有几个多期随机指标。好了,现在短的都画好了
和以前一样,稍长的只画几条,最长的则完全不画。

我的印象是,他们突然开始缺乏历史。你能告诉我可能出了什么问题吗?
 
我刚刚从mql4切换到mql5.我正在测试一个关于RTS指数的专家顾问,现在我有一个问题,它打开了几个交易,但打开交易的一个条件如下:如果(...OrdersTotal()==0)。为什么这个条件不起作用?如何才能只开一个仓位?
 
RogozaIV:
我刚刚从mql4切换到mql5.我正在测试一个关于RTS指数的专家顾问,现在我有以下问题:它打开了几个交易,但打开一个交易的条件之一被指定为:如果(...OrdersTotal()==0)。为什么这个条件不起作用?我怎样才能只开一个交易?
PositionsTotal()