Yedelkin: Не могу сориентироваться, а где в Справочнике сказано, что при биржевом исполнении запрос не должен содержать TP/SL?
В справке я этого не помню. Но насколько мне известно это так. Правильней сказать SL/TP насколько я понимаю на бирже нужно ставить отдельными ордерами (имеющими определенный тип и спецификацию).
В принципе можно посмотреть на биржевых терминалах как точно, Грей боксе или скажем в Quik
PS
Это к примеру може быть связанно с законодательством. насколько мне известно по законодательству США стопы должны быть маркерованны определенным образом (и не как иначе).
За их неправильное исполнение накладывается определенные штрафные санкции. точней сказать не смогу, но те кто торговал на NYSE (или подобных биржах) думаю точно должны знать что и как.
Для получения в торговом советнике значений встроенного или пользовательского индикатора, необходимо предварительно создать его хендл с помощью соответствующей функции. На примерах показано, как воспользоваться тем или иным техническим индикатором при разработке своих программ. Речь идёт о индикаторах, которые непосредственно встроены в язык MQL5. Статья предназначена для начинающих разработчиков торговых стратегий и предлагает простые и ясные способы работы с индикаторами с использованием приложенной библиотеки функций.
Подскажите куда класть файл загружаемый советником. Пробовал в MQL5/Files. Тестер даёт ошибку 5004. Индюк сразу находит тот же файл в MQL5/Files. И что такое ошибка 5004?
Немного подробнее:
Файл с расширением .txt. Запрашивается таким образом
Подскажите куда класть файл загружаемый советником. Пробовал в MQL5/Files. Тестер даёт ошибку 5004.
Каждый тестер имеет свою файловую песочницу, файл с данными нужно размещать именно в песочнице тестера, это не очень удобно, поэтому лучше положить файл данных в общую папку всех терминалов, доступ к ней осуществляется через флаг FILE_COMMON.
К файлу, расположенному в общей папке, можно обращаться как из терминала, так и из тестера.
Открыть общую папку можно из MetaEditor - Файл - Открыть общую папку данных.
Каждый тестер имеет свою файловую песочницу, файл с данными нужно размещать именно в песочнице тестера, это не очень удобно, поэтому лучше положить файл данных в общую папку всех терминалов, доступ к ней осуществляется через флаг FILE_COMMON.
К файлу, расположенному в общей папке, можно обращаться как из терминала, так и из тестера.
Открыть общую папку можно из MetaEditor - Файл - Открыть общую папку данных.
Спасибо, загрузка через FILE_COMMON прошла успешно. Через песочницу тестера никак не получилось. Ну да ладно. Вообще-то разработчикам нужно было упростить этот процесс и позволить советникам брать файлы данных из той же папки откуда индюки их загружают. А также неплохо бы если можно было указывать путь к файлу в его имени.
gpwr: Через песочницу тестера никак не получилось.
Давно не проверял работу с файлами в локальной песочнице тестера. Но раньше, чтобы иметь доступ к файлу из тестера, надо было ставить на файл атрибут "только чтение", т.к. тестер перед запуском эксперта чистил свою песочницу.
#define RESET 0 // Константа для возврата терминалу команды на пересчет индикатора //+----------------------------------------------+ //| Входные параметры индикатора | //+----------------------------------------------+ input int Hour1=10; //Время 1 //+----------------------------------------------+ int StartBars; bool GoodTime; //---- объявление динамических массивов, которые будут //---- в дальнейшем использованы в качестве индикаторных буферов double TimeDataBuffer[]; // //+------------------------------------------------------------------+ //| класс для работы с датой | //+------------------------------------------------------------------+ class MyDateClass { private: int m_year; // год int m_month; // месяц int m_day; // день месяца int m_hour; // час в сутках int m_minute; // минуты int m_second; // секунды public: //--- конструктор по умолчанию MyDateClass(void); }; //+------------------------------------------------------------------+ //| конструктор по умолчанию | //+------------------------------------------------------------------+ MyDateClass::MyDateClass(void) { MqlDateTime dt; datetime DT=TimeCurrent(dt); TimeToStruct(DT,dt); m_hour=dt.hour; m_minute=dt.min; m_second=dt.sec; if (m_hour==Hour1 && m_minute==0) GoodTime=true; DT=StructToTime(dt); Print(DT); } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //---- инициализация глобальных переменных для сигнальных меток StartBars=7; //---- SetIndexBuffer(0,TimeDataBuffer,INDICATOR_DATA); ArraySetAsSeries(TimeDataBuffer,true); //--- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //---- проверка количества баров на достаточность для расчета if(rates_total<StartBars) return(RESET);
int limit,bar; //
//---- расчеты необходимого количества копируемых данных //---- и стартового номера limit для цикла пересчета баров if(prev_calculated>rates_total || prev_calculated<=0)// проверка на первый старт расчета индикатора limit=rates_total-StartBars; // стартовый номер для расчета всех баров else limit=rates_total-prev_calculated; // стартовый номер для расчета новых баров //---
//---- основной цикл расчета индикатора for(bar=0; bar<limit; bar++) { TimeDataBuffer[bar]=0.0;
if (GoodTime==true) TimeDataBuffer[bar]=2.0; } //--- return value of prev_calculated for next call //--- return(rates_total); }
Не могу сориентироваться, а где в Справочнике сказано, что при биржевом исполнении запрос не должен содержать TP/SL?
В справке я этого не помню. Но насколько мне известно это так. Правильней сказать SL/TP насколько я понимаю на бирже нужно ставить отдельными ордерами (имеющими определенный тип и спецификацию).
В принципе можно посмотреть на биржевых терминалах как точно, Грей боксе или скажем в Quik
PS
Это к примеру може быть связанно с законодательством. насколько мне известно по законодательству США стопы должны быть маркерованны определенным образом (и не как иначе).
За их неправильное исполнение накладывается определенные штрафные санкции. точней сказать не смогу, но те кто торговал на NYSE (или подобных биржах) думаю точно должны знать что и как.
Скажите пожалуйста, как взять значения всех линий iBands.
https://www.mql5.com/ru/articles/31
тут есть что-то полезное, но при компиляции редактор не нашел
"#include <GetIndicatorBuffers.mqh>"
Скажите пожалуйста, как взять значения всех линий iBands.
https://www.mql5.com/ru/articles/31
тут есть что-то полезное, но при компиляции редактор не нашел
"#include <GetIndicatorBuffers.mqh>"
Подскажите куда класть файл загружаемый советником. Пробовал в MQL5/Files. Тестер даёт ошибку 5004. Индюк сразу находит тот же файл в MQL5/Files. И что такое ошибка 5004?
Немного подробнее:
Файл с расширением .txt. Запрашивается таким образом
int filehandle=FileOpen(fname,FILE_READ|FILE_ANSI,"\n");
if(filehandle!=INVALID_HANDLE) Print("FileOpen: ",FileSize(filehandle)," bytes");
else Print("Operation FileOpen failed, error ",GetLastError());
Ошибка такая
2012.05.09 21:14:14 Core 01 2011.01.01 00:00:00 Operation FileOpen failed, error 5004
Файл лежит в папке MQL5/Files. 1000 раз проверил. К тому же индюк его загружает без проблем.
Build 642.
Подскажите куда класть файл загружаемый советником. Пробовал в MQL5/Files. Тестер даёт ошибку 5004.
К файлу, расположенному в общей папке, можно обращаться как из терминала, так и из тестера.
Открыть общую папку можно из MetaEditor - Файл - Открыть общую папку данных.
К файлу, расположенному в общей папке, можно обращаться как из терминала, так и из тестера.
Открыть общую папку можно из MetaEditor - Файл - Открыть общую папку данных.
Через песочницу тестера никак не получилось.
Здравствуйте!
Подскажите пожалуйста, что делать, чтобы на минутных графиках в нужный час рисовалась вертикальная линия. Мои попытки ни к чему не приводят:
//Вертикальные линии в определённое время
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
//+----------------------------------------------+
//| Параметры отрисовки изображения |
//+----------------------------------------------+
//---- отрисовка линии индикатора
#property indicator_type1 DRAW_HISTOGRAM
#property indicator_color1 Blue
#property indicator_width1 1
#property indicator_label1 "Time-line"
#define RESET 0 // Константа для возврата терминалу команды на пересчет индикатора
//+----------------------------------------------+
//| Входные параметры индикатора |
//+----------------------------------------------+
input int Hour1=10; //Время 1
//+----------------------------------------------+
int StartBars;
bool GoodTime;
//---- объявление динамических массивов, которые будут
//---- в дальнейшем использованы в качестве индикаторных буферов
double TimeDataBuffer[]; //
//+------------------------------------------------------------------+
//| класс для работы с датой |
//+------------------------------------------------------------------+
class MyDateClass
{
private:
int m_year; // год
int m_month; // месяц
int m_day; // день месяца
int m_hour; // час в сутках
int m_minute; // минуты
int m_second; // секунды
public:
//--- конструктор по умолчанию
MyDateClass(void);
};
//+------------------------------------------------------------------+
//| конструктор по умолчанию |
//+------------------------------------------------------------------+
MyDateClass::MyDateClass(void)
{
MqlDateTime dt;
datetime DT=TimeCurrent(dt);
TimeToStruct(DT,dt);
m_hour=dt.hour;
m_minute=dt.min;
m_second=dt.sec;
if (m_hour==Hour1 && m_minute==0) GoodTime=true;
DT=StructToTime(dt);
Print(DT);
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- инициализация глобальных переменных для сигнальных меток
StartBars=7;
//----
SetIndexBuffer(0,TimeDataBuffer,INDICATOR_DATA);
ArraySetAsSeries(TimeDataBuffer,true);
//---
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---- проверка количества баров на достаточность для расчета
if(rates_total<StartBars) return(RESET);
int limit,bar; //
//---- расчеты необходимого количества копируемых данных
//---- и стартового номера limit для цикла пересчета баров
if(prev_calculated>rates_total || prev_calculated<=0)// проверка на первый старт расчета индикатора
limit=rates_total-StartBars; // стартовый номер для расчета всех баров
else limit=rates_total-prev_calculated; // стартовый номер для расчета новых баров
//---
//---- основной цикл расчета индикатора
for(bar=0; bar<limit; bar++)
{
TimeDataBuffer[bar]=0.0;
if (GoodTime==true) TimeDataBuffer[bar]=2.0;
}
//--- return value of prev_calculated for next call
//---
return(rates_total);
}
Вот Вам код вертикальной линии: