Kanataga Опубликовано 2 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 декабря, 2013 Вопрос к программистам. Есть переменная которая имеет значение, но когда терминал перезагружается , то значение теряется. Возможно ли запоминать это значение, после перезагрузки мт4. Ссылка на сообщение Поделиться на другие сайты More sharing options...
t0mbfunk Опубликовано 2 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 декабря, 2013 Привет, может у кого есть или кто нибудь может помочь мне написать функцию которая :Например,если стоит BuyStop,цена до него доходит и он преврашается в маркет ордер, то автоматически отлаживается противоположный SellStopордер в другом направлении на определенном расстоянии,потом если цена доходить до етого SellStop ордера ,также снова открывается противоположный ордер,и цикл повторяется.Спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
shatun Опубликовано 2 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 декабря, 2013 Вопрос к программистам. Есть переменная которая имеет значение, но когда терминал перезагружается , то значение теряется. Возможно ли запоминать это значение, после перезагрузки мт4. Возможно. Сохранять значения во внешних файлах и при инициализации считывать настройки._http://codebase.mql4.com/ru/1025 Ссылка на сообщение Поделиться на другие сайты More sharing options...
xanZA Опубликовано 2 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 декабря, 2013 Привет, может у кого есть или кто нибудь может помочь мне написать функцию которая :Например,если стоит BuyStop,цена до него доходит и он преврашается в маркет ордер, то автоматически отлаживается противоположный SellStopордер в другом направлении на определенном расстоянии,потом если цена доходить до етого SellStop ордера ,также снова открывается противоположный ордер,и цикл повторяется.Спасибо. Советник Чебурашка на форуме Альпари. Ссылка на сообщение Поделиться на другие сайты More sharing options...
t0mbfunk Опубликовано 4 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 декабря, 2013 Как можно узнать дистанцию от OrderOpenPrice() до 100 пипсовых круглых чисел?спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Baggins Опубликовано 4 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 декабря, 2013 max = 1000;min = 0;for (i=min; i { if(OrderOpenPrice() - i { low = i; high = i+100*Point; lengthtolow = OrderOpenPrice() - low; lengthtohigh = high - OrderOpenPrice(); break; } }как то так. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ttomas Опубликовано 4 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 декабря, 2013 Сложновато предложили... Можно сделать без циклов и прочего, кажется вот так должно работать: extern int Quality=100;- качество настраиваемого уровняint mod=MathFloor(OrderOpenPrice()/(Quality*Point));int ToLow=(OrderOpenPrice()-mod*Quality*Point)/Point;int ToHigh=((mod+1)*Quality*Point-OrderOpenPrice())/Point; Хотя сколько программистов столько и мнений :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ricedeni Опубликовано 5 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 декабря, 2013 подскажите пожалуйста, что я делаю не так. уже неделю бьюсь над пробуемой, и не получается :((нужно, что бы после выполнения функции перевода ордера в безубыток, открылся один отложенный ордер. У меня, почему то, открывается миллион отложенных ордеров Спойлер void MovingInWL(string sy="", int op=-1, int mn=-1) { double po, pp; int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if ((OrderSymbol()==sy || sy=="") && (op if (mn po=MarketInfo(OrderSymbol(), MODE_POINT); if (OrderType()==OP_BUY) { if (OrderStopLoss()-OrderOpenPrice() pp=MarketInfo(OrderSymbol(), MODE_BID); if (pp-OrderOpenPrice()>LevelProfit*po) { ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1); double ff= OrderOpenPrice(); ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, ff, Slippage, 0, 0, "", Magic, 0, Red); } } } if (OrderType()==OP_SELL) { if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss() pp=MarketInfo(OrderSymbol(), MODE_ASK); if (OrderOpenPrice()-pp>LevelProfit*po) { ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1); double fd= OrderOpenPrice(); ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, fd, Slippage, 0, 0, "", Magic, 0, Red); } } } } } } }} Ссылка на сообщение Поделиться на другие сайты More sharing options...
shatun Опубликовано 5 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 декабря, 2013 подскажите пожалуйста, что я делаю не так. уже неделю бьюсь над пробуемой, и не получается :((нужно, что бы после выполнения функции перевода ордера в безубыток, открылся один отложенный ордер. У меня, почему то, открывается миллион отложенных ордеров Спойлер void MovingInWL(string sy="", int op=-1, int mn=-1) { double po, pp; int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if ((OrderSymbol()==sy || sy=="") && (op if (mn po=MarketInfo(OrderSymbol(), MODE_POINT); if (OrderType()==OP_BUY) { if (OrderStopLoss()-OrderOpenPrice() pp=MarketInfo(OrderSymbol(), MODE_BID); if (pp-OrderOpenPrice()>LevelProfit*po) { ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1); double ff= OrderOpenPrice(); ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, ff, Slippage, 0, 0, "", Magic, 0, Red); } } } if (OrderType()==OP_SELL) { if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss() pp=MarketInfo(OrderSymbol(), MODE_ASK); if (OrderOpenPrice()-pp>LevelProfit*po) { ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1); double fd= OrderOpenPrice(); ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, fd, Slippage, 0, 0, "", Magic, 0, Red); } } } } } } }} так по коду и должно быть: кол-во новых ордеров = кол-ву открытых ордеров (каждый шаг цикла новый ордер). поставь return(); после строчки ticket = OrderSend... Изменено 5 декабря, 2013 пользователем shatun Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 5 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 декабря, 2013 RicedeniЕсли нужен один, значит нужно так и написать: если ордеров (допустим) BuyStop нет, значит, ставим.Функции подсчёта ордеров есть в уроках.И лучше написать: if (OrderModify(.........) - т.е., если ордер модифицирован, значит, ставим отложку. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ricedeni Опубликовано 5 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 декабря, 2013 RicedeniЕсли нужен один, значит нужно так и написать: если ордеров (допустим) BuyStop нет, значит, ставим. а если buystop есть, но по другим ценам? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 5 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 декабря, 2013 RicedeniЗначит нужно внести нужную цену в переменную и по этой цене, больше не открывать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ricedeni Опубликовано 5 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 декабря, 2013 RicedeniЗначит нужно внести нужную цену в переменную и по этой цене, больше не открывать. внести цену в переменную я могу, а как потом проверить, что Buystop уже есть по этой цене? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 5 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 декабря, 2013 RicedeniФункцию нужно писать.Перебор ордеров.Если символ, магик, тип (Buystop), цена (OrderOpenPrice()) = нашей переменной...Да - не ставим ордер, нет - ставим. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 5 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 декабря, 2013 внести цену в переменную я могу, а как потом проверить, что Buystop уже есть по этой цене? Ну так а видеоуроки зачем писались? Вот например универсальная функция для проверки любых "наших" ордеров в рынке:int CountTrades(int ordertype) { int Count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == ordertype) Count ++; } }return (Count); } Передаешь в нее нужный тип ордера и проверяешь, вариантов проверок на любой вкус, в твоем случае:if (CountTrades(BUY_STOP) > 0) то делаем то-то и то-тоСделать подобную функцию проверки цен ордеров тоже не составит труда. Изменено 5 декабря, 2013 пользователем JR 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ricedeni Опубликовано 5 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 декабря, 2013 спасибо друзья Ссылка на сообщение Поделиться на другие сайты More sharing options...
mzk_3om6u Опубликовано 9 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 декабря, 2013 у меня вот интересный вопрос, как проверять есть ли соединение с сервером, для торговли? Обычное соединение явно было, ведь тики приходили, и на каждый тик отправлялся запрос, на открытие ордера. Но в журнале мы видим вот такую картинку...Объясните пожалуйста, что тут произошло, и почему? Или это магическим образом пропала связь именно в эту минуту? 1.png Ссылка на сообщение Поделиться на другие сайты More sharing options...
Александр123 Опубликовано 10 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 декабря, 2013 Вопрос уважаемым программистам. Как заставить советник торговать на offline М2 графике ренко (график генерируется индикатором RenkoLiveChart v2.1) ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
mzk_3om6u Опубликовано 10 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 декабря, 2013 кинуть советник на график ренко - как вариант Ссылка на сообщение Поделиться на другие сайты More sharing options...
Александр123 Опубликовано 11 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 декабря, 2013 кинуть советник на график ренко - как вариант Так он и так там весит. Проблема в том, что не все советники торгуют на Renko. Как мне кажется, когда торгуешь на Renko в самом советнике должно что-то прописываться. Либо тот скрипт, индикатор или эксперт, которые формирует Renko график должны быть связаны каким-то образом в самом советнике с фукнциям покупки и продажи и т.д..... в общем, не знаю.. Ссылка на сообщение Поделиться на другие сайты More sharing options...
schurik_1 Опубликовано 11 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 декабря, 2013 кинуть советник на график ренко - как вариант Так он и так там весит. Проблема в том, что не все советники торгуют на Renko. Как мне кажется, когда торгуешь на Renko в самом советнике должно что-то прописываться. Либо тот скрипт, индикатор или эксперт, которые формирует Renko график должны быть связаны каким-то образом в самом советнике с фукнциям покупки и продажи и т.д..... в общем, не знаю.. Да ты прав с этим индикатором который прилагается к стратегии не получитться у меня получилось с другой совой генерирующей ренко графики. попробуй эту сову RenkoLiveChart_v3.2.mq4 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyP Опубликовано 13 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 декабря, 2013 xbms,Здравствуйте! Подскажите пожалуйста как закрыть большую пачку ордеров?Набрал вот такой код,но что то он не работает:void CLOSEORDER(int ord){ for (int i=0; i { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if (OrderType()==OP_BUY && ord==OP_BUY) OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE); if (OrderType()==OP_SELL && ord==OP_SELL) OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE); } } }} Ссылка на сообщение Поделиться на другие сайты More sharing options...
mzk_3om6u Опубликовано 13 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 декабря, 2013 Здравствуйте! Подскажите пожалуйста как закрыть большую пачку ордеров? //+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Закрытие позиций по рыночной цене |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+void ClosePositions(string sy="", int op=-1, int mn=-1) { int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=k-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if ((OrderSymbol()==sy || sy=="") && (op if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (mn } } } }} void ClosePosBySelect() { bool fc; color clClose; double ll, pa, pb, pp; int err, it; if (OrderType()==OP_BUY || OrderType()==OP_SELL) { for (it=1; it if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break; while (!IsTradeAllowed()) Sleep(5000); RefreshRates(); pa=MarketInfo(OrderSymbol(), MODE_ASK); pb=MarketInfo(OrderSymbol(), MODE_BID); if (OrderType()==OP_BUY) { pp=pb; clClose=clCloseBuy; } else { pp=pa; clClose=clCloseSell; } ll=OrderLots(); fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose); if (fc) { if (UseSound) PlaySound(NameFileSound); break; } else { err=GetLastError(); if (err==146) while (IsTradeContextBusy()) Sleep(1000*11); Print("Error(",err,") Close ",GetNameOP(OrderType())," ", ErrorDescription(err),", try ",it); Print(OrderTicket()," Ask=",pa," Bid=",pb," pp=",pp); Print("sy=",OrderSymbol()," ll=",ll," sl=",OrderStopLoss(), " tp=",OrderTakeProfit()," mn=",OrderMagicNumber()); Sleep(1000*5); } } } else Print("Некорректная торговая операция. Close ",GetNameOP(OrderType()));} Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyP Опубликовано 13 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 декабря, 2013 mzk_3om6u.Приветствую подскажи пожалуйста что это за переменная- NumberOfTry? Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 13 декабря, 2013 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 декабря, 2013 xbms,Здравствуйте! Подскажите пожалуйста как закрыть большую пачку ордеров?Набрал вот такой код,но что то он не работает:void CLOSEORDER(int ord){ for (int i=0; i { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if (OrderType()==OP_BUY && ord==OP_BUY) OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE); if (OrderType()==OP_SELL && ord==OP_SELL) OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE); } } }} если нужно закрыть все открытые ордера, то тут можно просто поправить так:void CLOSEORDER(){ for (int i=0; i { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); } } }} ну и разумеется эту функцию нужно вызвать из нужного места так: CLOSEORDER();хотя в данном случае её логичней было бы обозвать уже CloseAllopenOrders; :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти