Здравствуйте! С чего начать, что бы советник после взятия профита больше не открывал позиции в текущем дне. Какую функцию использовать? Только начал учиться писать советники.
Обучение языку MQL4 под MetaTrader 4📌
От xbms, 13 апреля, 2013 в Уголок Программиста
Здравствуйте! С чего начать, что бы советник после взятия профита больше не открывал позиции в текущем дне. Какую функцию использовать? Только начал учиться писать советники.
/ugolok-programmista/13/obuchenie-yazyku-mql4-pod-metatrader-4/4034/?do=findComment&comment=229399
где Period() это временной интервал, равный размеру текущей свечи. Можно указать хоть день, хоть год
Подскажите в каких случаях в советниках на MQL4 используется False, FALSE, True, TRUE? Сейчас копаюсь в коде одного советника. Я думал что язык чувствителен к регистру. Но компилятор не ругается. То есть вот эти значения присвоены булевым переменным и они же подсвечены синим цветом
К регистру чувствительны имена переменных, значения FALSE и false равнозначны.
Добрый день уважаемые программисты!! Подскажите, как закрывать несработавшие отложки по истечении когото времени...копаюсь в готовой сове, хочу врезать туда отложки, но как их удалять...???
OrderDelete();
Добрый день уважаемые программисты!! Подскажите, как закрывать несработавшие отложки по истечении когото времени...копаюсь в готовой сове, хочу врезать туда отложки, но как их удалять...???
Допустим, у меня есть ф-ция CloseBuy() ... я могу просто добавить условие, по которому будут удаляться отложка, и поменять OrderClose на OrderDelete???
void CloseBuy()
{
for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol())
{
if (OrderMagicNumber() == Magic && OrderType() == OP_BUYSTOP)
{
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Green);
}
}
}
}
уважаемый Oll, прошу помощи... в общем написал функцию, но она не пашет...
if(условие)
{
OpenBuyOrder(); // открываем ордер на покупку
expiration = TimeCurrent() + 60*LifeTimeMinutes;
}
void DeleteOrderSell()
{
for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol())
{
if (OrderMagicNumber() == Magic && OrderType() == OP_SELLSTOP)
{
int time = TimeCurrent();
if(expiration {
OrderDelete(OrderTicket(), Green);
}
}
}
}
}
Других замечаний нет. По коду не видно где она запускается...
Подскажите как на MQL5 для пользовательской функции передать данные типа enum? Например функция GetLastLot (int ltpop, int y, double x, ) через переменную ltpop хочу передать тип ордера (ORDER_TYPE_BUY или ORDER_TYPE_SELL....)
я даже не знаю как её (эту переменную ltpop)в пользовательской функции объявить. В данном случае компилятор ругается - 'ltpop' - cannot convert enum.
Подскажите как на MQL5 для пользовательской функции передать данные типа enum? Например функция GetLastLot (int ltpop, int y, double x, ) через переменную ltpop хочу передать тип ордера (ORDER_TYPE_BUY или ORDER_TYPE_SELL....)
я даже не знаю как её (эту переменную ltpop)в пользовательской функции объявить. В данном случае компилятор ругается - 'ltpop' - cannot convert enum.
Читать здесь
Объявлять так:
ENUM_ORDER_TYPE ltpop
Передать в функцию, можно так:
bool f_OrderSend ( ENUM_ORDER_TYPE ltpop, double lot, ....,...,....,... )
{
// ... здесь код функции
}
Друзья, здравствуйте :) !!! Помогите, пожалуйста, как определить максимальный фрактал из всех, за последние 50 баров??? Заранее, благодарю.
По количеству свеч до и после или по количеству пунктов между пред и след. фракталом?
Друзья, здравствуйте :) !!! Помогите, пожалуйста, как определить максимальный фрактал из всех, за последние 50 баров???
По количеству свеч до и после или по количеству пунктов между пред и след. фракталом?
Друзья, здравствуйте :) !!! Помогите, пожалуйста, как определить максимальный фрактал из всех, за последние 50 баров???
нет, проблема вот в чем: за период в 50 последних свечей, необходимо определить какой фрактал из всех сформированных имеет максимальную цену.
Sany2912 - подумайте, ведь локальный максимум обязательно принадлежит фракталу! нафиг перебирать фракталы - ищи максимум и всё. с помощью ф-ции: double H50 = High [ iHighest ( NULL, 0, MODE_HIGH, 50, 1 ) ];
да, но цель именно в переборе фракталов! потому что будут нужны и фракталы, которые есть между локальными максимумами. Вы знаете этот способ перебора фракталов?
Уважаемые знатоки MQL начинаю программировать и не получается у меня связать индикатор с разрабатываемым советником. :-s Помогите пожалуйста, в долгу не останусь.
Kiman выложите индюк, а я дам Вам строку подключения (получения данных из буфера)
Sany2912 создаётся массив куда пишутся данные фракталов. в 1 размерность пишется цена хая и после заполнения массива сортируется по цене. В итоге Вы получаете данные всех фракталов за период в отсортированном по цене виде.
0ll, можно хотя бы маленький кусочек кода, как заполнить массив данными фракталов? Пожалуйста... :-s
Добавлено: 25-09-2015 10:02:11
0ll, можно хотя бы маленький кусочек кода, как заполнить массив данными фракталов? Пожалуйста... :-s
Изменено 25 сентября, 2015 пользователем Sany2912
А какие данные нужны-то?
0ll, можно хотя бы маленький кусочек кода, как заполнить массив данными фракталов? Пожалуйста... :-s
В общем картина такая:
- объявляете массив double arFR[15][2]; // 15 - предполагаемый максимум фракталов в диапазоне, если бар=50, а фрактал = 3 барам, то 50 / 3 = 17 - максимум. [2] - это поля для данных фрактала 1- цена, 2 - время (например) и т.д. кстати время надо привести к типу дабл.
- заполняете массив там, где ищите фракталы в неком цикле.
- после цикла поиска сортируете в любом порядке. Я предпочитаю по убыванию - тогда нули незаполненных ячеек массива будут в конце.
В общем картина такая:
- объявляете массив double arFR[15][2]; // 15 - предполагаемый максимум фракталов в диапазоне, если бар=50, а фрактал = 3 барам, то 50 / 3 = 17 - максимум. [2] - это поля для данных фрактала 1- цена, 2 - время (например) и т.д. кстати время надо привести к типу дабл.
- заполняете массив там, где ищите фракталы в неком цикле.
- после цикла поиска сортируете в любом порядке. Я предпочитаю по убыванию - тогда нули незаполненных ячеек массива будут в конце.
Oll, спасибо за ответ! Только он мне совсем не понятен ~x( . Я могу найти только ближайший фрактал, но у меня так и не получается сравнить: какой же из них имеет максимальную цену?! Помогите, пожалуйста разобраться... Отправляю код.
Добавлено: 28-09-2015 12:50:48
Oll, я смог разобраться!!! Только вот теперь не могу понять, почему переменная "min" обнуляется?
for(int n = 0; n {
if(iFractals(NULL, 0, MODE_UPPER, n) != NULL) fractal_up = n + 1;//индекс бара ближайшего фрактала up
if(iFractals(NULL, 0, MODE_LOWER, n) != NULL) fractal_low = n + 1;
}
for(int i = 0; i {
price_up = iHigh(NULL, 0, fractal_up - i);
price_low = iLow(NULL, 0, fractal_low - i);//заполнение массива мин.ценами
}
int index_max_price = ArrayMaximum(price_up, WHOLE_ARRAY, 0);
int index_min_price = ArrayMinimum(price_low, WHOLE_ARRAY, 0);
double max = price_up[index_max_price];
double min = price_low[index_min_price];//присвоение переменной мин.цену
Comment("max: ", max, ", min: ", min);//в комментариях переменная min иногда равна нулю, из за чего?
Изменено 28 сентября, 2015 пользователем Sany2912
Можно решить проблему в лоб, без массива, если анализ максимума делать в цикле поиска фрактала, типа:
- нашли фрактал
- сравниваем его хай с максимальным хаем, если больше, то пишем в макс., иначе следующий.
Здравствуйте, уважаемые программисты! Помогите советом как написать код, что бы отложенные ордера удалялись по одному, последовательно? Например, есть три отложенных ордера, при появлении четвертого, самый первый должен удалиться, при появлении пятого, удаляется второй и т.д...
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем