Ваши вопросы по языку MQL4

edvinascavadimasca

Интересующийся
привет
у меня такая проблема\ я написал советника работающий по гистограме индикатора\ как мне написать код чтобы он откпывал одну сделку допустим в бай и после етого не отрывал снова в бай а дождался сигнала села и отрыл бы селл\ а то он после того как закрывает один ордер\тогда и же открывает в том же направление\ мне не надо так
помогите пож
 

saas

Прохожий
Кто-нибудь, помогите вставить в советник время торговли в часах, например с 8 утра до 20 вечера.
в mql4 особо не шарю, можно подробный код.
 

saas

Прохожий
И ещё просьба, взял такой код для перевода в безубыток:

void BU()
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS))
{
if(OrderType()==OP_BUY)
{
if(OrderOpenPrice()<=(Bid-BULevel)&&OrderOpenPrice()>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green);
}
}

if(OrderType() == OP_SELL)
{
if(OrderOpenPrice()>=(Ask+BULevel)&&OrderOpenPrice()<OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Red);
}
}
}
}
}

ругается: return value of "OrderModify" should be checked

Что надо исправить или добавить?
 

Viko2000

Почетный гражданин
Кто-нибудь, помогите вставить в советник время торговли в часах, например с 8 утра до 20 вечера.
в mql4 особо не шарю, можно подробный код.

Самое простое.:)

extern string V_R = "Время работы";
extern bool use_work_time = true;
extern int Start = 0;
extern int Stop = 24;



//////////////////////////////////////////
int start()
{
//фильтр время
if(use_work_time)
{
if(Start>Stop)
{
if(Hour()>=Stop && Hour()<Start) return;
}

if(Start<Stop)
{
if(Hour()<Start || Hour()>=Stop) return;
}
}

return(0);
}
 
  • Like
Реакции: saas

gush

бродяга
всем привет. Собираю очень интересные идеи алгоритма восстановления закрытых ордеров по ТП/СЛ.
Сова уже такая есть в наличии, прикрепляю к сообщению..
Этот сов отлично справляется с моей задачей.
Как только закрывается любой ордер по тп или сл, сов мгновенно, во время закрытия ставит отложку с тем же лотом, по той же цене и с теми же тп/сл..
Но! Если цена скользнула и ордер закрылся не по тп/сл, а чуть выше/ниже.. сов теряет этот ордер..
Посоветуйте! Что можно с этим сделать! Нужен четкий алгоритм восстановления всех-любых ордеров, которые закрываются.
Может есть возможность внести другой алгоритм.. например, восстанавливать тогда абсолютно все закрытые ордера из истории? Посоветуйте, кто, чем может... спасибо!

RoboMaks!
И все же, посмотри сову воскрешения закрытых ордеров.
Можно реализовать в коде восстанавливать все закрытые ордера, абсолютно все по их ценам открытия, с теми же лотами и теми же тп/сл ????
Неважно как ордер закрылся, скользнула шпиля, прочее.. главное закрылся, значит нужно его восскрешить!
Закрыли руками открытый - всеравно восстановить!!!
Кроме отложек! Они мешать будут, в смысле, если отложку удалили (несработавшую-любую) их не хотелось бы воскрешать))) Реально???? Будут погрешности???
 

AlexeyVik

Программист mql4 mql5
RoboMaks!
И все же, посмотри сову воскрешения закрытых ордеров.
Можно реализовать в коде восстанавливать все закрытые ордера, абсолютно все по их ценам открытия, с теми же лотами и теми же тп/сл ????
Неважно как ордер закрылся, скользнула шпиля, прочее.. главное закрылся, значит нужно его восскрешить!
Закрыли руками открытый - всеравно восстановить!!!
Кроме отложек! Они мешать будут, в смысле, если отложку удалили (несработавшую-любую) их не хотелось бы воскрешать))) Реально???? Будут погрешности???
А чем тебе не понравился мой совет?
Попробуй сделать не точное совпадение цены закрытия и тейка\стопа, а разницу с допустимым диапазоном.
Или при несовпадении этих цен прочти комментарий к ордеру и найди там [tp] или [sl] если есть то ордер нужный.

Чуть посложней вариант, тикеты всех открытых ордеров заноси в массив и перебирая его проверяй на OrderCloseTime() > 0 так легко определяется закрыт-ли ордер и по тейку или стопу, или даже если руками закрыт.
В выходной посмотрю в другом компе, может там есть такой кусок кода, кажется писал кому-то.
 

gush

бродяга
А чем тебе не понравился мой совет?


