Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1129

 
Vladimir:
Возможность есть в случае, если советник (или скрипт) находится в Вашем распоряжении с точки зрения взять и поправить исходный код. Нужно обложить все алерты условием с проверкой, нажата ли кнопка. Если не нажата, алерты не вызывать.

  Спасибо Vladimir - думаю или вашем методом воспользуюсь либо весь советник вставлю в это условие.

  Спасибо Vitalie Postolache - изучу вашу рекомендацию. В 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 errors in '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));


сейчас по истечению многих лет глянул и не уверен что high/low должны быть именно в таком порядке, но проверьте чтобы у вас хотя-бы размеры структур сходились (заголовка и записей)
 

Всем привет, продолжаю дорабатывать то что уже есть

 Мы имеем неравномерную сетку ордеров и горизонтальную линию которая может быть в любом месте

нужно реализовать такое:

если у нас цена ниже линии закрыть все ордера

сложности заключаются в том что

1)  если ордера неравномерного типа и уже при выставлении линии кроется все что угодно,  а не тогда когда поставить разметить и установить (причем тогда еще надо какой то флаг вкл\откл)

2)  реализация надписи справа вверху от линии по типу (если ордера закрыть по этой цене будет такой то результат по балансу, т.е уже нужно каждый тик менять отображение и также при перемещении линии, в целом аналог тп или сл при ручном размещении ордера, только плавающий и с возможностью ошибочных срабатываний изначально)

 

 робот есть, кроме числовой метки уже все нарисовано, вопрос в правильном присвоении значений и обработке информации всей сетки.

Файлы:
USDCHFH1.png  26 kb
 
trader781:


1)  если ордера неравномерного типа 

Впервые о таких слышу.
 
Здравствуйте. Не пойму почему iTime иногда выдаёт неправильное время. На открытие новой свечи PERIOD_Н1 должно показаться время в журнале Print(iTime(NULL,PERIOD_M1,30)). В тестах всё правильно отображает, но в реале иногда время отличается даже на несколько часов. Почему так?
 
Nauris Zukas:
Здравствуйте. Не пойму почему iTime иногда выдаёт неправильное время. На открытие новой свечи PERIOD_Н1 должно показаться время в журнале 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());
Причина обращения: