RinsWind

 
Уровень 3


Группа "Стол заказов MQL"

Рейтинг 2073



РЕКОМЕНДУЮ




Лучшее от RinsWind



Скрипт для закрытия ордеров Комментариев 15
2019-06-30 12:40:32Рейтинг 0

Совок для ТМА от AМ2 Комментариев 3
2021-09-21 14:07:42Рейтинг 0

Fiбо iNdюк Комментариев 2
2021-11-30 03:01:44Рейтинг 0

Советник с динамическим уровнем ТейкПрофит

Добрый день\вечер, вы недавно делали советник где уровень Тп увеличивался как по мартину после срабатывания Stop Loss.
Просьба добавить эту функцию в советник описанный тут ↓ ↓ ↓

1.Когда закинули на график, условный советник открыл ордер Sell с тп 300, коэффициент умножения тп х2.00
2.Когда цена зацепит уровень TP сов откроет новый ордер Sell c тп 600 и новый ордер Buy= равный текущему ордеру =Sell (600 пунктов)
3.Если цена пойдет в сторону покупок и закроет ордер Buy600 то снова откроет такой же новый ордер Buy600 так как ордер Sell600 ещё болтается открытым.
4.Аналогично для функции 2.(Buy)
5. Зациклить алгоритм + вывести в extern параметр[в пунктах наверно] при достижении которого уровень тп ведущего ордера Sell сбрасывается до базового который стоит в настройках.
6.Добавить магик, лот, работа с стопом не предусмотрена/Спасибо!8-) 

  • +0
  • Просмотров: 1205
  • 23 июля 2020, 19:21
  • RinsWind
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
+1
на 27-е
avatar

  34  AM2 Сообщений: 15826 - Андрей

  • 23 июля 2020, 19:49
+
0
Оки
avatar

  3  RinsWind Автор Сообщений: 38

  • 23 июля 2020, 19:54
+
0
опишите весь цикл максимально подробно, со скринами к каждому пункту. советник очень непростой. пока не понятно.

сделал только заготовку:




//+------------------------------------------------------------------+
//|                                                    BuySell36.mq4 |
//|                                              Copyright 2020, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#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 MaxTake    = 3000;     // максимальный тейк
extern double KTake      = 2;        // увеличение тейка
extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 300;      // язь
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

double take=TakeProfit;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   PutButton("B",100,160,"BUY");
   PutButton("S",100,120,"SELL");
   PutButton("C",100,80,"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,9);
//--- установим цвет текста
   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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Результат последней сделки                                       |
//+------------------------------------------------------------------+
int LastDealResult()
  {
   int result=0;
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderProfit()>0)
           {
            result=1;//tp
           }
         if(OrderProfit()<0)
           {
            result=2;//sl
           }
        }
     }
   return(result);
  }
//+------------------------------------------------------------------+
//| Тип последней сделки                                             |
//+------------------------------------------------------------------+
int LastDealType()
  {
   int type=8;
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==0)
           {
            type=0;//buy
           }
         if(OrderType()==1)
           {
            type=1;
           }
        }
     }
   return(type);
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   /*
   1. Открываем селл с тп 300
   2. Закрылись по тп открываем селл 600 и бай 300
   3. ...???
   */

   int r=0;

   if(take>MaxTake)
      take=TakeProfit;

   if(CountTrades()<2)
     {
      if(LastDealResult()==1 && LastDealType()==1)
        {
         take*=KTake;
         r=OrderSend(NULL,1,Lots,NormalizeDouble(Bid,_Digits),Slip,0,NormalizeDouble(Bid-take*_Point,_Digits),"",Magic,0,Red);
         r=OrderSend(NULL,0,Lots,NormalizeDouble(Ask,_Digits),Slip,0,NormalizeDouble(Ask+take/KTake*_Point,_Digits),"",Magic,0,Blue);
        }

      if(LastDealResult()==1 && LastDealType()==0)
        {
         take*=KTake;
         r=OrderSend(NULL,1,Lots,NormalizeDouble(Bid,_Digits),Slip,0,NormalizeDouble(Bid-take/KTake*_Point,_Digits),"",Magic,0,Red);
         r=OrderSend(NULL,0,Lots,NormalizeDouble(Ask,_Digits),Slip,0,NormalizeDouble(Ask+take*_Point,_Digits),"",Magic,0,Blue);
        }
     }

   if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
     {
      r=OrderSend(NULL,0,Lots,Ask,Slip,0,Ask+TakeProfit*_Point,"",Magic,0,Blue);
      ObjectSetInteger(0,"B",OBJPROP_STATE,false);
     }

   if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
     {
      r=OrderSend(NULL,1,Lots,Bid,Slip,0,Bid-TakeProfit*_Point,"",Magic,0,Red);
      ObjectSetInteger(0,"S",OBJPROP_STATE,false);
     }

   if(ObjectGetInteger(0,"C",OBJPROP_STATE)==1)
     {
      CloseAll();
      ObjectSetInteger(0,"C",OBJPROP_STATE,false);
     }

   Comment("");
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+



avatar

  34  AM2 Сообщений: 15826 - Андрей

  • 26 июля 2020, 09:17
+
0
Такое вы делали в некоторых усреднителях… если стоит 1-Sell в настройках то когда закрывается Sell по Тп, на цене Тп-sell сразу же открывает новый ордер Sell с увеличенным тейком X пример(600р) и Buy с таким же тейком равным единственному ордеру Sell
Если цена всё время идёт вниз и закрываются только Sell (сов открыл самый первый ордер 300- закрыл его и открыл 600 и по ценам открытого Sell600 откроет новый рыночный Buy600). Когда селл 1200 бай тоже 1200, если селл 2400 то бай тоже 2400 и так далее пока ТП ведущей позиции Sell не достигнет Максимального лимита тейк профита.
Для опции 2- Buy точно так же само только только теперь ведущий ордер Buy а Sellы будут фиксированными=равными=ордеру Buy

Кнопки тоже не надо, уберите плс. Не знаю какие ещё скрины я могу нарисовать, но если так понятнее не стало то нарисую…
Может это в MQL4 запаристо, можно MQL5
Редактирован: 26 июля 2020, 10:13
avatar

  3  RinsWind Автор Сообщений: 38

  • 26 июля 2020, 09:57
+
0
здесь нужно грамотное тз и четкий алгоритм. дальше не ко мне
Редактирован: 26 июля 2020, 11:13
avatar

  34  AM2 Сообщений: 15826 - Андрей

  • 26 июля 2020, 11:13
+
0
Если кто то сделает, поделитесь pls
avatar

  3  RinsWind Автор Сообщений: 38

  • 26 июля 2020, 11:25

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