Чуть посложней вариант, тикеты всех открытых ордеров заноси в массив и перебирая его проверяй на OrderCloseTime() > 0 так легко определяется закрыт-ли ордер и по тейку или стопу, или даже если руками закрыт.
В выходной посмотрю в другом компе, может там есть такой кусок кода, кажется писал кому-то.

мне любой вариант нужен, безотказно рабочий. Восстанавливать закрытые позы. Этим алгоритмом и скальпы и пипсотню можно снимать, и любую сетку руками поставить как нужно.. дальше не трудно догадаться)

А по времени запуска бота можно приспособить? В смысле при запуске совы, - не восстанавливать те ордера которые уже закрыты в истории до начала работы совы, а мониторить только те которые начнут закрываться.. но вот если инет отрубится.. или связь с серваком пропадет.. да лучше все ордера воскрешать! И не париться! По тп/сл закрылся или руками закрыт, этот алгоритм правильней..

А я Алексей программирование это не могу освоить, видимо не каждому это дано. Если бы я только это умел, я бы жил в этих ветках помогая другим :D
когда я пытаюсь изучить mql4, я примерно выгляжу вот так:
 

Вложения

  • 31996.jpg
    31996.jpg
    35,8 КБ · Просмотры: 14

AlexeyVik

Программист mql4 mql5
мне любой вариант нужен, безотказно рабочий. Восстанавливать закрытые позы. Этим алгоритмом и скальпы и пипсотню можно снимать, и любую сетку руками поставить как нужно.. дальше не трудно догадаться)

А по времени запуска бота можно приспособить? В смысле при запуске совы, - не восстанавливать те ордера которые уже закрыты в истории до начала работы совы, а мониторить только те которые начнут закрываться.. но вот если инет отрубится.. или связь с серваком пропадет.. да лучше все ордера воскрешать! И не париться! По тп/сл закрылся или руками закрыт, этот алгоритм правильней..

А я Алексей программирование это не могу освоить, видимо не каждому это дано. Если бы я только это умел, я бы жил в этих ветках помогая другим :D
когда я пытаюсь изучить mql4, я примерно выгляжу вот так:
Ну, я вспомнил где и кому писал похожий код. Вот здесь http://forexsystemsru.com/skripty/65219-poisk-skriptov-35.html#post1052021 и по твоей просьбе правил.
Бери и правь под свои нужды. Там после определения, что ордер закрыт закрывает все остальные, а тебе надо всего-лишь заменить закрытие на определение параметров этого закрытого ордера и открытие нового по той-же цене и с теми-же ТП и СЛ.
 

RoboMaks

Элитный участник
А чем тебе не понравился мой совет?
...Или при несовпадении этих цен прочти комментарий к ордеру и найди там [tp] или [sl] если есть то ордер нужный.

Проблемка в том, AlexeyVik, что по этим комментам сов не сможет определить этот ордер. Если там в истории есть ордера с заданными комментами - да, их определить можно, но присвоенный терминалом [sl] - [tp] не определяется функцией OrderComment(). Поэтому нет смысла усложнять сову (массивами, лишней памятью и др.) , делать проще, закрыт - восстановить по цене открытия.
 
  • Like
Реакции: gush

AlexeyVik

Программист mql4 mql5
Проблемка в том, AlexeyVik, что по этим комментам сов не сможет определить этот ордер. Если там в истории есть ордера с заданными комментами - да, их определить можно, но присвоенный терминалом [sl] - [tp] не определяется функцией OrderComment(). Поэтому нет смысла усложнять сову (массивами, лишней памятью и др.) , делать проще, закрыт - восстановить по цене открытия.
Совершенно верно. Потому что определяется функцией StringFind(OrderComment(), "[tp]", 0) -http://docs.mql4.com/ru/strings/stringfind Если результат выполнения поиска >= 0 то ордер закрыт по тейку.
Что касается загруженности памяти, то ты просто зря беспокоишься. Современные компы имеют многократный запас памяти для таких задач как массив из 10-100 элементов и даже 10000. Я писал сов в котором открытых ордеров доходило до 5000.
Я прекрасно помню DOS и Win11. Вот в те времена память надо было экономить... Мне однажды сказали что много я хочу, когда я запросил оперативки больше 8ми мегабайт.:D

ps; Что означает "делать проще, закрыт - восстановить по цене открытия."??? Прежде чем восстановить надо его определить что он закрыт или как ты это представляешь? Ты считаешь что проще перебрать историю в поисках нужного ордера? Ты ещё мелко плавал, не сталкивался с проблемами сортировки ордеров в закладке "История счёта".
 
Последнее редактирование:

