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

Рейтинг 2146



РЕКОМЕНДУЮ



Написать советник

Добрый день
Можете написать советник по такой теме.
1. Советник открывает 2 ордера, но главное чтоб ордер Sell было выше Buy

2. После чего советник выставляет стоп лосс (на выбор) маленький

3. После срабатывания стоп лосса выставлялся ордер снова Sell

4. Должно примерно получиться такая картина

5. После чего все закрывалось по профиту

Суть идее в том что советник будет открывать два ордера Sell выше Buy и по задеванию стопа, будет открывать снова ордер тот который закрылся, ордер Buy будет покрывать все убытки Sell по закрытию стопа, будет создаваться коридор, после того как тред отгуляет, и цена будет делать откат все закрывается по профиту.

— Либо лучше сделать так

1. Открываются два ордера Buy 0.05 и Sell 0.05



2. После чего один закрывается по стопу


3. Открывается другой ордер Sell но уже 0.05 а уже 0.01


Потом закрывается по профиту, тем самым ордер buy окупает все закрытые ордера по стопу Sell.
— Можно сделать с мартином
Ордер который закрывался по стопу увеличивался

Настройки советник:
столосс
безубыток (если ордер закрывался по безубытку то снова открывался такой же ордер)
закрытие по профиту
если возможно добавить мартин
— Вот советник для ознакомления с логикой, он откусывает позиций и выставляет снова ордер, но тем самым риски большие, если у цены долгий тренд
DVA_Martin_9.mq4 (19 Kb)
  • 0
  • Просмотров: 6187
  • 30 июля 2018, 18:33
  • deb555
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
а если открыли бай а цена пошла против нас тогда что?
avatar

  35  AM2 Сообщений: 16256 - Андрей

  • 30 июля 2018, 18:57
+
0
Ордер просто закрывается по стопу у обоих ордеров должны быть стопы, то есть он по ним будут расширяться, создавая коридор, если сделать с мартином, то эффект лучше будет или без него лучше я не знаю, у меня есть советник на подобие, могу выложить он интересный, но там мартин по другому работает.
Редактирован: 30 июля 2018, 19:15
avatar

  8  deb555 Автор Сообщений: 69

  • 30 июля 2018, 19:10
+
0
клади :) 
avatar

  35  AM2 Сообщений: 16256 - Андрей

  • 30 июля 2018, 20:55
+
0
Выше выложил, только настройки должны те которые прописаны в советнике, кроме лота, так он переворачиваться на buy и sell, но мартин все там губит
avatar

  8  deb555 Автор Сообщений: 69

  • 30 июля 2018, 21:15
+
0
подобный я здесь делал: zakaz.opentraders.ru/46453.html
мне интересен вариант у которого средства все время выше баланса
avatar

  35  AM2 Сообщений: 16256 - Андрей

  • 30 июля 2018, 21:59
+
0
Вместо ТР ставьте локи и эквити будет всегда выше. А смысл только в том, чтобы иметь запас для чего-то рискованного. Иначе свопы будут разъедать вашу незафиксированную прибыль.
Правда, если бы Вы зафиксировались, то риск бы не уменьшился. Но когда эквити выше дэпо, спится спокойнее.
Редактирован: 15 апреля 2022, 01:37
avatar

  7  kvashnin007 Сообщений: 598 - Андрей

  • 15 апреля 2022, 00:24
+
0
на 5-е
avatar

  35  AM2 Сообщений: 16256 - Андрей

  • 30 июля 2018, 21:22
+
0
Вот я его выложил, тоже интересен, но тока не на всех парах получается иногда сразу льет из за мартина, если мартин обуздать получиться хитрый советник.
avatar

  8  deb555 Автор Сообщений: 69

  • 30 июля 2018, 22:06
+
+3
вы сговорились что ли мне граали подсовывать!? :D 

avatar

  35  AM2 Сообщений: 16256 - Андрей

  • 30 июля 2018, 22:30
+
0
заверните два ;) *zapoy* 
avatar

  13  Pesha Сообщений: 222 - ¯\_(ツ)_/¯

  • 30 июля 2018, 22:36
+
0
А то, нужно когда то начинать, хоть копейки с рынка получать
avatar

  8  deb555 Автор Сообщений: 69

  • 30 июля 2018, 22:53
+
0
вы наш 2000-й посетитель!



www.opentraders.ru/downloads/2000/
avatar

  35  AM2 Сообщений: 16256 - Андрей

  • 30 июля 2018, 22:51
+
0
Круто, хоть где то 2000:D , Андрей можешь в него мартин засунуть, закрытый по стопу увеличивал лот?
Редактирован: 30 июля 2018, 23:10
avatar

  8  deb555 Автор Сообщений: 69

  • 30 июля 2018, 23:09
+
0
с мартином еще быстрее сливает :) 


//+------------------------------------------------------------------+
//|                                                       Lavina.mq4 |
//|                                              Copyright 2018, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 2;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern double Profit     = 35;        // профит
extern int StopLoss      = 5000;     // лось
extern int TakeProfit    = 400;      // язь
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=clrNONE;
   double sl=0,tp=0;
   datetime expiration=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,expiration,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderProfit()>0) break;
            if(OrderProfit()<0)
              {
               lot=OrderLots()*KLot;
               break;
              }
           }
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
double AllProfit(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 && (ot==0 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 CountOrders(int type=-1)
  {
   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()==type || (OrderType()>=0 && type==-1)) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountOrders(0)<1)PutOrder(0,Ask);
   if(CountOrders(1)<1)PutOrder(1,Bid);

   if(AllProfit()>Profit && Profit>0) CloseAll();

   Comment("\n Profit: ",AllProfit());
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16256 - Андрей

  • 30 июля 2018, 23:12
+
0
Мартин не много не так получился
1. Вот пила 1 без мартина

2. А вот с мартином

В первом Buy и Sell
Во втором выход Sell и Buy
avatar

  8  deb555 Автор Сообщений: 69

  • 30 июля 2018, 23:27
+
0
Немного упростил. На реале из-за 123 строки работать не будет.

<code>//+------------------------------------------------------------------+
//|                                                 DVA_Martin_9.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 strict
input int TakeProfit          = 326; // профит 
input double K_TP             = 0.8; // Коэффициент увеличкения ТР
input int Step                = 285; // шаг первого ордера
input int Delta               = -13; // добавка к шагу со второго ордера, увеличивает расстояние шага на "дельта" от предыдущего
input double Lot              = 0.01;// первый лот открытия
input double MaximalLot       = 0.6; // максимальный лот, который мы разрешаем
input int DotLot              = 2 ;  // 0-лоты 1,  1-лоты 0.1,  2-лоты 0.01  
input int MaxTrades           = 8;   // максимальное количество ордеров одного направления
input double MultiplicatorLot = 2.1; // умножаем последующие ордера
input int Magic               = 333; // индивидуальный номер, по которому советник видет свои сделки
input int Slippage            = 100; // допустимое проскальзывание на новостях в пунктах
string Expert                 = "Martin_9";
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int OnInit()
  {

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
// Пременные для хранения собранной информации
   int b=0,s=0;
   double BuyMinPrice=0,SelMaxPrice=0,BuyMinLot=0,SelMaxLot=0;
   double LotBuy=0;
   double LotSel=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderSymbol()==Symbol())
            if(OrderMagicNumber()==Magic)
              {
               if(OrderType()==OP_BUY)
                 {
                  b++; // Считаем открытые ордера на покупку
                  if(OrderOpenPrice()<BuyMinPrice || BuyMinPrice==0) // Находим нижний бай ордер
                    {
                     BuyMinPrice=OrderOpenPrice(); // Запоминаем его цену
                     BuyMinLot=OrderLots(); // Запоминаем его лот
                    }
                 }
               if(OrderType()==OP_SELL)
                 {
                  s++; // Считаем открытые ордера на продажу
                  if(OrderOpenPrice()>SelMaxPrice) // Находим верхний сел ордер
                    {
                     SelMaxPrice=OrderOpenPrice(); // Запоминаем его цену
                     SelMaxLot=OrderLots(); // Запоминаем его лот
                    }
                 }
              }
// Расчитываем лоты
   if(b==0) // Если нет ордеров используем лот из настроек
      LotBuy=Lot;
   else // Иначе используем свой расчет
      LotBuy=BuyMinLot*MultiplicatorLot;
      if(LotBuy>MaximalLot) LotBuy=MaximalLot;//ограничиваем по максимальному лоту
      LotBuy=NormalizeDouble(LotBuy, DotLot);

   if(s==0)
      LotSel=Lot; // Если нет ордеров используем лот из настроек
   else
      LotSel=SelMaxLot*MultiplicatorLot; // Иначе используем свой расчет
      if(LotSel>MaximalLot) LotSel=MaximalLot;//ограничиваем по максимальному лоту
      LotSel=NormalizeDouble(LotSel, DotLot);

   if(b==0 || (b>0 && b<= MaxTrades && Ask<NormalizeDouble(BuyMinPrice-(Step+Delta*b)*Point(),Digits()))) // Если ордеров нет откроем ордер // Если ордера есть и условие выполнено откроем ордер иным лотом
     {
      if(OrderSend(Symbol(),OP_BUY,LotBuy,Ask,Slippage,0,0,Expert + "-" + (string)b + "-" + (string)Step + "-",Magic,0,clrBlue)<0) // Если ордер не открылся
         Print("Error N ",GetLastError()); // Сообщим об ошибке
     }
   if(s==0 || (s>0 && s<= MaxTrades  && Bid>NormalizeDouble(SelMaxPrice+(Step+Delta*s)*Point(),Digits())))// Если ордеров нет откроем ордер // Если ордера есть и условие выполнено откроем ордер иным лотом
     {
      if(OrderSend(Symbol(),OP_SELL,LotSel,Bid,Slippage,0,0,Expert + "-" + (string)s + "-" + (string)Step + "-",Magic,0,clrRed)<0)  // Если ордер не открылся
         Print("Error N ",GetLastError()); // Сообщим об ошибке
     }
// посчитаем математические формулы средних цен
   double BuyAwerage=0,SelAwerage=0,BuyPrice=0,SelPrice=0,BuyLot=0,SelLot=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderSymbol()==Symbol())
            if(OrderMagicNumber()==Magic)
              {
               if(OrderType()==OP_BUY)
                 {
                  BuyPrice+=OrderOpenPrice()*OrderLots(); // добавить к переменной BuyPrice Цена оредра 1 * лот ордера 1
                  BuyLot+=OrderLots(); // суммируем лоты
                 }
               if(OrderType()==OP_SELL)
                 {
                  SelPrice+=OrderOpenPrice()*OrderLots(); // добавить к переменной SelPrice Цена оредра 1 * лот ордера 1
                  SelLot+=OrderLots(); // суммируем лоты
                 }
              }
            double TP=TakeProfit*MathPow(K_TP, b)*Point;  
            BuyAwerage=NormalizeDouble(BuyPrice/BuyLot+TP,Digits()); // Произведем расчет средней цены
            SelAwerage=NormalizeDouble(SelPrice/SelLot-TP,Digits()); // Произведем расчет средней цены 
// ---
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderSymbol()==Symbol())
            if(OrderMagicNumber()==Magic)
              {
               if(OrderType()==OP_BUY)
                 {
                  if(b==1) // Если ордер один и у него нет тейк профита 
                     if(OrderTakeProfit()==0)
                        if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(OrderOpenPrice()+TakeProfit*Point(),Digits()),0,clrGreen)==false)// Добавим тейк а в случае ошибки сообщим трейдеру
                           Print("Error N ",GetLastError());

                  if(b>1)// Если ордеров больше 1
                     if(OrderTakeProfit()!=BuyAwerage) // И тейк не равен требуемой цене  //?????????????????????????????????????
                        if(Ask<BuyAwerage)// Условия торговли соблюдены
                           if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(BuyAwerage,Digits()),0,clrGreen)==false) // Модифицируем ордер или сообщим об ошибке
                              Print("Error N ",GetLastError());
                 }
               if(OrderType()==OP_SELL)
                 {
                  if(s==1) // Если ордер один и у него нет тейк профита 
                     if(OrderTakeProfit()==0)
                        if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(OrderOpenPrice()-TakeProfit*Point(),Digits()),0,clrGreen)==false)// Добавим тейк а в случае ошибки сообщим трейдеру
                           Print("Error N ",GetLastError());
                  if(s>1)// Если ордеров больше 1
                     if(OrderTakeProfit()!=SelAwerage) // И тейк не равен требуемой цене
                        if(Bid>SelAwerage)// Условия торговли соблюдены
                           if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(SelAwerage,Digits()),0,clrGreen)==false) // Модифицируем ордер или сообщим об ошибке
                              Print("Error N ",GetLastError());
                 }
              }

  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
</code>

Редактирован: 15 апреля 2022, 01:51
avatar

  7  kvashnin007 Сообщений: 598 - Андрей

  • 15 апреля 2022, 01:51

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