т.е. функция в эксперте сработает без прихода тиков
Вопрос не об этом. Вопрос в том, как сделать чтоб при включении эксперт начинал работать, в тч торговать, если время торговое, не дожидаясь нового тика.
Вопрос не об этом. Вопрос в том, как сделать чтоб при включении эксперт начинал работать, в тч торговать, если время торговое, не дожидаясь нового тика.
Эксперт обрабатывает события. Если Вы не хотите дожидаться события NewTick#, которое обрабатывается функциейOnTick, есть возможность используя функцию
bool EventSetTimer( intseconds// количество секунд );
генерировать события оттаймерас указанной периодичностью, событие Timer# обрабатывается функцией OnTimer(). Эксперт у вас будет работать постоянно(с некой периодичностью) не дожидаясь тиков, а что уж он будет при этом делать, решать вам.
Сразу же после того, как клиентский терминал загрузит программу (эксперт или пользовательский индикатор) и запустит процесс инициализации глобальных переменных, будет послано событие Init, которое обрабатывается функцией OnInit(), если она есть. Это событие также генерируется после смены финансового инструмента и/или периода графика, после...
Добрый день. По мотивам урока "Использование структур для повышения эффективности разработки программ"воодушевился применением функции внутри структуры и создал вот такую простейшую конструкцию в МТ5.
#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//+------------------------------------------------------------------+#include <Trade\PositionInfo.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\AccountInfo.mqh>
#include <Trade\DealInfo.mqh>
#include <Expert\Money\MoneyFixedMargin.mqh>
CPositionInfo m_position;// object of CPositionInfo class
COrderInfo m_order; // object of COrderInfo class
CTrade m_trade; // object of CTrade class
CSymbolInfo m_symbol; // object of CSymbolInfo class
CAccountInfo m_account; // object of CAccountInfo class
CDealInfo m_deal; // object of CDealInfo class
CMoneyFixedMargin *m_money; // object of CMoneyFixedMargin class//+------------------------------------------------------------------+//| Structure Positions |//+------------------------------------------------------------------+structSTRUCT_POSITION
{
ENUM_POSITION_TYPE type; // тип позицииulong ticket; // тикет позицииlong identifier; // идентификаторlong magic; // магический номерdouble volume; // объем позицииdouble open_price; // цена открытияdatetime open_time; // время открытияdouble profit; // профит позицииdouble comission; // комиссияdouble swap; // свопstring comment; // комментарийvoidGetCurrentPositionProperty();
};
STRUCT_POSITION StrPositionArray[];
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---STRUCT_POSITION.GetCurrentPositionProperty();
}
//+------------------------------------------------------------------+//---Заполнение массива свойств позиций +//+------------------------------------------------------------------+voidSTRUCT_POSITION::GetCurrentPositionProperty(void)
{
ZeroMemory(this);
int pos_total = PositionsTotal();
ArrayResize(StrPositionArray,pos_total,1000);
for(int i=0; i<pos_total; i++)
{
if(m_position.SelectByIndex(i))
{
StrPositionArray[i].ticket = m_position.Ticket(); // тикет позиции
StrPositionArray[i].identifier = m_position.Identifier(); // идентификатор
StrPositionArray[i].magic = m_position.Magic(); // магический номер
StrPositionArray[i].comment = m_position.Comment(); // комментарий
StrPositionArray[i].type =(ENUM_POSITION_TYPE)m_position.PositionType();// тип позиции
StrPositionArray[i].volume = m_position.Volume(); // объем позиции
StrPositionArray[i].open_price = m_position.PriceOpen(); // цена открытия
StrPositionArray[i].open_time = m_position.Time(); // время открытия
StrPositionArray[i].profit = m_position.Profit(); // профит позиции
StrPositionArray[i].comission = m_position.Commission(); // комиссия
StrPositionArray[i].swap = m_position.Swap(); // своп
}
}
}
//+------------------------------------------------------------------+
В структуре
STRUCT_POSITION
присутствует метод
GetCurrentPositionProperty(void)
который рассчитывает и присваивает значения элементам структуры. Определяем тело метода вне структуры. Для этого используем операцию разрешения контекста (::).
Что за строка 69 19? Опубликуйте строку кода 69 и укажите где 19 позиция. Сразу станет ясно где ошибка.
Это точка, которая должна давать доступ к функции, которая в свою очередь использует контекст структурыю Это то что я понял из учебников. Но почему это не работает понять не могу.
Любая программа оперирует данными. Данные могут быть различных типов в зависимости от назначения. Например, для доступа к элементам массива используются данные целочисленного типа. Ценовые данные имеют тип двойной точности с плавающей точкой. Это связано с тем, что в языке MQL5 не предусмотрено специального типа для ценовых данных. Данные...
Это точка, которая должна давать доступ к функции, которая в свою очередь использует контекст структурыю Это то что я понял из учебников. Но почему это не работает понять не могу.
Код: (просто вызывается функция - функция советника, а не метод структуры - так понятнее)
//+------------------------------------------------------------------+//| ProjectName |//| Copyright 2020, CompanyName |//| http://www.companyname.net |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//---#include <Trade\PositionInfo.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\AccountInfo.mqh>
#include <Trade\DealInfo.mqh>
#include <Expert\Money\MoneyFixedMargin.mqh>
//---
CPositionInfo m_position;// object of CPositionInfo class
COrderInfo m_order; // object of COrderInfo class
CTrade m_trade; // object of CTrade class
CSymbolInfo m_symbol; // object of CSymbolInfo class
CAccountInfo m_account; // object of CAccountInfo class
CDealInfo m_deal; // object of CDealInfo class
CMoneyFixedMargin *m_money; // object of CMoneyFixedMargin class//+------------------------------------------------------------------+//| Structure Positions |//+------------------------------------------------------------------+struct STRUCT_POSITION
{
ENUM_POSITION_TYPE type; // тип позицииulong ticket; // тикет позицииlong identifier; // идентификаторlong magic; // магический номерdouble volume; // объем позицииdouble open_price; // цена открытияdatetime open_time; // время открытияdouble profit; // профит позицииdouble comission; // комиссияdouble swap; // свопstring comment; // комментарийvoid GetCurrentPositionProperty();
};
STRUCT_POSITION StrPositionArray[];
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---
GetCurrentPositionProperty();
}
//+------------------------------------------------------------------+//| Заполнение массива свойств позиций |//+------------------------------------------------------------------+void GetCurrentPositionProperty(void)
{
int pos_total = PositionsTotal();
ArrayResize(StrPositionArray,pos_total,1000);
for(int i=0; i<pos_total; i++)
{
if(m_position.SelectByIndex(i))
{
StrPositionArray[i].ticket = m_position.Ticket(); // тикет позиции
StrPositionArray[i].identifier = m_position.Identifier(); // идентификатор
StrPositionArray[i].magic = m_position.Magic(); // магический номер
StrPositionArray[i].comment = m_position.Comment(); // комментарий
StrPositionArray[i].type =(ENUM_POSITION_TYPE)m_position.PositionType();// тип позиции
StrPositionArray[i].volume = m_position.Volume(); // объем позиции
StrPositionArray[i].open_price = m_position.PriceOpen(); // цена открытия
StrPositionArray[i].open_time = m_position.Time(); // время открытия
StrPositionArray[i].profit = m_position.Profit(); // профит позиции
StrPositionArray[i].comission = m_position.Commission(); // комиссия
StrPositionArray[i].swap = m_position.Swap(); // своп
}
}
}
//+------------------------------------------------------------------+
Здравствуйте. Подскажите, пожалста.
Как проверить является ли время торговым или нет?
(чтоб сделать чтоб советник начинал работать сразу, не дожидаясь первого тика)
Здравствуйте. Подскажите, пожалста.
Как проверить является ли время торговым или нет?
(чтоб сделать чтоб советник начинал работать сразу, не дожидаясь первого тика)
OnTimer()
только какие бидаски в ордера будете ставить?)
https://www.mql5.com/ru/docs/event_handlers/ontimer
OnTimer()
только какие бидаски в ордера будете ставить?)
https://www.mql5.com/ru/docs/event_handlers/ontimer
Вопрос не об этом. Вопрос в том, как сделать чтоб при включении эксперт начинал работать, в тч торговать, если время торговое, не дожидаясь нового тика.
Вопрос не об этом. Вопрос в том, как сделать чтоб при включении эксперт начинал работать, в тч торговать, если время торговое, не дожидаясь нового тика.
Эксперт обрабатывает события. Если Вы не хотите дожидаться события NewTick#, которое обрабатывается функцией OnTick, есть возможность используя функцию
bool EventSetTimer(int seconds // количество секунд
);
генерировать события от таймера с указанной периодичностью, событие Timer# обрабатывается функцией OnTimer(). Эксперт у вас будет работать постоянно(с некой периодичностью) не дожидаясь тиков, а что уж он будет при этом делать, решать вам.
В структуре
STRUCT_POSITION
присутствует метод
GetCurrentPositionProperty(void)
который рассчитывает и присваивает значения элементам структуры. Определяем тело метода вне структуры. Для этого используем операцию разрешения контекста (::).
В OnTick() вызываем фунцию:
void OnTick() { //--- STRUCT_POSITION.GetCurrentPositionProperty(); }
И получаем ошибку:
'.' - name expected eSower_and_Gather_5.mq5 69 19
Где накосячено не понимаю, помогите плиз.
'.' - name expected eSower_and_Gather_5.mq5 69 19
Что за строка 69 19? Опубликуйте строку кода 69 и укажите где 19 позиция. Сразу станет ясно где ошибка.
Что за строка 69 19? Опубликуйте строку кода 69 и укажите где 19 позиция. Сразу станет ясно где ошибка.
STRUCT_POSITION.GetCurrentPositionProperty();в посте выше она выделена красным. Спасибо за оперативный ответ.
Что за строка 69 19? Опубликуйте строку кода 69 и укажите где 19 позиция. Сразу станет ясно где ошибка.
Это точка, которая должна давать доступ к функции, которая в свою очередь использует контекст структурыю Это то что я понял из учебников. Но почему это не работает понять не могу.
в посте выше она выделена красным. Спасибо за оперативный ответ.
'STRUCT_POSITION' - это ТИП ДАННЫХ. Вам нужно создать переменную с этим типом и потом вызывать ПЕРЕМЕННАЯ.GetCurrentPositionProperty();
Это точка, которая должна давать доступ к функции, которая в свою очередь использует контекст структурыю Это то что я понял из учебников. Но почему это не работает понять не могу.
Код: (просто вызывается функция - функция советника, а не метод структуры - так понятнее)