grabli Опубликовано 1 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 марта, 2017 Объясните чайнику, почему не работает. Сова должна выставлять максимум по 4 ордера (любых), однако, после появления первого ордера, счётчик ордеров сразу становится == 5 и больше одного ордера, соответственно, не появляется. Непонимаю, где косяк в алгоритме :-b Система_Черепах+Tral_mod001.mq4Канал_Дончиана.mq4 Изменено 1 марта, 2017 пользователем grabli Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 1 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 марта, 2017 Цитата Объясните чайнику, почему не работает. Сова должна выставлять максимум по 4 ордера (любых), однако, после появления первого ордера, счётчик ордеров сразу становится == 5 и больше одного ордера, соответственно, не появляется. Непонимаю, где косяк в алгоритме :-b grabli, собсно вот здесь и прописано: Спойлер if ( BuyStop if (SellStop GreenChannelLower + 0.0005) Если проблема в том, что должен выставлять 4, а выставляет 5, то просто поставьте либо "BuyStop Изменено 1 марта, 2017 пользователем DreamWorks 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Romhacker Опубликовано 1 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 марта, 2017 Ордера открываются, как и прописано в условии по 4 в оба направления.Также у тебя есть ошибки в условии циклов. /////////////////////////// Фильтр выхода по времени (тайм-аут)///////////////////////// if (СтопЛосс_в_барах > 0) { //определение времени открытия сделки for (i = OrdersTotal(); i >= 0; i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Магик_номер) { if (OrderType() == OP_BUY || OrderType() == OP_SELL) { break; } } } И здесь if(closedonch) { for (i = OrdersTotal(); i >= 0; i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Магик_номер) { if (OrderType() == OP_BUY) { if (Bid } if (OrderType() == OP_SELL) { if (Bid > RedChannelHiger) {OrderClose(OrderTicket(), OrderLots(), Ask, 5, Red);} } } } } Должно быть i = OrdersTotal() - 1Хоть это и не повлияет на работу советника в твоём случае, но всё же. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
AloneVolf Опубликовано 2 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 марта, 2017 Здравствуйте, появилась необходимость использование SMMA (smoothed moving average) на нестандартном таймфрейме т.е. сделать то же что делает iMA только для ценового ряда из моего массива цен. Все мои попытки разобраться с тем ка считается SMMA используя материалы опубликованные на сервере Metaquotes и исходник Custom Moving average.mq4 к положительному результату не привели. Подскажите как рассчитать значение SMMA (к примеру 5, close) в ручную или любой способ расчета для ценового ряда из моего массива Ссылка на сообщение Поделиться на другие сайты More sharing options...
Bolshakov Опубликовано 2 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 марта, 2017 Спасибо Всем. Тему можно считать закрытой.Все пишут советников кому как удобно. Я лучше пару строк "лишнего" кода напишу, зато потом мне проще будет разобраться в нем и в голове четкое представление будет. Имхо... :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
step-scorp Опубликовано 3 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 марта, 2017 Здравствуйте!Можете помочь с кодом в советник?Нужен код который фиксирует баланс=средства при отсутствии открытых ордеров и при достижении прироста средств на процент/долю к первоначальному балансу (указывается в настройках советника) закрывает все ордера (и рыночные и отложенные) и перезапускает работу советника заново.Спасибо! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 5 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 марта, 2017 Здравствуйте!Можете помочь с кодом в советник?Нужен код который фиксирует баланс=средства при отсутствии открытых ордеров и при достижении прироста средств на процент/долю к первоначальному балансу (указывается в настройках советника) закрывает все ордера (и рыночные и отложенные) и перезапускает работу советника заново.Спасибо! Вот набросал такой код: Спойлер //+------------------------------------------------------------------+//| CloseProfitPercent.mq4 |//| 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"#property strictextern int Magic = 0;//магический номерextern double ProfitPercent = 10;//целевой профит в %double acc_balance;//баланс аккаунта когда нет открытых позицийdouble acc_profit;//текущий профитdouble difference;//изменение баланса аккаунта//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() {//---//--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) {//--- }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick(){ if(Count() == 0)//если нет открытых позиций { acc_balance = AccountInfoDouble(ACCOUNT_BALANCE);//запомним баланс аккаунта } //условия для входа, советник открывает позиции // // //сравниваем текущий баланс с начальным acc_profit = AccountInfoDouble(ACCOUNT_PROFIT);//текущий профит difference = NormalizeDouble((((acc_balance + acc_profit) - acc_balance)/acc_balance)*100, 1); if(difference >= ProfitPercent) { //закроем все позиции и удалим отложки for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY) { bool res = OrderClose(OrderTicket(), OrderLots(), Bid, 50, clrNONE); if(res == false) Print("Ошибка закрытия позиции № ", GetLastError()); } if(OrderType() == OP_SELL) { bool res = OrderClose(OrderTicket(), OrderLots(), Ask, 50, clrNONE); if(res == false) Print("Ошибка закрытия позиции № ", GetLastError()); } if(OrderType() == OP_BUYSTOP || OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLSTOP || OrderType() == OP_SELLLIMIT) { bool res = OrderDelete(OrderTicket(), clrNONE); if(res == false) Print("Ошибка удаления отложенного ордера № ", GetLastError()); } } } } } Comment("Начальный баланс: ", acc_balance, "\n" "Текущий профит: ", acc_profit , "\n" "Заданный процент прибыли: ", ProfitPercent , "\n" "Текущий процент прибыли: ", difference, "\n" );}//void OnTick()//+------------------------------------------------------------------+//функция подсчета ордеров |//+------------------------------------------------------------------+int Count(){ int count=0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magic) { if(OrderType()==OP_BUY || OrderType() == OP_SELL) count++; } } } return(count);} Изменено 5 марта, 2017 пользователем Sergey Forex 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Earring Опубликовано 6 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 марта, 2017 Добрый день.Нашел несколько статей по парсингу страниц в поисках нужной информации.Но все описанные там примеры работали только на http сайтах (с помощью библиотеки wininet.dll).Попытка открыть сайты с ssl заканчивались неудачей.Вопрос. Можно ли парсить https сайты с помощью данной библиотечки, либо другой способ ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
sergej1968 Опубликовано 6 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 марта, 2017 Господа программисты. Как сделать так, чтобы сделка открывалась с началом новой свечи. Заранее, спасибо Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 6 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 марта, 2017 Господа программисты. Как сделать так, чтобы сделка открывалась с началом новой свечи. Заранее, спасибо Пользуйтесь поиском в теме. http://tlap.com/forum/ugolok-programmista/13/obuchenie-yazyku-mql4-pod-metatrader-4/4034/?do=findComment&comment=342480 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
master_255 Опубликовано 6 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 марта, 2017 Проверил, никаких проблем с https у wininet нет Test.mq4 #property copyright ""#property link ""#property version "1.00"#property strict#include #include #import "wininet.dll"int InternetOpenW(string,int,string,string,int);int InternetOpenUrlW(int,string,string,int,int,int);int InternetReadFile(int,uchar &arr[],int,int &arr[]);int InternetCloseHandle(int);#importint OnInit(void){ int read[1]; uchar Buffer[101]; string sData; string url="https://www.google.com/finance"; int HttpOpen=InternetOpenW(" ",0," "," ",0); int HttpRequest = InternetOpenUrlW(HttpOpen, url, NULL, 0, 0, 0); while(true){ InternetReadFile(HttpRequest,Buffer,100,read); string strThisRead = CharArrayToString(Buffer,0,read[0],CP_UTF8); if(read[0] > 0) sData += strThisRead; else break; } if(HttpRequest>0) InternetCloseHandle(HttpRequest); if(HttpOpen>0) InternetCloseHandle(HttpOpen); Print("### ",sData); return(INIT_SUCCEEDED);}void OnTick(){} Ну и WebRequest уже давно есть. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Earring Опубликовано 7 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 марта, 2017 Как пример:хттпс :// www_точка_myfxbook_точка_com /community /outlookНе берет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
nixxer Опубликовано 7 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 марта, 2017 Earring, вам уже показали ссылку на WebRequest, изучайте 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
sergej1968 Опубликовано 9 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 марта, 2017 5 Изменено 16 марта, 2017 пользователем sergej1968 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SVS696 Опубликовано 9 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 марта, 2017 Добрый день, возник такой вот вопрос: если у меня ордер закрывается по OrderClose, то можно нарисовать стрелку закрытия и между стрелкой открытия протянется пунктирная линия, а как тоже самое реализовать если закрытие идет по SL не виртуальному соответственно? Просто удобно, когда есть пунктир между открытием и закрытием. Добавлено: 09-03-2017 12:16:41Пока наваял такую вещь if(ExistPosition(1) || ExistPosition(2)) { FlagOpenPos=True; } else if(FlagOpenPos) { if(OrderSelect(TicketLastPos,SELECT_BY_TICKET)) { string TypeOrder="unknown"; if(OrderType()==0) TypeOrder="buy"; else if(OrderType()==1) TypeOrder="sell"; string InfoOrder=StringConcatenate("#",OrderTicket()," ",TypeOrder," ",OrderLots()," ",Symbol()," at ",OrderOpenPrice()," close at ",OrderClosePrice()); string InfoOrder2=StringConcatenate("#",OrderTicket()," ",OrderOpenPrice()," -> ",OrderClosePrice()); if(OrderType()==0) { ObjectCreate(ChartID(),InfoOrder2,OBJ_TREND,0,OrderOpenTime(),OrderOpenPrice(),OrderCloseTime(),OrderClosePrice()); ObjectSetInteger(ChartID(),InfoOrder2,OBJPROP_COLOR,clOpenBuy); ObjectSetInteger(ChartID(),InfoOrder2,OBJPROP_STYLE,STYLE_DOT); ObjectSetInteger(ChartID(),InfoOrder2,OBJPROP_RAY_RIGHT,False); if(OrderClosePrice() { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_STOP,0,OrderCloseTime(),OrderClosePrice()); } else if(OrderClosePrice()>OrderStopLoss() && OrderClosePrice()=OrderOpenPrice()) { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_THUMB_UP,0,OrderCloseTime(),OrderClosePrice()); } else if(OrderClosePrice()>OrderStopLoss() && OrderClosePrice() { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_THUMB_DOWN,0,OrderCloseTime(),OrderClosePrice()); } else if(OrderClosePrice()>=OrderTakeProfit()) { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_CHECK,0,OrderCloseTime(),OrderClosePrice()); } } else if(OrderType()==1) { ObjectCreate(ChartID(),InfoOrder2,OBJ_TREND,0,OrderOpenTime(),OrderOpenPrice(),OrderCloseTime(),OrderClosePrice()); ObjectSetInteger(ChartID(),InfoOrder2,OBJPROP_COLOR,clOpenSell); ObjectSetInteger(ChartID(),InfoOrder2,OBJPROP_STYLE,STYLE_DOT); ObjectSetInteger(ChartID(),InfoOrder2,OBJPROP_RAY_RIGHT,False); if(OrderClosePrice()>=OrderStopLoss()) { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_STOP,0,OrderCloseTime(),OrderClosePrice()); } else if(OrderClosePrice()OrderTakeProfit() && OrderClosePrice() { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_THUMB_UP,0,OrderCloseTime(),OrderClosePrice()); } else if(OrderClosePrice()OrderTakeProfit() && OrderClosePrice()>OrderOpenPrice()) { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_THUMB_DOWN,0,OrderCloseTime(),OrderClosePrice()); } else if(OrderClosePrice() { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_CHECK,0,OrderCloseTime(),OrderClosePrice()); } } } FlagOpenPos=False; } Изменено 9 марта, 2017 пользователем SVS696 Ссылка на сообщение Поделиться на другие сайты More sharing options...
ilnur17021992 Опубликовано 9 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 марта, 2017 Добрый день, возник такой вот вопрос: если у меня ордер закрывается по OrderClose, то можно нарисовать стрелку закрытия и между стрелкой открытия протянется пунктирная линия, а как тоже самое реализовать если закрытие идет по SL не виртуальному соответственно? Просто удобно, когда есть пунктир между открытием и закрытием. Добавлено: 09-03-2017 12:16:41Пока наваял такую вещь if(ExistPosition(1) || ExistPosition(2)) { FlagOpenPos=True; } else if(FlagOpenPos) { if(OrderSelect(TicketLastPos,SELECT_BY_TICKET)) { string TypeOrder="unknown"; if(OrderType()==0) TypeOrder="buy"; else if(OrderType()==1) TypeOrder="sell"; string InfoOrder=StringConcatenate("#",OrderTicket()," ",TypeOrder," ",OrderLots()," ",Symbol()," at ",OrderOpenPrice()," close at ",OrderClosePrice()); string InfoOrder2=StringConcatenate("#",OrderTicket()," ",OrderOpenPrice()," -> ",OrderClosePrice()); if(OrderType()==0) { ObjectCreate(ChartID(),InfoOrder2,OBJ_TREND,0,OrderOpenTime(),OrderOpenPrice(),OrderCloseTime(),OrderClosePrice()); ObjectSetInteger(ChartID(),InfoOrder2,OBJPROP_COLOR,clOpenBuy); ObjectSetInteger(ChartID(),InfoOrder2,OBJPROP_STYLE,STYLE_DOT); ObjectSetInteger(ChartID(),InfoOrder2,OBJPROP_RAY_RIGHT,False); if(OrderClosePrice() { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_STOP,0,OrderCloseTime(),OrderClosePrice()); } else if(OrderClosePrice()>OrderStopLoss() && OrderClosePrice()=OrderOpenPrice()) { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_THUMB_UP,0,OrderCloseTime(),OrderClosePrice()); } else if(OrderClosePrice()>OrderStopLoss() && OrderClosePrice() { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_THUMB_DOWN,0,OrderCloseTime(),OrderClosePrice()); } else if(OrderClosePrice()>=OrderTakeProfit()) { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_CHECK,0,OrderCloseTime(),OrderClosePrice()); } } else if(OrderType()==1) { ObjectCreate(ChartID(),InfoOrder2,OBJ_TREND,0,OrderOpenTime(),OrderOpenPrice(),OrderCloseTime(),OrderClosePrice()); ObjectSetInteger(ChartID(),InfoOrder2,OBJPROP_COLOR,clOpenSell); ObjectSetInteger(ChartID(),InfoOrder2,OBJPROP_STYLE,STYLE_DOT); ObjectSetInteger(ChartID(),InfoOrder2,OBJPROP_RAY_RIGHT,False); if(OrderClosePrice()>=OrderStopLoss()) { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_STOP,0,OrderCloseTime(),OrderClosePrice()); } else if(OrderClosePrice()OrderTakeProfit() && OrderClosePrice() { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_THUMB_UP,0,OrderCloseTime(),OrderClosePrice()); } else if(OrderClosePrice()OrderTakeProfit() && OrderClosePrice()>OrderOpenPrice()) { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_THUMB_DOWN,0,OrderCloseTime(),OrderClosePrice()); } else if(OrderClosePrice() { ObjectCreate(ChartID(),InfoOrder,OBJ_ARROW_CHECK,0,OrderCloseTime(),OrderClosePrice()); } } } FlagOpenPos=False; } Думаю это то что тебе нужно ТЫК КОД //+------------------------------------------------------------------+//| HistoryOrders.mq4 |//| Ilnur17021992. Special for http://tradelikeapro.ru |//| http://tradelikeapro.ru |//+------------------------------------------------------------------+#property copyright "Ilnur17021992. Special for http://tradelikeapro.ru"#property link "http://tradelikeapro.ru"#property version "1.02"#property strict#property indicator_chart_windowextern int MagicNumber = 0;extern datetime HistoryOrdersFromDateTime = 0;extern int FontSize = 10;extern color SellColor = clrRed;extern color BuyColor = clrBlue;extern color ProfitColor = clrWhite;extern bool DeleteHistoryOrders = false;int TotalPos=-1;//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int OnInit() {//--- indicator buffers mapping//--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+void start(){ for(int i=OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol() && OrderType() { if(HistoryOrdersFromDateTime { if(OrdersHistoryTotal()!=TotalPos) HistoryOrders(); } } } } TotalPos=OrdersHistoryTotal();}void HistoryOrders(){ int CountOrders=0; double b=OrderOpenPrice(), d=OrderClosePrice(), lots=OrderLots(), Profit=0; datetime a=OrderOpenTime(), c=OrderCloseTime(), close_time; string Ticket=(string)OrderTicket(), ProfitTicket, type="Sell", symbol=OrderSymbol(), comment=OrderComment(), Background; color col=SellColor; if(OrderType()==0) {col=BuyColor; type="Buy";} if(DeleteHistoryOrders==false) { ObjectCreate("#"+Ticket+" "+type+" "+DoubleToString(lots,2)+" "+symbol+" at "+DoubleToString(b,Digits)+"\n"+comment,OBJ_ARROW,0,a,b); ObjectSet("#"+Ticket+" "+type+" "+DoubleToString(lots,2)+" "+symbol+" at "+DoubleToString(b,Digits)+"\n"+comment,OBJPROP_COLOR,col); ObjectSet("#"+Ticket+" "+type+" "+DoubleToString(lots,2)+" "+symbol+" at "+DoubleToString(b,Digits)+"\n"+comment,OBJPROP_ARROWCODE,1); ObjectCreate("#"+Ticket+" "+DoubleToString(b,Digits)+" -> "+DoubleToString(d,Digits),OBJ_TREND,0,a,b,c,d); ObjectSet("#"+Ticket+" "+DoubleToString(b,Digits)+" -> "+DoubleToString(d,Digits),OBJPROP_COLOR,col); ObjectSet("#"+Ticket+" "+DoubleToString(b,Digits)+" -> "+DoubleToString(d,Digits),OBJPROP_WIDTH,1); ObjectSet("#"+Ticket+" "+DoubleToString(b,Digits)+" -> "+DoubleToString(d,Digits),OBJPROP_STYLE,STYLE_DOT); ObjectSet("#"+Ticket+" "+DoubleToString(b,Digits)+" -> "+DoubleToString(d,Digits),OBJPROP_RAY,0); ObjectCreate("#"+Ticket+" "+type+" "+DoubleToString(lots,2)+" "+symbol+" at "+DoubleToString(b,Digits)+" close at "+DoubleToString(d,Digits),OBJ_ARROW,0,c,d); ObjectSet("#"+Ticket+" "+type+" "+DoubleToString(lots,2)+" "+symbol+" at "+DoubleToString(b,Digits)+" close at "+DoubleToString(d,Digits),OBJPROP_COLOR,col); ObjectSet("#"+Ticket+" "+type+" "+DoubleToString(lots,2)+" "+symbol+" at "+DoubleToString(b,Digits)+" close at "+DoubleToString(d,Digits),OBJPROP_ARROWCODE,3); for(int i=OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) { close_time=OrderCloseTime(); if(c=close_time-60) { Profit+=OrderProfit()+OrderCommission()+OrderSwap(); ProfitTicket=(string)OrderTicket(); CountOrders++; } } } } if(CountOrders>1) { ObjectDelete("#"+Ticket+" Background"); ObjectDelete("#"+Ticket+" Profit: "+DoubleToString(Profit,2)); Ticket=ProfitTicket; } for(int i=2; i StringAdd(Background,"g"); ObjectCreate("#"+Ticket+" Background",OBJ_TEXT,0,c,d); ObjectSet("#"+Ticket+" Background",OBJPROP_ANCHOR,ANCHOR_LOWER); ObjectSetText("#"+Ticket+" Background",Background,FontSize,"Webdings",col); ObjectSet("#"+Ticket+" Background",OBJPROP_PRICE1,d); ObjectSet("#"+Ticket+" Background",OBJPROP_TIME1,c+Period()); ObjectCreate("#"+Ticket+" Profit: "+DoubleToString(Profit,2),OBJ_TEXT,0,c,d); ObjectSet("#"+Ticket+" Profit: "+DoubleToString(Profit,2),OBJPROP_ANCHOR,ANCHOR_LOWER); ObjectSetText("#"+Ticket+" Profit: "+DoubleToString(Profit,2),DoubleToString(Profit,2),FontSize,"Arial",ProfitColor); ObjectSet("#"+Ticket+" Profit: "+DoubleToString(Profit,2),OBJPROP_PRICE1,d); ObjectSet("#"+Ticket+" Profit: "+DoubleToString(Profit,2),OBJPROP_TIME1,c+Period()); } else ObjectsDeleteAll(0,"#"+Ticket+" "); }void OnDeinit(const int reason){ for(int i=0; i { DeleteHistoryOrders=true; if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) HistoryOrders(); } }} Изменено 9 марта, 2017 пользователем ilnur17021992 Ссылка на сообщение Поделиться на другие сайты More sharing options...
step-scorp Опубликовано 9 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 марта, 2017 Уважаемые программисты!Прошу помочь с кодом для сеточника.Сейчас стоповые ордера (исходя из условий) могут устанавливаться в том числе на тех "местах" (то есть в диапазоне цен), где уже стоят рыночные.Необходимо написать условие открытия сетки, при котором проверялось, нет ли в диапазоне установки сетки рыночных, и если есть, то стоповые на этих местах (то есть +/- пипсы Код пока такой -//+------------------------------------------------------------------+void PutOrder1(int type,double price) { int r=0,err=0; color clr=Green; double sl=0,tp=0; if(type==1 || type==3 || type==5) { clr=Red; if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits); if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits); } if(type==0 || type==2 || type==4) { clr=Blue; if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits); if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits); } r=OrderSend(NULL,type,Lots(type),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,TimeCurrent()+Expiration*60,clr); return; } //+------------------------------------------------------------------+//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { if(Count() == 0)//если нет открытых позиций { acc_balance = AccountInfoDouble(ACCOUNT_BALANCE);//запомним баланс аккаунта } if(PutGrid) { DelOrder();FindOrders();//CloseAll(); for(int i=1; i { if(BuyLots == SellLots) { PutOrder1(4,Bid+Delta*Point+Step*Point*i);//buystop PutOrder1(5,Bid-Delta*Point-Step*Point*i);//sellstop } ... Изменено 9 марта, 2017 пользователем step-scorp Ссылка на сообщение Поделиться на другие сайты More sharing options...
freshwind Опубликовано 9 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 марта, 2017 подскажите как из n-последних свечей подсчитать в пунктах тела отдельно бычьих, отдельно медвежьих Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 9 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 марта, 2017 step-scorp, в момент установки ордера нужно в цикле перебирать все открытые ордера и проверять расстояние от цены нового ордера до цены каждого открытого. При переборе естественно нужно фильтровать ордера по интересующим параметрам. Вот небольшой пример проверки на наличие в заданном диапазоне открытых ордеров: Спойлер int step=300;//шаг bool BesideHave=false;// есть/нет открытые ордера рядом for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { //если это наш ордер if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol()) { //если это не отложенный ордер if(OrderType()==OP_BUY || OrderType()==OP_SELL) { //если расстояние от текущей цены до этого ордера меньше или равно заданному шагу if(MathAbs(OrderOpenPrice()-Bid) { BesideHave=true; break; } } } } } //если в диапазоне step обнаружен открытый ордер if(BesideHave==true) { //....... } //если не обнаружен else{ //..... } Вот как-то так. Я думаю мысль понятна. Изменено 9 марта, 2017 пользователем DreamWorks Ссылка на сообщение Поделиться на другие сайты More sharing options...
step-scorp Опубликовано 10 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 марта, 2017 step-scorp, в момент установки ордера нужно в цикле перебирать все открытые ордера и проверять расстояние от цены нового ордера до цены каждого открытого. При переборе естественно нужно фильтровать ордера по интересующим параметрам. Вот небольшой пример проверки на наличие в заданном диапазоне открытых ордеров: Спойлер int step=300;//шаг bool BesideHave=false;// есть/нет открытые ордера рядом for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { //если это наш ордер if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol()) { //если это не отложенный ордер if(OrderType()==OP_BUY || OrderType()==OP_SELL) { //если расстояние от текущей цены до этого ордера меньше или равно заданному шагу if(MathAbs(OrderOpenPrice()-Bid) { BesideHave=true; break; } } } } } //если в диапазоне step обнаружен открытый ордер if(BesideHave==true) { //....... } //если не обнаружен else{ //..... } Вот как-то так. Я думаю мысль понятна. Спасибо!А какой нужен код если ордер обнаружен?... //если в диапазоне step обнаружен открытый ордер if(BesideHave==true) { //....... } Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 10 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 марта, 2017 Цитата Спасибо!А какой нужен код если ордер обнаружен?... //если в диапазоне step обнаружен открытый ордер if(BesideHave==true) { //....... } Пожалуйста! Я оставил пустыми умышленно эти строки, т.к. тут уже Вы сами должны прописать то, что Вам нужно. Мне показалось, что у Вас достаточно знаний для этого. Я лишь показал примерную упрощенную модель, чтобы Вы сами развили ее дальше. Я конечно могу написать это за Вас, но вряд ли это поможет Вам создать своего советника и научиться программировать. Сейчас мы сделали проверку на предмет этого: Цитата Необходимо написать условие открытия сетки, при котором проверялось, нет ли в диапазоне установки сетки рыночных В предыдущем примере кода мы просто проверяли есть/нет открытые позиции в заданном диапазоне от текущей цены. Можно было также запоминать тип и цену обнаруженного ордера, чтобы в дальнейшем как-то это анализировать и обрабатывать: Спойлер int step=300;//шаг bool BesideHave=false;// есть/нет открытые ордера рядомint orderType;//сюда запомним тип обнаруженного ордера double orderPrice;//сюда запомним цену обнаруженного ордера for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { //если это наш ордер if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol()) { //если это не отложенный ордер if(OrderType()==OP_BUY || OrderType()==OP_SELL) { //если расстояние от текущей цены до этого ордера меньше или равно заданному шагу if(MathAbs(OrderOpenPrice()-Bid) { BesideHave=true;orderType=OrderType(); orderPrice=OrderOpenPrice(); break; } } } } } Теперь, мы знаем что за ордер был обнаружен и его цену. Соответственно становится возможным как-то решить этот момент: Цитата ...либо устанавливать стоповые ордера выше (если байстоп) / ниже (если селлстоп) рыночных ордеров на шаг сетки. В общем, думать каким именно должен быть код, должны Вы сами. Я дал Вам направление для развития мысли. Изменено 10 марта, 2017 пользователем DreamWorks 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Irina11 Опубликовано 10 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 марта, 2017 Здравствуйте! Для того что бы в настройках советника указать баланс написать вот так? double acc_balance = 100; Или не правильно? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 10 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 марта, 2017 Irina11, double acc_balance = AccountInfoDouble(ACCOUNT_BALANCE);//баланс счета 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 10 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 марта, 2017 подскажите как из n-последних свечей подсчитать в пунктах тела отдельно бычьих, отдельно медвежьих Вот так: Спойлер //считаем тела закрытых баров int NumBars=10;//кол-во обрабатываемых последних свечей double Bulls=0;//сумма тел бычьих свечей double Bears=0;//сумма тел медвежьих свечей //в цикле перебираем последние NumBars закрытых свечей, //считаем размеры их тел //и складываем в переменные Bulls & Bears for(int i=1;i { double body=MathAbs(Open-Close);//Считаем размер тела текущей свечи if(Open) Bulls+=body;//если свеча бычья, то складываем в переменную Bulls else Bears+=body;//если медвежья, то складываем в переменную Bears } 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Roman 13 Опубликовано 12 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 марта, 2017 Здравствуйте, подскажите, как сделать отложенный вход в сделку, например : произошло пересечение двух средних, но советник открывает сделку не сразу , а с наступлением другого сигнала, например цена опустилась ниже одной средних, а потом поднялась выше. Спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти