Здравствуйте, можете сделать:
Напишу советник для МТ4/MT5 по вашему техзаданию
От mqloud, 15 ноября, 2018 в Уголок Программиста
Ребята, кто может сделать код, начало и конец работы советника (например, начало в 10:00 и конец в 19:00)
1 час назад, drobayura сказал:Ребята, кто может сделать код, начало и конец работы советника (например, начало в 10:00 и конец в 19:00)
// внешние параметры input string TimeStart="10:00"; // время начала открытия позиций input string TimeEnd="19:00"; // время окончания открытия позиций ... //------------------------------------------------------------------ bool CheckTime() // функция проверки времени, заданного строками { datetime dt=TimeCurrent(); datetime dt1=StringToTime(TimeToString(dt, TIME_DATE)+" "+TimeStart); datetime dt2=StringToTime(TimeToString(dt, TIME_DATE)+" "+TimeEnd); if (dt1==dt2) return true; if (dt1<dt2) if (dt>=dt1 && dt<=dt2) return true; if (dt1>dt2) if (dt>=dt1 || dt<=dt2) return true; return false ; } //------------------------------------------------------------------ void OnTick() // обработка тика { if (CheckTime()) // если время разрешает работать { ... /* выполняем какие-то действия в это время например открытие позиций */ ... } ... /* выполняем остальные действия, которые нужно делать всегда например трал стоплоса */ }
18 часов назад, mqloud сказал:
// внешние параметры input string TimeStart="10:00"; // время начала открытия позиций input string TimeEnd="19:00"; // время окончания открытия позиций ... //------------------------------------------------------------------ bool CheckTime() // функция проверки времени, заданного строками { datetime dt=TimeCurrent(); datetime dt1=StringToTime(TimeToString(dt, TIME_DATE)+" "+TimeStart); datetime dt2=StringToTime(TimeToString(dt, TIME_DATE)+" "+TimeEnd); if (dt1==dt2) return true; if (dt1<dt2) if (dt>=dt1 && dt<=dt2) return true; if (dt1>dt2) if (dt>=dt1 || dt<=dt2) return true; return false ; } //------------------------------------------------------------------ void OnTick() // обработка тика { if (CheckTime()) // если время разрешает работать { ... /* выполняем какие-то действия в это время например открытие позиций */ ... } ... /* выполняем остальные действия, которые нужно делать всегда например трал стоплоса */ }
Спасибо БОЛЬШОЕ. Всё работает отлично. Эта функция нужна для теста стратегий. В тестере советник шпарит круглые сутки напролёт, а в реалии так не работаем.
Ребята, а можно вставить компелированный индикатор в советник? Индикатор рисует в чарте синие и красные уровни.
можно, через #resource
17 часов назад, mqloud сказал:можно, через #resource
А если дам исходный код советника и индикатор поможете?
попробуйте
Здравствуйте, возьметесь за написание советника. Если коротко то: выставляем уровни (бай и селл) на определённом расстоянии от цены. При касании ценой уровни активируются, если цена идёт против нас, то через заданное расстояние открывается новый ордер изменяется тейк и т.д., Если возьметесь подробно опишу Т.З.
2 часа назад, mqloud сказал:попробуйте
Условия выполнения сделок:
закрытие свечи выше синей BUY, ниже красной SELL.
Сопровождение открытых позиций - цена проходит расстояние равное от открытия ордера до S/L переводим в Б/У и далее тралим кратному расстоянию S/L (проходим 1:2 переводим 1:1, проходим 1:3 переводим 1:2 и т,д.)
Советник:
Индикатор:
16 минут назад, drobayura сказал:Условия выполнения сделок
не совсем понял, я думал вам требуется скомпилировать советник, с втягиванием внутрь ex4, чтоб советник+индикатор был одним файлом, а не разными. Вот как вы написали
23 часа назад, drobayura сказал:а можно вставить компелированный индикатор в советник?
если же вам нужно использовать индикатор в советнике, ну так это и так и работает, советник не использует mq4 коды. советник использует именно ex4 файл индикатора, когда вызывает iCustom
Изменено 16 декабря, 2022 пользователем mqloud
2 часа назад, mqloud сказал:не совсем понял, я думал вам требуется скомпилировать советник, с втягиванием внутрь ex4, чтоб советник+индикатор был одним файлом, а не разными. Вот как вы написали
если же вам нужно использовать индикатор в советнике, ну так это и так и работает, советник не использует mq4 коды. советник использует именно ex4 файл индикатора, когда вызывает iCustom
"...когда вызывает iCustom" ну для этого же нужен исходник индикатора
2 часа назад, drobayura сказал:для этого же нужен исходник индикатора
нет
в самом простом варианте (пример для Бай)
if (OrderClosePrice()-OrderStopLoss()>2*SL*_Point) OrderModify(...);
2 часа назад, mqloud сказал:в самом простом варианте (пример для Бай)
if (OrderClosePrice()-OrderStopLoss()>2*SL*_Point) OrderModify(...);
Это прошли два SL, а если пройдём три как будет. " ... )>2*SL*_Point" где двойка какая то переменная наверно должна стоять да? Я здесь не смогу прописать и здесь OrderModify(...) тоже не знаю что писать.
Прошу Вас сделайте пожалуйста на BUY, а SELL по аналогии я попробую сделать сам.
Изменено 19 декабря, 2022 пользователем drobayura
for (int i=OrdersTotal()-1; i>=0; --i) { if (!OrderSelect(i, SELECT_BY_POS)) continue; // ошибка взяти if (OrderSymbol()!=Symbol()) continue; // чужой символ //if (OrderMagicNumber()!=Magic) continue; // чужой магик if (OrderType()==OP_BUY) { if (OrderClosePrice()-OrderStopLoss()>2*SL*_Point) { double sl=NormalizeDouble(OrderStopLoss()+SL*_Point, _Digits); // новый СЛ передвинули на шаг SL if (!OrderModify(OrderTicekt(), OrderOpenPrice(), sl, OrderTakeProfit(), 0)) Print(GetLastError()); // подвинули } } }
1 час назад, mqloud сказал:for (int i=OrdersTotal()-1; i>=0; --i) { if (!OrderSelect(i, SELECT_BY_POS)) continue; // ошибка взяти if (OrderSymbol()!=Symbol()) continue; // чужой символ //if (OrderMagicNumber()!=Magic) continue; // чужой магик if (OrderType()==OP_BUY) { if (OrderClosePrice()-OrderStopLoss()>2*SL*_Point) { double sl=NormalizeDouble(OrderStopLoss()+SL*_Point, _Digits); // новый СЛ передвинули на шаг SL if (!OrderModify(OrderTicekt(), OrderOpenPrice(), sl, OrderTakeProfit(), 0)) Print(GetLastError()); // подвинули } } }
Попробую вставить, что получится.
1 час назад, drobayura сказал:Попробую вставить, что получится.
2 часа назад, mqloud сказал:for (int i=OrdersTotal()-1; i>=0; --i) { if (!OrderSelect(i, SELECT_BY_POS)) continue; // ошибка взяти if (OrderSymbol()!=Symbol()) continue; // чужой символ //if (OrderMagicNumber()!=Magic) continue; // чужой магик if (OrderType()==OP_BUY) { if (OrderClosePrice()-OrderStopLoss()>2*SL*_Point) { double sl=NormalizeDouble(OrderStopLoss()+SL*_Point, _Digits); // новый СЛ передвинули на шаг SL if (!OrderModify(OrderTicekt(), OrderOpenPrice(), sl, OrderTakeProfit(), 0)) Print(GetLastError()); // подвинули } } }
Получилось вот что:
void _TrailingStop(){
int i;
bool m;
if (OrdersTotal()>0){
for (i=OrdersTotal()-1; i>=0; i--){
if (OrderSelect(i, SELECT_BY_POS)){
if (OrderSymbol()==Symbol() /*&& OrderMagicNumber()==-1*/){
if (OrderType()==OP_BUY)
{
if (OrderClosePrice() - OrderStopLoss() < 2*SL*_Point)
{
while (IsTradeContextBusy()) Sleep(1000);
RefreshRates();
double sl=NormalizeDouble(OrderStopLoss()+SL*_Point, _Digits); // новый СЛ передвинули на шаг SL
m = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),CLR_NONE);
}
}
if (OrderType()==OP_SELL)
{
if (OrderStopLoss() - OrderClosePrice() > 2*SL*_Point)
{
while (IsTradeContextBusy()) Sleep(1000);
RefreshRates();
double sl=NormalizeDouble(OrderStopLoss()-SL*_Point, _Digits); // новый СЛ передвинули на шаг SL
m = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),CLR_NONE);
}
}
}
}
}
}
return;
}
Не работает как надо.
Здравствуйте. Вопрос по реализации клика мышкой в mql4
Нужно по сигналу (сигнал есть в советнике) , кликнуть мышкой в определенном месте.
Необходимо для торговли опционами
нужна полная задача, что когда и где кликать
Хотя бы пример, а дальше я сам. Если вкратце есть фунция которая дает сигнал:
GetSign();
//
код
//
Функция может быть меньше или больше ноля. Мне бы хотя бы в одном случае (например
int sign = GetSign();
if( sign > 0 )
далее код как кликнуть мышью во вкладке браузера. Можно рандомные координаты. Я потом попытаюсь разобраться как ввести нужные).
Вообще, кликать нужно будет на странице сайта компании торгующей бинарными опционами,
Чтобы упростить код - например, я включаю советник, открываю нужную страницу и мышь просто кликает в определенном месте. Не нужно чтобы она еще и сама туда двигалась.
Просто я почему то даже пример не могу найти, да есть функция в mql4, но я плохо знаю код. Если бы простейший пример я бы понял бы. У п\Павла есть урок написания скрипта, который запускает вкладку хрома и перезагружает компьютер, а как раз клика по мыши нет.
Изменено 26 декабря, 2022 пользователем pasem
14 часов назад, mqloud сказал:нужна полная задача, что когда и где кликать
ответил выше
9 часов назад, pasem сказал:Можно рандомные координаты
тогда или SendInput https://stackoverflow.com/questions/28386029/how-to-simulate-mouse-click-using-c
или PostMessage https://stackoverflow.com/questions/6688369/simulate-mouse-events-from-c-in-windows
34 минуты назад, mqloud сказал:
я извиняюсь там написано с++, а мне нужно чтобы это было в советнике на mql4
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем