Добрый день. Помогите пожалуйста сделать простой советник.
Скорее помошник. К открытому ордеру ставим параметры:
Режим доливка. Ставим от открытого ордер на расстоянии х пунктов ордер в эту же сторону с лотом, увеличенным в х раз.
Заданы ТП и СЛ
Режим страховка. Ставим от открытого ордер на расстоянии х пунктов ордер в противоположную сторону с лотом, увеличенным в х раз.
Заданы ТП и СЛ
Закрытие всех ордеров при достижении прибыли в х пунктов.
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!
Комментарии (7)
По этому заданию надо приложить не мало усилия и поддержать финансово(28$)
Обсудить тех.задание: forex-time@mail.ru
15 forextime Сообщений: 141 - ExpertFX
<code>//+------------------------------------------------------------------+ //| Простой советник-полуавтомат позиция и стор ордера.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, AM2" #property link "http://www.forexsystems.biz" #property version "1.00" #property strict //--- Inputs extern double Lots = 0.1; // лот extern double KLots = 2; // увеличение лота extern double Profit = 5; // прибыль extern int StopLoss = 0; // лось extern int TakeProfit = 0; // язь extern int DistStop = 100; // расстояние до стопордера extern int Slip = 30; // реквот extern int Magic = 0; // магик //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- PutButton("B",100,120,"BUY"); PutButton("S",100,80,"SELL"); PutButton("C",100,40,"CLOSE"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectDelete(0,"B"); ObjectDelete(0,"S"); ObjectDelete(0,"C"); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void PutButton(string name,int x,int y,string text) { ObjectCreate(0,name,OBJ_BUTTON,0,0,0); //--- установим координаты кнопки ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y); //--- установим размер кнопки ObjectSetInteger(0,name,OBJPROP_XSIZE,80); ObjectSetInteger(0,name,OBJPROP_YSIZE,30); //--- установим угол графика, относительно которого будут определяться координаты точки ObjectSetInteger(0,name,OBJPROP_CORNER,3); //--- установим текст ObjectSetString(0,name,OBJPROP_TEXT,text); //--- установим шрифт текста ObjectSetString(0,name,OBJPROP_FONT,"Arial"); //--- установим размер шрифта ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12); //--- установим цвет текста ObjectSetInteger(0,name,OBJPROP_COLOR,Red); //--- установим цвет фона ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White); //--- установим цвет границы ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue); //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(0,name,OBJPROP_HIDDEN,false); //--- установим приоритет на получение события нажатия мыши на графике ObjectSetInteger(0,name,OBJPROP_ZORDER,0); } //+------------------------------------------------------------------+ //| Закрытие позиции по типу ордера | //+------------------------------------------------------------------+ void CloseAll(int ot=-1){ bool cl; for(int i=OrdersTotal()-1; i>=0; i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){ if(OrderType()==OP_BUY || OrderType()==-1) {RefreshRates(); cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),Slip,White); } if(OrderType()==OP_SELL || OrderType()==-1) {RefreshRates(); cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slip,White); } } } } } //+------------------------------------------------------------------+ //| Закрытие позиции по типу ордера | //+------------------------------------------------------------------+ void DeleteAll(int ot=-1){ bool cl; for(int i=OrdersTotal()-1; i>=0; i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){ if(OrderType()==OP_BUYLIMIT){RefreshRates();cl=OrderDelete(OrderTicket());} if(OrderType()==OP_SELLLIMIT){RefreshRates();cl=OrderDelete(OrderTicket());} if(OrderType()==OP_BUYSTOP){RefreshRates();cl=OrderDelete(OrderTicket());} if(OrderType()==OP_SELLSTOP){RefreshRates();cl=OrderDelete(OrderTicket());} if(OrderType()==-1){RefreshRates();cl=OrderDelete(OrderTicket());} } } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void PutOrder(int type,double price,double lot){ int r=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,lot,NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr); return; } //+------------------------------------------------------------------+ //| Профит всех ордеров по типу ордера | //+------------------------------------------------------------------+ double LastProfit(int ot=-1){ double pr=0; for(int i=OrdersTotal()-1; i>=0; i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){ if(OrderType()==0 || OrderType()==-1){pr+=OrderProfit()+OrderCommission()+OrderSwap();} if(OrderType()==1 || OrderType()==-1){pr+=OrderProfit()+OrderCommission()+OrderSwap();} } } } return(pr); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick(){ if(LastProfit(0)>Profit){CloseAll(0);DeleteAll(2);DeleteAll(4);} if(LastProfit(1)>Profit){CloseAll(1);DeleteAll(3);DeleteAll(5);} if(LastProfit()>Profit){CloseAll();DeleteAll();} if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1) { PutOrder(0,Ask,Lots); PutOrder(4,Ask+DistStop*_Point,Lots*KLots);//Режим доливка.Ставим от открытого ордер на расстоянии х пунктов ордер в эту же сторону с лотом, увеличенным в х раз. PutOrder(5,Bid-DistStop*_Point,Lots*KLots);//Режим страховка.Ставим от открытого ордер на расстоянии х пунктов ордер в противоположную сторону с лотом, увеличенным в х раз. ObjectSetInteger(0,"B",OBJPROP_STATE,false); } if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1) { PutOrder(1,Bid,Lots); PutOrder(5,Bid-DistStop*_Point,Lots*KLots);//Режим доливка.Ставим от открытого ордер на расстоянии х пунктов ордер в эту же сторону с лотом, увеличенным в х раз. PutOrder(4,Ask+DistStop*_Point,Lots*KLots);//Режим страховка.Ставим от открытого ордер на расстоянии х пунктов ордер в противоположную сторону с лотом, увеличенным в х раз. ObjectSetInteger(0,"S",OBJPROP_STATE,false); } if(OrdersTotal()>0 && ObjectGetInteger(0,"C",OBJPROP_STATE)==1) { CloseAll(); DeleteAll(); ObjectSetInteger(0,"C",OBJPROP_STATE,false); } Comment("\n Last Profit: ",LastProfit()); } //+------------------------------------------------------------------+ </code>Редактирован: 21 февраля 2021, 07:2116 ssg Сообщений: 817
=================================================
Что за проверка OrderType()==-1
Тип ордера может быть от 0 до 5
=================================================
Правильно будет так
Иначе для чего он вызывает поиск типа ордера (ot) ?? Редактирован: 21 февраля 2021, 12:23
15 forextime Сообщений: 141 - ExpertFX
Почитайте опять учебник.https://book.mql4.com/ru/appendix/trading
16 ssg Сообщений: 817
пробегаем по всем ордерам в цикле с нашим магиком и нашим символом
и если (ТИП ОРДЕРА БАЙЛИМИТ И ТИП ОРДЕРА БАЙЛИМИТ) ТОГДА УДАЛЯЕМ ЕГО.
Андрей многое брал не один год с сайта www.mql5.com/ru/articles с форума этого сайта и базы кодов этого сайта.А так же сам добавлял базу своими работами, например:
Советник «Боллинджер на стероидах» — эксперт для MetaTrader 5
Andrey Kornishkin | Russian
Просмотров:
14479
Рейтинг:
голосов: 62
Опубликован:
2010.08.12 17:20
Обновлен:
2016.11.22 07:33
bolbands.mq5 (14.02 KB) просмотр
Почитайте, может и для Вас найдется новая информация.
Или Вы обиделись, что деньги прошли мимо??
Так деньги нужно зарабатывать, а Вы хотели «навариться» на элементарной просьбе о помощи.Тем более что услуга то пустяковая.
А почему в записи if(OrderType()==-1)присутствует -1 сами почитайте документацию. Редактирован: 21 февраля 2021, 13:31
16 ssg Сообщений: 817
Не развивается как программист, работает шаблонно, я ему об этом говорил и это мы уже обсуждали с ним.
===========================
По поводу предъявы по вознаграждению за выполнение работы
Любая работа должна вознаграждаться если она требует усилий
У меня многие работы выполнены бесплатно, так же есть и платные работы но только из-за сложности, а не от жадности
Если кажется что это пустяковое тех.задание, тогда интересно будет посмотреть на её выполнение со стороны))
OrderType()==-1 это полный бред, но дилетанту сложно будет понять, а спорить и что-то доказывать на эту тему не собираюсь это точно!
15 forextime Сообщений: 141 - ExpertFX
Вот и где же в этой предоставленной документации обозначено что если OrderType()==-1 то выбирается любой тип ордера??
15 forextime Сообщений: 141 - ExpertFX
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий