任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1129

 
Vladimir:
有一种可能性,如果从采取和纠正源代码的角度来看,EA(或脚本)是由你支配的。你需要在所有警报周围设置一个条件,检查按钮是否被按下。如果不按下按钮,就不要拨打报警电话。

谢谢弗拉基米尔-- 我想我要么使用你的方法,要么把整个EA放在这个条件下。

感谢维塔利-波斯托拉奇--我将研究你的建议。我还没有研究过mql5。

 
miss.natasha:

我需要把数据写入一个hst文件,这样我就可以用这些数据来建立一个自治图。

我已经挣扎了两天,但没有任何效果。

代码。

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
ulong    last_fpos=0;         //
int      HandleHistory=-1;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string symbol=Symbol();
   int per=Period()*9;

   ResetLastError();
   if(CreateHeader()==true)//если создали заголовок
     {
      HandleHistory=FileOpenHistory(symbol+(string)per+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
      if(HandleHistory!=INVALID_HANDLE)
        {

         for(int i=199;i>0;i--)//заполняем данными
           {
            MqlRates r;
            r.time=Time[i];//просто пытаюсь записать, это так для примера
            r.open=Open[i];//просто пытаюсь записать, это так для примера
            r.low=Low[i];
            r.high=High[i];
            r.close=Close[i];
            r.tick_volume=(long)10;
            r.spread=0;
            r.real_volume=(long)10;
            uint byteswritten=FileWriteStruct(HandleHistory,r);
            Print("FileOpen OK ",byteswritten," ",Time[i]);
           }
       FileClose(HandleHistory);
       // FileFlush(HandleHistory);
        }
      else Print("Операция FileOpen неудачна, ошибка ",GetLastError());
     }
// long id=ChartOpen(symbol,per);
//Alert(id);
  }
//+------------------------------------------------------------------+
bool CreateHeader()//создаем файл с историей hst(заголовок)
  {

   int      file_version=401;
   string   c_copyright;
   string   c_symbol=Symbol();
   int i_period=Period()*9;
   int      i_digits=Digits;
   int      i_unused[13];
//---  
   ResetLastError();
   HandleHistory=FileOpenHistory(c_symbol+(string)i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
   if(HandleHistory<0)
     {
      Print("Error open ",c_symbol+(string)i_period,".hst file ",GetLastError());
      return(false);
     }
   c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
   ArrayInitialize(i_unused,0);
//--- write history file header
   FileWriteInteger(HandleHistory,file_version,LONG_VALUE);
   FileWriteString(HandleHistory,c_copyright,64);
   FileWriteString(HandleHistory,c_symbol,12);
   FileWriteInteger(HandleHistory,i_period,LONG_VALUE);
   FileWriteInteger(HandleHistory,i_digits,LONG_VALUE);
   FileWriteInteger(HandleHistory,0,LONG_VALUE);
   FileWriteInteger(HandleHistory,0,LONG_VALUE);
   FileWriteArray(HandleHistory,i_unused,0,13);
   return(true);
  }

执行的结果是创建了一个带有历史记录的文件,但没有创建自主图。

以下是图表上的信息

由于某些原因,这些数据是2003年的!

结果,当我启动图表时,我得到一个错误HistoryBase: 196个错误在'NZDCHF45'。

我明白,我写错了什么。我不知道如何正确写,我的资料太少了。谁知道呢--请告知。


我不记得MQ正式开放了.hst文件结构(如果他们有,请查看官方规格)。

也许这是一个非常、非常老的项目的摘录(C,gcc)。


/* .hst file header
*/
struct HstHeader {
    uint32_t    version;        // +0 4 LE  : database version
    char        copyright[64];  // +4 64    : copyright data
    char        symbol[12];     // +68 12   : symbol (EURUSD..)
    uint32_t    period;         // +80 4 LE : timeframe (sec. in period)
    uint32_t    digits;         // +84 4 LE : decimals after .
    datetime    timesign;       // +88 4 LE : creation time sign.
    datetime    last_sync;      // +92 4 LE : last sync. timestamp
    uint8_t     unused[52];     // +96 52   : reserved for feauture use
                                // total 148 bytes, packed, aligned by 1
};

/* .hst bar array (file payload)
*/
// when HstHeader.version==400
struct HstRates400 {
    datetime    ctm;            // +0 4 LE  : start (creation) time
    double      open;           // +4 8 LE  : open price
    double      low;            // +12 8 LE : lowest price
    double      high;           // +20 8 LE : highst price
    double      close;          // +28 8 LE : close price
    double      volume;         // +36 8 LE : volume (nr of ticks)
                                // total 44 bytes,packed, aligned by 1
} __attribute__((packed));

// when HstHeader.version==401

struct HstRates401 {
    datetime    ctm;            // +0 8 LE  : bar start time (with ms?)
    double      open;           // +8 8 LE  : open price
    double      low;            // +16 8 LE : lowest price
    double      high;           // +24 8 LE : highst price
    double      close;          // +32 8 LE : close price
    uint64_t    volume;         // +40 8 LE : volume (nr of ticks)
    uint32_t    spread;         // +48 4 LE : spread
    long        real_volume;    // +52 8 LE : real volume
                                // total 60 bytes,packed,aligned by 1
} __attribute__((packed));


现在,过了很多年,我不确定高/低是否应该按这个顺序,但请检查你的结构 至少是相同大小 的(头和记录)。
 

大家好,只是继续完善我们已经有的东西

我们有一个不规则的订单网格和一条水平线,它可以在任何地方

我们需要落实这一点。

如果价格低于该线,则关闭所有订单

困难有以下几点

1)如果订单是非统一类型的,并且在设置线的时候已经完成了一切,而不是在我们打上标记和设置线的时候(在这种情况下,我们也应该设置开/关标志)。