RoboMaks

Элитный участник
Прежде чем восстановить надо его определить что он закрыт или как ты это представляешь?

Я пока в этом проблем почему-то не встречал... Для его восстановления вполне достаточно и этих данных - цен открытий-закрытий.
 

Вложения

  • Сохраненное изображение 2015-10-14_0-34-2.734.jpg
    Сохраненное изображение 2015-10-14_0-34-2.734.jpg
    16,8 КБ · Просмотры: 16
  • Like
Реакции: gush

gush

бродяга
Ну, я вспомнил где и кому писал похожий код. Вот здесь http://forexsystemsru.com/skripty/65219-poisk-skriptov-35.html#post1052021 и по твоей просьбе правил.
Бери и правь под свои нужды. Там после определения, что ордер закрыт закрывает все остальные, а тебе надо всего-лишь заменить закрытие на определение параметров этого закрытого ордера и открытие нового по той-же цене и с теми-же ТП и СЛ.

темный дремучий лес это для меня :facepalm:
 

AlexeyVik

Программист mql4 mql5
Я пока в этом проблем почему-то не встречал... Для его восстановления вполне достаточно и этих данных - цен открытий-закрытий.
А какого ордера данные показаны в комменте?
Ты-бы до того как... поэкспериментировал. На форуме mql4 долго мусолили вопрос выбора последнего/первого ордера из истории, но так и не смогли определить приемлемый для всех вариант. Ладно хоть убрали зависимость от сортировки списка в закладке "История Счёта", но осталась зависимость от выбранного периода отображения. OrdersHistoryTotal() возвращает не полное количество ордеров, а только то количество которое отображено на данный момент в этом списке. Соответственно если выбран период "Сегодня", но сегодня не совершалось ни одной сделки, то список будет пуст и OrdersHistoryTotal() вернёт 0. Или "Последняя неделя", то в понедельник тоже в списке тоже будет 0.
И никто не может гарантировать, что "завтра" не будет ещё каких либо изменений и не возникнет проблем с выбором ордеров из истории.
 
  • Like
Реакции: gush

AlexeyVik

Программист mql4 mql5
темный дремучий лес это для меня :facepalm:
Ну тогда держи готовый, бродяга. У меня сегодня опять день добрых дел.
если allMagic = true то сов будет работать со всеми магиками
если Magic = 0 и allMagic = false то сов будет работать только с ордерами открытыми вручную и открытыми любым методом с магиком 0.
 

Вложения

  • ReopeningOrders.mq4
    3,2 КБ · Просмотры: 25

edvinascavadimasca

Интересующийся
привет
у меня такая проблема\ я написал советника работающий по гистограме индикатора\ как мне написать код чтобы он откпывал одну сделку допустим в бай и после етого не отрывал снова в бай а дождался сигнала села и отрыл бы селл\ а то он после того как закрывает один ордер\тогда и же открывает в том же направление\ мне не надо так
помогите пож

ребят помогите пожалуйста
 

RoboMaks

Элитный участник
А какого ордера данные показаны в комменте?
Ты-бы до того как... поэкспериментировал. На форуме mql4 долго мусолили вопрос выбора последнего/первого ордера из истории, но так и не смогли определить приемлемый для всех вариант.

Это написано не на скорую руку только что, а работает и проэксперементировано уже достаточно давно.

осталась зависимость от выбранного периода отображения. OrdersHistoryTotal() возвращает не полное количество ордеров, а только то количество которое отображено на данный момент в этом списке. Соответственно если выбран период "Сегодня", но сегодня не совершалось ни одной сделки, то список будет пуст и OrdersHistoryTotal() вернёт 0. Или "Последняя неделя", то в понедельник тоже в списке тоже будет 0.
И никто не может гарантировать, что "завтра" не будет ещё каких либо изменений и не возникнет проблем с выбором ордеров из истории.

Ничего не поделаешь - приходится работать с тем, что есть. Будут нововведения - придётся подстраиваться и нам...
 

AlexeyVik

Программист mql4 mql5
Это написано не на скорую руку только что, а работает и проэксперементировано уже достаточно давно.



Ничего не поделаешь - приходится работать с тем, что есть. Будут нововведения - придётся подстраиваться и нам...
Вот именно... Либо подстраиваться каждый раз, либо учитывать возможные изменения и стараться сделать так, чтобы не пришлось править и переписывать код.
 

saas

Прохожий
Кто-нибудь знает, возможно ли в советнике вставить Алерт, который просигналит за 15-20 секунд до закрытия свечи, если цена идет в нужном направлении? Насколько это сложно?
 
Верх