Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1129
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Возможность есть в случае, если советник (или скрипт) находится в Вашем распоряжении с точки зрения взять и поправить исходный код. Нужно обложить все алерты условием с проверкой, нажата ли кнопка. Если не нажата, алерты не вызывать.
Спасибо Vladimir - думаю или вашем методом воспользуюсь либо весь советник вставлю в это условие.
Спасибо Vitalie Postolache - изучу вашу рекомендацию. В mql5 пока не вникал.
Появилась необходимость записать данные в hst файл, чтоб потом на основе этих данных построить автономный график.
Бьюсь второй день но ничего не получаеться.
Код:
#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'
Понимаю что- что то не так записала. Но как правильно записывать не знаю, мало информации. Кто знает - подскажите.
возможно поможет, выдержка из какого-то очень-очень старого проекта (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) реализация надписи справа вверху от линии по типу (если ордера закрыть по этой цене будет такой то результат по балансу, т.е уже нужно каждый тик менять отображение и также при перемещении линии, в целом аналог тп или сл при ручном размещении ордера, только плавающий и с возможностью ошибочных срабатываний изначально)
робот есть, кроме числовой метки уже все нарисовано, вопрос в правильном присвоении значений и обработке информации всей сетки.
1) если ордера неравномерного типа
Здравствуйте. Не пойму почему iTime иногда выдаёт неправильное время. На открытие новой свечи PERIOD_Н1 должно показаться время в журнале Print(iTime(NULL,PERIOD_M1,30)). В тестах всё правильно отображает, но в реале иногда время отличается даже на несколько часов. Почему так?
Используйте CopyTime, Я также заметил эту проблему при построении графических объектов, и CopyTime проблему решил
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
Используйте CopyTime, Я также заметил эту проблему при построении графических объектов, и CopyTime проблему решил
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
Впервые о таких слышу.
вот, на графике 5 знаков, а на индикаторе 4.
Как сделать чтобы на шкале моего индикатора было 5 знаков после запятой?
вот, на графике 5 знаков, а на индикаторе 4.