kipjatok001
Kipjatok001 Best Trader

 
Уровень 13

  Торгую в компаниях:


Группа "Напишу исправлю советник индикатор MQL4"

Рейтинг 27



Простой советник

Добрый день. Помогите пожалуйста сделать простой советник.
Скорее помошник. К открытому ордеру ставим параметры:
Режим доливка. Ставим от открытого ордер на расстоянии х пунктов ордер в эту же сторону с лотом, увеличенным в х раз.
Заданы ТП и СЛ
Режим страховка. Ставим от открытого ордер на расстоянии х пунктов ордер в противоположную сторону с лотом, увеличенным в х раз.
Заданы ТП и СЛ
Закрытие всех ордеров при достижении прибыли в х пунктов.
  • +2
  • Просмотров: 1366
  • 20 февраля 2021, 13:32
  • kipjatok001
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Напишу исправлю советник индикатор MQL4", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Добавить спред
Следующая запись в группе  
Трал по стохастику
23 августа 2020
24 мая 2021

Брокер для ваших роботов, 15 лет на рынке

Комментарии (7)

+
0
Ну это не простой советник!
По этому заданию надо приложить не мало усилия и поддержать финансово(28$)
Обсудить тех.задание: forex-time@mail.ru
avatar

  15  forextime Сообщений: 141 - ExpertFX

  • 20 февраля 2021, 16:45
+
0
Собрал советник-полуавтомат по ТЗ на функциях Андрея (для лучшего понимания кода, дольше выискивал нужные функции<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; '>&nbsp; <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/017.gif' alt=' <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/017.gif' alt=' ;) '>&nbsp; '>&nbsp; .
<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:21
avatar

  16  ssg Сообщений: 817

  • 21 февраля 2021, 07:18
+
0
Это Андрей так пишет??
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
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());}
           }
        }
     }
  }

=================================================
Что за проверка OrderType()==-1
Тип ордера может быть от 0 до 5


=================================================
Правильно будет так
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
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){ 
              RefreshRates();          
              if(OrderType()==OP_BUYLIMIT  && ot==2) cl=OrderDelete(OrderTicket());
              if(OrderType()==OP_SELLLIMIT && ot==3) cl=OrderDelete(OrderTicket());
              if(OrderType()==OP_BUYSTOP   && ot==4) cl=OrderDelete(OrderTicket());
              if(OrderType()==OP_SELLSTOP  && ot==5) cl=OrderDelete(OrderTicket());
              if(OrderType()>1 && ot==-1) cl=OrderDelete(OrderTicket());
           }
        }
     }
  }  

Иначе для чего он вызывает поиск типа ордера (ot) ??
Редактирован: 21 февраля 2021, 12:23
avatar

  15  forextime Сообщений: 141 - ExpertFX

  • 21 февраля 2021, 11:30
+
0
Это Вам тип ордера должен???
Типы торговых операций

Тип операции в функции OrderSend() может быть указан в виде предопределённой константы или её значения и в соответствии с типом торговой операции:

Константа	Значение	Торговая операция
OP_BUY	0	Покупка
OP_SELL	1	Продажа
OP_BUYLIMIT	2	Отложенный ордер BUY LIMIT
OP_SELLLIMIT	3	Отложенный ордер SELL LIMIT
OP_BUYSTOP	4	Отложенный ордер BUY STOP
OP_SELLSTOP	5	Отложенный ордер SELL STOP

Почитайте опять учебник.https://book.mql4.com/ru/appendix/trading
avatar

  16  ssg Сообщений: 817

  • 21 февраля 2021, 13:13
+
0
При Вашей записи читается:
пробегаем по всем ордерам в цикле с нашим магиком и нашим символом
и если (ТИП ОРДЕРА БАЙЛИМИТ И ТИП ОРДЕРА БАЙЛИМИТ) ТОГДА УДАЛЯЕМ ЕГО.
Андрей многое брал не один год с сайта www.mql5.com/ru/articles с форума этого сайта и базы кодов этого сайта.А так же сам добавлял базу своими работами, например:
https://www.mql5.com/ru/code/166

Советник «Боллинджер на стероидах» — эксперт для 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
avatar

  16  ssg Сообщений: 817

  • 21 февраля 2021, 13:30
+
+1
Андерй пишет в одном и том же стиле и на одном и том же уровне
Не развивается как программист, работает шаблонно, я ему об этом говорил и это мы уже обсуждали с ним.
===========================
По поводу предъявы по вознаграждению за выполнение работы
Любая работа должна вознаграждаться если она требует усилий
У меня многие работы выполнены бесплатно, так же есть и платные работы но только из-за сложности, а не от жадности
Если кажется что это пустяковое тех.задание, тогда интересно будет посмотреть на её выполнение со стороны))
OrderType()==-1 это полный бред, но дилетанту сложно будет понять, а спорить и что-то доказывать на эту тему не собираюсь это точно!
avatar

  15  forextime Сообщений: 141 - ExpertFX

  • 21 февраля 2021, 14:46
+
+1
Что значит мне тип ордера должен??
Вот и где же в этой предоставленной документации обозначено что если OrderType()==-1 то выбирается любой тип ордера??
avatar

  15  forextime Сообщений: 141 - ExpertFX

  • 21 февраля 2021, 14:35

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий