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

Рейтинг 2086



РЕКОМЕНДУЮ



Добавление новой функции в "Доработка советника ALLCandles TMA, добавление фильтрующей TMA старшего порядка"

Добрый день.
Ищу поручителя.
Несколько ранее вы доработали вами же сделанный советник. «Доработка советника ALLCandles TMA, добавление фильтрующей TMA старшего порядка» от 26 августа 2021. Очень интересный советник. Но хотелось бы внести некоторые изменения.
На данный момент при появлении сигнала на покупку или продажу открывается ордер. Далее на каждой свечке (при условиях совершения сделки) все повторяется. В результате остается куча открытых ордеров.
Можно все, что существует оставить (иногда это имеет право на жизнь), но добавить еще один вариант. При появлении сигнала на открытие ордера, открывается один ордер. И все. Закрытие происходит или по профиту (уже есть), или по противоположному сигналу (это скорее всего поменяется цвет на коротком индикаторе).
Если закрытие по профиту, и профит не достигнут (и цвет короткого индикатора поменялся), то ордер висит. Как только цвет короткого индикатора опять поменяется (возникнут условия сделки), то опять откроется один ордер и профит уже станет общим на эти два ордера. И так далее.
  • 0
  • Просмотров: 3722
  • 29 августа 2021, 19:25
  • 19581962
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
добавил ограничение поз и закрытие по обратному сигналу: www.opentraders.ru/downloads/3095/
avatar

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

  • 31 августа 2021, 20:37
+
0
Добрый день. Спасибо за работу. Я уже подумал, что поручителем никто не хочет, значит думаю пролетел.
Посмотрел вашу работу. К сожалению, это не совсем то. Как он работает сейчас. При сигнале, предположим на покупку, открывает ордер. И далее, при продолжающемся сигнале, на каждом баре идет открытие ордеров. Если по тейку не сдался этот объем ордеров, то он весит. И при противоположном сигнале индикаторов, происходит продажа, на каждом баре, И если индикатор позволит, то ордера будут набираться.
Я подумал, что при сигнале на покупку должен открыться один ордер, и все. Если он уйдет по тейку, то хорошо. Если нет, то весит. Индикатор покажет продажу, новый ордер откроется вниз. Если опять сигнал индикатора наверх, то опять открывается ордер вверх. Их уже будет два при общем тейке. Сейчас в общем так и происходит, только ордера набираются в большом количестве и на каждом баре.
Вы сейчас поставили ограничитель ордеров. Но они опять открываются на каждом баре. Если я ставлю один, то один и открывается, и новых ордеров по новому сигналу уже нет. И в противоположную сторону тоже нет.
И добавили закрытие ордера по противоположному сигналу. Все правильно, так и работает. Но я думал (если конечно это возможно) закрытие позиции по короткому индикатору. Например, произошла покупка. Оба индикатора одного цвета смотрят вверх. Через некоторое время короткий индикатор поменял цвет. Вот здесь происходит сдача ордеров.
Если можно поправить, если нет, то нет.
С уважением.
avatar

  4  19581962 Автор Сообщений: 71

  • 31 августа 2021, 21:47
+
0
Я подумал, что при сигнале на покупку должен открыться один ордер, и все.
сделайте число поз — 1
avatar

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

  • 31 августа 2021, 22:01
+
0
Уже пробовал. Открывает по индикатору один ордер. При смене направления индикатора, противоположную позу не открывает и при обратном перевороте не добавляется. И правильно, ведь поза разрешенная одна.
avatar

  4  19581962 Автор Сообщений: 71

  • 31 августа 2021, 22:13
+
0
Попробуйте так:
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double blu = iCustom(NULL,0,IndName,Fast,Slow,Price,0,0);
   double red = iCustom(NULL,0,IndName,Fast,Slow,Price,1,0);

   double blu2 = iCustom(NULL,0,IndName,Fast2,Slow2,Price2,0,0);
   double red2 = iCustom(NULL,0,IndName,Fast2,Slow2,Price2,1,0);

   bool buy = blu!=EMPTY_VALUE && blu2!=EMPTY_VALUE;
   bool sell = red!=EMPTY_VALUE && red2!=EMPTY_VALUE;


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

      if(AllProfit(0)>=BuyProfit && BuyProfit>0)
         CloseAll(0);

      if(AllProfit(1)>=SellProfit && SellProfit>0)
         CloseAll(1);
         
   if(t!=Time[0])
     {
      if(CloseSig>0)
        {
         if(buy)
           {
            CloseAll(1);
           }
         if(sell)
           {
            CloseAll(0);
           }
        }

      if(Hour()>=StartHour && Hour()<=EndHour)
        {
         if(buy && (CountTradeS(0)<1 || (LastOrderType()==1 && CountTradeS(0)<Count)))
           {
            PutOrder(0,Ask);
           }
         if(sell && (CountTradeS(0)<1 || (LastOrderType()==1 && CountTradeS(1)<Count)))
           {
            PutOrder(1,Bid);
           }
        }
      t=Time[0];
     }

   Comment("\n Trades: ",CountTradeS(0),
           "\n Trades: ",CountTradeS(1),
           "\n Profit : ",AllProfit(),
           "\n Buy Profit : ",AllProfit(0),
           "\n Sell Profit : ",AllProfit(1),
           "\n Blu: ",blu,
           "\n Red: ",red,
           "\n Blu2: ",blu2,
           "\n Red2: ",red2);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTradeS(int ot=-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()<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Тип последней сделки                                             |
//+------------------------------------------------------------------+
int LastOrderType(){
   int type=8;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0)
              {
               type=0;//buy
               break;
              }
            if(OrderType()==1)
              {
               type=1;//sell
               break;
              }
           }
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
avatar

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

  • 1 сентября 2021, 05:11
+
0
Спасибо за работу. Но результат не достигнут. Если счетчик ставлю 1, то дальше, естественно ничего не происходит. Если ставлю больше, то опять сделки на каждом баре. Даже в чем то хуже, потому что при повторном перевороте индикаторов добавление ордеров не происходит, как в первоначальном варианте.
И сдача по сигналу. Все по старому. Я думал, что закрыть ордера можно по изменению цвета короткого индикатора. А сейчас закрытие происходит по изменению цвета обоих индикаторов, как при открытии. При этом теряется прибыль.
Может это и невозможно сделать.
С уважением.
avatar

  4  19581962 Автор Сообщений: 71

  • 1 сентября 2021, 10:22
+
0
Попробуйте так:
<code>
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double blu = iCustom(NULL,0,IndName,Fast,Slow,Price,0,1);
   double red = iCustom(NULL,0,IndName,Fast,Slow,Price,1,1);
   double blu1 = iCustom(NULL,0,IndName,Fast,Slow,Price,0,2);
   double red1 = iCustom(NULL,0,IndName,Fast,Slow,Price,1,2);
   //--------------------------------------------------------

   double blu2 = iCustom(NULL,0,IndName,Fast2,Slow2,Price2,0,1);
   double red2 = iCustom(NULL,0,IndName,Fast2,Slow2,Price2,1,1);
   double blu3 = iCustom(NULL,0,IndName,Fast2,Slow2,Price2,0,2);
   double red3 = iCustom(NULL,0,IndName,Fast2,Slow2,Price2,1,22);
   //-----------------------------------------------------------

   bool buy = blu!=EMPTY_VALUE && blu2!=EMPTY_VALUE && (blu1==EMPTY_VALUE || blu3==EMPTY_VALUE);
   bool sell = red!=EMPTY_VALUE && red2!=EMPTY_VALUE && (red1==EMPTY_VALUE || red3==EMPTY_VALUE);

   if(t!=Time[0])
     {
      if(AllProfit()>=Profit && Profit>0)
         CloseAll();

      if(AllProfit(0)>=BuyProfit && BuyProfit>0)
         CloseAll(0);

      if(AllProfit(1)>=SellProfit && SellProfit>0)
         CloseAll(1);

      if(CloseSig>0)
        {
         if(buy)
           {
            CloseAll(1);
           }
         if(sell)
           {
            CloseAll(0);
           }
        }

      if(Hour()>=StartHour && Hour()<=EndHour && CountTrades()<Count)
        {
         if(buy)
           {
            PutOrder(0,Ask);
           }
         if(sell)
           {
            PutOrder(1,Bid);
           }
        }
      t=Time[0];
     }

   Comment("\n Trades: ",CountTrades(),
           "\n Profit : ",AllProfit(),
           "\n Buy Profit : ",AllProfit(0),
           "\n Sell Profit : ",AllProfit(1),
           "\n Blu: ",blu,
           "\n Red: ",red,
           "\n Blu2: ",blu2,
           "\n Red2: ",red2);
  }
</code>

Все равно, иногда появляется на каждой свечке сигнал, из-за перерисовки (я думаю).
Можно ограничить, один ордер на N свечей.
Редактирован: 4 сентября 2021, 18:47
avatar

  13  verta81 Сообщений: 355

  • 4 сентября 2021, 18:41
+
0
Добрый день спасибо за работу. Нашел опечатку. У вас в коде
double red3 = iCustom(NULL,0,IndName,Fast2,Slow2,Price2,1,22);
Я думаю последняя цифра 2 (сдвиг), а не 22.
Включил в тестере. Похоже на то, что хотел. Посмотрю завтра на центовом, на копеечку.
Закрытие по обратному сигналу (по короткому индикатору, изменение цвета), видимо не реально.

С уважением.
avatar

  4  19581962 Автор Сообщений: 71

  • 5 сентября 2021, 10:40
+
0
«Закрытие по обратному сигналу (по короткому индикатору, изменение цвета), видимо не реально.» — реально.
www.opentraders.ru/downloads/3105/
добавил закрытие по короткому индикатору, выбор одна/несколько сделок на один сигнал, ограничение ордеров на N к-во баров.
avatar

  13  verta81 Сообщений: 355

  • 5 сентября 2021, 17:31
+
0
Добрый день. Погонял несколько дней на центовом счете. Все отлично. Очень хорошая работа. Спасибо.
С уважением.
avatar

  4  19581962 Автор Сообщений: 71

  • 8 сентября 2021, 12:32
+
0
пожалуйста)
avatar

  13  verta81 Сообщений: 355

  • 8 сентября 2021, 19:47

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