2) 按类型在线的右上方实施铭文(如果订单在这个价格被关闭,结果对余额来说是一样的,也就是说,我们必须改变每一个刻度的显示,在移动线的时候也是如此;如果是手动下单,它一般类似于拖曳止损或sl,只是浮动的,最初有可能出现错误的触发)

机器人就在那里,除了数字标记外,一切都已经画好了,问题在于正确地分配数值和对整个网格进行信息处理。

附加的文件:
USDCHFH1.png  26 kb
 
trader781:


1)如果订单是不规则的类型

这是我第一次听说他们。
 
你好。我不明白为什么iTime有时会显示错误的时间。在打开一个新的蜡烛时,PERIOD_H1应该在Print(iTime(NULL,PERIOD_M1,30))日志中显示时间。在测试中,它能正确显示一切,但在现实中,时间有时甚至相差几个小时。为什么会这样呢?
 
Nauris Zukas:
你好。我不明白为什么iTime有时会给出错误的时间。新蜡烛的开盘PERIOD_H1应该在日志中显示时间 Print(iTime(NULL,PERIOD_M1,30))。在测试中,它能正确显示一切,但在现实中,时间有时甚至相差几个小时。为什么会这样呢?

使用CopyTime,我在构建图形对象时也注意到这个问题,CopyTime 解决了这个问题

datetime TM[];
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
 
Vitaly Muzichenko:

使用CopyTime,我在构建图形对象时也注意到这个问题,CopyTime 解决了这个问题

datetime TM[];
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
谢谢你!
 
Evgeny Belyaev:
这是我第一次听说他们。
我只需要一个浮动的取值,它与一个物体相联系。
 
如何使我的指标的刻度显示小数点后5位?

这里,图表有5位数字,指标有4位。
 
igrok333:
如何使我的指标的刻度显示小数点后5位?

这里,图表有5位数字,指标有4位。
IndicatorSetInteger(INDICATOR_DIGITS,Digits());