- Кнопка - Графические объекты - Использование аналитических объектов - Графики котировок, технический и фундаментальный анализ
- MQL5 Wizard: разработка торговых роботов для MetaTrader 5
- Графики котировок, технический и фундаментальный анализ
Хочу написать код для робота своего, чтобы торговал допустим с 9-00 до 13-00 а потом начинал только с 15-00 и до 19-00, и чтоб этот параметр можно было менять. Кто чем может)
Конструкция
input string i_sTimeSettings="Настройки времени торговли"; // input bool i_bExitClearing1=false; // Закрывать позицию перед клирингом 1 input string i_sClearing1StartTime="13:00"; // Время начала клиринга 1 input string i_sClearing1EndTime="13:03"; // Время окончания клиринга 1 input bool i_bExitClearing2=false; // Закрывать позицию перед клирингом 2 input string i_sClearing2StartTime="18:44"; // Время начала клиринга 2 input string i_sClearing2EndTime="19:00"; // Время окончания клиринга 2 input bool i_bExitEndSession=false; // Закрывать позицию перед окончанием сессии input string i_sEndSessionTime="22:56"; // Время окончания сессии
Подойдет?
Конструкция
Подойдет?
спасибо отлично!!!
//или делаем так:
//------------------------------------------------------------------------------------------------ input string i_sTimeSettings="Настройки времени торговли"; // --- //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum bExitClearing1 { sfal1=0, //Не использовать stru1=1 //Использовать }; input bExitClearing1 i_bExitClearing1=0; // Закрывать позицию перед клирингом 1 input string i_sClearing1StartTime="13:59"; // Время начала клиринга 1 input string i_sClearing1EndTime="14:05"; // Время окончания клиринга 1 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum bExitClearing2 { fal2=0, //Не использовать tru2=1 //Использовать }; input bExitClearing2 i_bExitClearing2=0; // Закрывать позицию перед клирингом 2 input string i_sClearing2StartTime="18:44"; // Время начала клиринга 2 input string i_sClearing2EndTime="19:00"; // Время окончания клиринга 2 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum bExitEndSession { fal3=0, //Не использовать tru3=1 //Использовать }; input bExitEndSession i_bExitEndSession=0; // Закрывать позицию перед окончанием сессии input string i_sEndSessionTime="23:40"; // Время окончания сессии // время начала и окончания клиринга и окочания сессии datetime g_dtClearing1StartTime,g_dtClearing1EndTime; datetime g_dtClearing2StartTime,g_dtClearing2EndTime; datetime g_dtEndSessionTime,g_dtLastOrderOpen; bool bTradeTime; int TaimSession() { // время торгов g_dtClearing1StartTime=StringToTime(i_sClearing1StartTime)%86400; g_dtClearing1EndTime=StringToTime(i_sClearing1EndTime)%86400; g_dtClearing2StartTime=StringToTime(i_sClearing2StartTime)%86400; g_dtClearing2EndTime=StringToTime(i_sClearing2EndTime)%86400; g_dtEndSessionTime=StringToTime(i_sEndSessionTime)%86400; return(INIT_SUCCEEDED); int OnInit() { TaimSession();// таймер клирингов return(INIT_SUCCEEDED); } ну и далее void OnTick() { if(PositionSelect(_Symbol) == true) // если есть поза { // в неторговое время немедленно всё закрываем if(bTradeTime == false) { ClosePosition(_Symbol); // здесь рисуйте вашу функцию закрытия позы return; } }
void OnTimer() { проверяем время клиринга datetime dtCurrentTime=TimeTradeServer(); bTradeTime=true; if(i_bExitClearing1 && (dtCurrentTime%86400>=g_dtClearing1StartTime-30) && (dtCurrentTime%86400<=g_dtClearing1EndTime)) bTradeTime=false; if(i_bExitClearing2 && (dtCurrentTime%86400>=g_dtClearing2StartTime-30) && (dtCurrentTime%86400<=g_dtClearing2EndTime)) bTradeTime=false; if(i_bExitEndSession && (dtCurrentTime%86400>=g_dtEndSessionTime-30)) bTradeTime=false; return; }
или чтоб с экономить пространство в советнике сохраняем в mqh
а в советнике запрашиваем
//+------------------------------------------------------------------+ //| 567.mq5 | //| Copyright 2016, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #include "TaimSession.mqh"// таймер сесии int OnInit() { TaimSession();// таймер клирингов return(INIT_SUCCEEDED); } void OnTick() { if(PositionSelect(_Symbol) == true) // если есть поза { // в неторговое время немедленно всё закрываем if(bTradeTime == false) { ClosePosition(_Symbol); // здесь рисуйте вашу функцию закрытия позы return; } }
Хочу написать код для робота своего, чтобы торговал допустим с 9-00 до 13-00 а потом начинал только с 15-00 и до 19-00, и чтоб этот параметр можно было менять. Кто чем может)
пусть робот ориентируется на глоб.переменную из которой читает можно/нет торговать. И отдельно своять GUI-индикатор с "шл@#ми и блекджеком" который эту переменную выставляет. Иначе код советника может стать излишне развеститым и по большей части станет заниматься ненужными вещами.
мой советник смотрит 3 параметра
1) расстояние от мувинга до цены открытия свечи
2) выше или ниже цена открытия сделки над мувингом ил под мувингом
3) обьем свечи
мой советник смотрит 3 параметра
1) расстояние от мувинга до цены открытия свечи
2) выше или ниже цена открытия сделки над мувингом ил под мувингом
3) обьем свечи
или чтоб с экономить пространство в советнике сохраняем в mqh
а в советнике запрашиваем
а как вы скинули код его в самое начало нужно вставить только и все? я сам просто только знакомлюсь с mql - ом а советника прогер писал, когда уже написал я вспомнил что хотел дополнить в нем. Щас вот пытаюсь
а как вы скинули код его в самое начало нужно вставить только и все? я сам просто только знакомлюсь с mql - ом а советника прогер писал, когда уже написал я вспомнил что хотел дополнить в нем. Щас вот пытаюсь
если не использовать mqh
это копируем в верх , где находятся на у вас настройки :
input string i_sTimeSettings="Настройки времени торговли"; // --- enum bExitClearing1 { sfal1=0, //Не использовать stru1=1 //Использовать }; input bExitClearing1 i_bExitClearing1=0; // Закрывать позицию перед клирингом 1 input string i_sClearing1StartTime="13:59"; // Время начала клиринга 1 input string i_sClearing1EndTime="14:05"; // Время окончания клиринга 1 enum bExitClearing2 { fal2=0, //Не использовать tru2=1 //Использовать }; input bExitClearing2 i_bExitClearing2=0; // Закрывать позицию перед клирингом 2 input string i_sClearing2StartTime="18:44"; // Время начала клиринга 2 input string i_sClearing2EndTime="19:00"; // Время окончания клиринга 2 enum bExitEndSession { fal3=0, //Не использовать tru3=1 //Использовать }; input bExitEndSession i_bExitEndSession=0; // Закрывать позицию перед окончанием сессии input string i_sEndSessionTime="23:40"; // Время окончания сессии // время начала и окончания клиринга и окочания сессии datetime g_dtClearing1StartTime,g_dtClearing1EndTime; datetime g_dtClearing2StartTime,g_dtClearing2EndTime; datetime g_dtEndSessionTime,g_dtLastOrderOpen;
bool bTradeTime;
далее
ищите переменную int OnInit() вашего советника
за скобкой пишем( копируем):
{
// время торгов
g_dtClearing1StartTime=StringToTime(i_sClearing1StartTime)%86400; g_dtClearing1EndTime=StringToTime(i_sClearing1EndTime)%86400; g_dtClearing2StartTime=StringToTime(i_sClearing2StartTime)%86400; g_dtClearing2EndTime=StringToTime(i_sClearing2EndTime)%86400; g_dtEndSessionTime=StringToTime(i_sEndSessionTime)%86400;
далее идет ваш код.........
return(INIT_SUCCEEDED);
скобка закрывается
}
это мы инициализировали время торгов
далее ищем вот такую загигулину
void OnTick()
{
if(PositionSelect(_Symbol) == true) // если есть поза
{ // в неторговое время немедленно всё закрываем if(bTradeTime == false) { ClosePosition(_Symbol); // здесь рисуйте вашу функцию закрытия позы return; }
}
точно также начиням буковками функцию
void OnTimer()
{ проверяем время клиринга datetime dtCurrentTime=TimeTradeServer(); bTradeTime=true; if(i_bExitClearing1 && (dtCurrentTime%86400>=g_dtClearing1StartTime-30) && (dtCurrentTime%86400<=g_dtClearing1EndTime)) bTradeTime=false; if(i_bExitClearing2 && (dtCurrentTime%86400>=g_dtClearing2StartTime-30) && (dtCurrentTime%86400<=g_dtClearing2EndTime)) bTradeTime=false; if(i_bExitEndSession && (dtCurrentTime%86400>=g_dtEndSessionTime-30)) bTradeTime=false; return; }
Все !
//или делаем так:
А зачем три одинаковых enum ?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования