В своем эксперте использую несколько пользовательских функций. Как можно сделать, чтобы эти функции обьединить в библиотеку, а в теле самого эксперта просто вызывать их оттуда.
Не знаком с синтаксисом языка в этом отношении.
Направьте пожалуйста на раздел документации или учебника. Не нашел там подобного.
Как написать функцию, которая проверяла есть или были открыты позы на нулевом баре (желателно чтобы был выбор таимфрейма. OpenPosLastBar(string sym="", int tf=0, int op=-1, int mn=-1), или эта функция то делает. Как я понял, то она толко открытые позы в данный момент, а если была открыта и уже закрыта, то вернет -1.
//+----------------------------------------------------------------------------+ //| Возвращает номер бара открытия последней позиции или -1. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarLastPos(string sym="", int tf=0, int op=-1, int mn=-1) { datetime oot; int i, k=OrdersTotal();
Нужно два цикла. В первом проходим по истории ордеров, во втором - по текущим ордерам. В обоих случаях если время открытия ордера больше или равно Time[0], то ордер был открыт на текущей свече. Это справедливо для всех таймфреймов.
drknn>>: Нужно два цикла. В первом проходим по истории ордеров, во втором - по текущим ордерам. В обоих случаях если время открытия ордера больше или равно Time[0], то ордер был открыт на текущей свече. Это справедливо для всех таймфреймов.
Спадибо, что аткликнулся. А можно попросить это в коде
Здравствуйте народ ! помогите разобратся в коде посли его сделок много мусора остаётся на графике стрелки кружки линии как их удалить или чтоб он сам удалял вот часть кода
Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.
Или вот функция, которая проверяет открывались ли позы на текущем баре (с проверкой по OrdersTotal() и OrdersHistoryTotal() ). Возвращает true если ордер Type открывался.
bool CheckExists(int Type)
{
bool Result = True;
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS))
if(OrderType() == Type && OrderMagicNumber() == Magic && OrderSymbol() == Symbol())
if(OrderOpenTime() >= Time[0])
Result = False;
for(i = 0; i < OrdersHistoryTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
if(OrderType() == Type && OrderOpenTime() >= Time[0]
&& OrderMagicNumber() == Magic && OrderSymbol() == Symbol())
Result = False;
}
return(Result);
}
Еще вопрос от начинающего.
В своем эксперте использую несколько пользовательских функций. Как можно сделать, чтобы эти функции обьединить в библиотеку, а в теле самого эксперта просто вызывать их оттуда.
Не знаком с синтаксисом языка в этом отношении.
Направьте пожалуйста на раздел документации или учебника. Не нашел там подобного.
https://book.mql4.com/ru/build/structure
https://www.mql5.com/ru/articles/1462
+ до кучи... https://book.mql4.com/ru/appendix/examples
Как написать функцию, которая проверяла есть или были открыты позы на нулевом баре (желателно чтобы был выбор таимфрейма. OpenPosLastBar(string sym="", int tf=0, int op=-1, int mn=-1), или эта функция то делает. Как я понял, то она толко открытые позы в данный момент, а если была открыта и уже закрыта, то вернет -1.
//+----------------------------------------------------------------------------+
//| Возвращает номер бара открытия последней позиции или -1. |
//| Параметры: |
//| sym - наименование инструмента ("" - текущий символ) |
//| tf - таймфрейм ( 0 - текущий таймфрейм) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
int NumberOfBarLastPos(string sym="", int tf=0, int op=-1, int mn=-1)
{
datetime oot;
int i, k=OrdersTotal();
if(sym=="")
sym=Symbol();
for(i=0; ik; i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==sym)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(op0 || OrderType()==op)
{
if(mn0 || OrderMagicNumber()==mn)
{
if(ootOrderOpenTime()) oot=OrderOpenTime();
}
}
}
}
}
}
return(iBarShift(sym, tf, oot, True));
}
//+----------------------------------------------------------------------------+
Нужно два цикла. В первом проходим по истории ордеров, во втором - по текущим ордерам. В обоих случаях если время открытия ордера больше или равно Time[0], то ордер был открыт на текущей свече. Это справедливо для всех таймфреймов.
Спадибо, что аткликнулся. А можно попросить это в коде
Спадибо, что аткликнулся. А можно попросить это в коде
Вот пример прохода по истории
Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.
ObjectDelete(a_name_0);
ObjectCreate(a_name_0, OBJ_ARROW, a_window_8, a_datetime_12, a_price_20);
ObjectSet(a_name_0, OBJPROP_ARROWCODE, ai_28);
ObjectSet(a_name_0, OBJPROP_COLOR, a_color_32);
ObjectSet(a_name_0, OBJPROP_WIDTH, a_width_36);
}
void _setabuy(string as_0) {
g_str_concat_356 = StringConcatenate(as_0, gi_120);
seta(g_str_concat_356, 0, TimeCurrent(), Bid + 15.0 * Point, SYMBOL_ARROWUP, Blue, 2);
gi_120++;
}
void _setasell(string as_0) {
g_str_concat_356 = StringConcatenate(as_0, gi_120);
seta(g_str_concat_356, 0, TimeCurrent(), Bid - 15.0 * Point, SYMBOL_ARROWDOWN, Red, 2);
gi_120++;
}
Вот пример прохода по истории
Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.
Спасибо. Попробую.
Вот пример прохода по истории
Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.
Или вот функция, которая проверяет открывались ли позы на текущем баре (с проверкой по OrdersTotal() и OrdersHistoryTotal() ). Возвращает true если ордер Type открывался.
Скажите пожалуйста, как реализовать условие.-
If( есть отложенные ордера) то делаем то и то ;