Открытие позиции (бай, сел. на выбор) в определенный день недели на открытии дня, закрытие на закрытии дня.
я в шоке, ну почему все элементарные действия должен делать советник/скрипт
кто-то отменял систему отложенных ордеров? выставите 5 отложенных ордеров на 5 рабочих дней с Вашим текущим временем суток где день открывается и где закрывается
зачем тут код?
Человек не знает, по какой цене будет открыт день, например, послезавтра. Вот он и хочет, чтоб ордер устанавливался в точке открытия дня.
drknn >>:
Человек не знает, по какой цене будет открыт день, например, послезавтра. Вот он и хочет, чтоб ордер устанавливался в точке открытия дня.
Человек не знает, по какой цене будет открыт день, например, послезавтра. Вот он и хочет, чтоб ордер устанавливался в точке открытия дня.
тогда примерно так:
//+------------------------------------------------------------------+ //| Order_Time.mq4 | //| IgorM | //| https://forum.mql4.com/ru/ | //+------------------------------------------------------------------+ #property copyright "IgorM" #property link "https://forum.mql4.com/ru/" extern string _P1 = "тип ордера: 1 BUY ; 2 -SELL"; extern int order_type = 1; extern int Hour_Time = 0; extern string _P2 = "номер дня недели (воскресенье-0,1,2,3,4,5,6)"; extern int Day_Week = 1; extern double Lot = 0.01; extern int StopLoss = 300; // в пунктах extern int TakeProfit = 500; // в пунктах extern int Slippage = 50; // величина проскальзования при открытии ордера bool OK = false ; int init() { return(0); } int deinit() { return(0); } int start() { if (OK) return(0); // проверка выполнялся ли этот код и выставлен ли ордер if(DayOfWeek()!=Day_Week) return(0); // проверка дня недели иначе выход // для сравнения с временем сервера if (Hour_Time !=TimeHour(TimeCurrent())){ Sleep(60000); return(0);} // пауза на 1 минуту, на следующем тике опять проверка // для сравнения с локальным временем компьютера // if (Hour_Time !=TimeHour(TimeLocal())) { Sleep(60000); return(0);} // если текущий час совпадает с заданным то открываем ордер int cmd, ticket=-1; double SL, TP, PR; if (order_type == 1){ cmd = OP_BUY; PR = NormalizeDouble(Ask,Digits); } if (order_type == 2){ cmd = OP_SELL; PR = NormalizeDouble(Bid,Digits); } if (StopLoss==0) SL=0; else SL = NormalizeDouble(PR - StopLoss * Point, Digits); if (TakeProfit==0) TP=0; else TP = NormalizeDouble(PR + TakeProfit * Point, Digits); ticket = OrderSend(Symbol(),cmd, Lot, PR, Slippage, SL, TP, NULL, 0, 0, Blue); if (ticket > 0) { if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES)) Print("Order opened : ", OrderOpenPrice()); OK = true; } else Print("Ошибка № ",GetLastError()," при открытиии ордера"); return(0); } //+------------------------------------------------------------------+
это открытие, надо дописать проверку для закрытия :) - хотя думаю закрытие по лосям или профиту самый оптимальный вариант
Не подскажете еще как будет выглядеть код закрытие позиции в конце дня? Благодарю за помощь.
Rockton >>:
Не подскажете еще как будет выглядеть код закрытие позиции в конце дня? Благодарю за помощь.
Не подскажете еще как будет выглядеть код закрытие позиции в конце дня? Благодарю за помощь.
//+------------------------------------------------------------------+ //| Order_Time.mq4 | //| IgorM | //| https://forum.mql4.com/ru/ | //+------------------------------------------------------------------+ #property copyright "IgorM" #property link "https://forum.mql4.com/ru/" extern string _P1 = "тип ордера: 1 BUY ; 2 -SELL"; extern int order_type = 1; extern int Hour_Time1 = 0; // время выставления ордера extern int Hour_Time2 = 1; // время закрытия ордера extern string _P2 = "номер дня недели (воскресенье-0,1,2,3,4,5,6)"; extern int Day_Week1 = 1; // день выставления ордера extern int Day_Week2 = 1; // день закрытия ордера extern double Lot = 0.01; extern int StopLoss = 300; // в пунктах extern int TakeProfit = 500; // в пунктах extern int Slippage = 50; // величина проскальзования при открытии ордера extern int Magic = 123456; bool MyOrderOK = false ; int init() { return(0); } int deinit() { return(0); } int MyOrderSend() { int cmd, ticket=-1; double SL, TP, PR; if (order_type == 1){ cmd = OP_BUY; PR = NormalizeDouble(Ask,Digits); } if (order_type == 2){ cmd = OP_SELL; PR = NormalizeDouble(Bid,Digits); } if (StopLoss==0) SL=0; else SL = NormalizeDouble(PR - StopLoss * Point, Digits); if (TakeProfit==0) TP=0; else TP = NormalizeDouble(PR + TakeProfit * Point, Digits); ticket = OrderSend(Symbol(),cmd, Lot, PR, Slippage, SL, TP, NULL, Magic, 0, Blue); if (ticket > 0) { if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES)) Print("Order opened : ", OrderOpenPrice()); MyOrderOK = true; } else Print("Ошибка № ",GetLastError()," при открытиии ордера"); return(0); } int MyOrderClose() { int cmd; if (order_type == 1) cmd = OP_BUY; if (order_type == 2) cmd = OP_SELL; for (int i=OrdersTotal()-1;i>=0;i--) { OrderSelect(i, cmd, MODE_TRADES); if (OrderMagicNumber() == Magic) if (OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Violet)) { OrderPrint(); MyOrderOK = false; } else Print("Ошибка № ",GetLastError()," при закрытии ордера"); } } int start() { // если не выставлен ордер && день недели равен заданому && и текущее время сервера рано заданному то выставим ордер if ((!MyOrderOK) &&(DayOfWeek()== Day_Week1) && (Hour_Time1 ==TimeHour(TimeCurrent()))) MyOrderSend(); if ((MyOrderOK) &&(DayOfWeek()== Day_Week2) && (Hour_Time2 ==TimeHour(TimeCurrent()))) MyOrderClose(); Sleep(60000); // пауза одну минуту return(0); }
наверно все будет выглядеть так - проверить надо, сегодня сервы не работают
ну вот, первый раз на форуме выложил код, а рабочий он или нет, так и не узнал :(
топикстартер - отпишись плз, как у тебя дела там? :)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь