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

Рейтинг 2146



РЕКОМЕНДУЮ



Простой безиндикаторный советник

Прошу написать простой безиндикаторный советник по моей стратегии, названной мной «Две лесенки».
Стратегия рассчитывалась для безопасного разгона малого депозита.

1. Запустили советник открылось два ордера стартовым лотом. Один на продажу с Magic, один на покупку с Magic+1.
Далее все ордера со стартовым лотом. Нет ни ТР ни SL.

2. Для ордера на продажу выставили выше на расстоянии Step (в пипсах) от цены открытия ордер SellLimit с Magic.
На расстоянии Step*1.5 от цены открытия ордер BuyStop с Magic. И один ордер SellStоp с Magic ниже на расстоянии Step.

3. При срабатывании очередного SellLimit ордера с Magic номером, все оставшиеся отложенные ордера с номером Magic удаляются
и выставляются в полном комплекте по-новому, как указанно в пункте №2.

4. С ордерами на покупку всё симметрично- наоборот, но с MagicNumber= Magic+1.

5. Тралим общую прибыль в валюте. При достижении заданного уровня закрываем и удаляем все ордера. Начинается новый цикл.

6. Если есть готовая заготовка, то создать на графике две кнопки «Стоп» и «мягкий стоп».
Первая закрывает-удаляет все ордера и останавливает торговлю. Вторая — останавливает торговлю по окончанию цикла.
Этот пункт не столько для меня, сколь для интересантов. Думаю, эта сова им влетит.

Писал по памяти, но вроде ничего не забыл.

С уважением, К.А.Е.
  • +3
  • Просмотров: 2083
  • 23 марта 2023, 03:25
  • kvashnin007
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Интересен советник для разгона маленький депозитов! Сова влетела))), но до конца не понимаю что будет при безоткатном тренде))) стоповыми ордерами будет защищаться? Можно картинку?
avatar

  6  Ramboo Сообщений: 92 - Ram

  • 23 марта 2023, 08:19
+
0
Рэмбо, здравствуйте. Два советника в одном. Каждая ветвь не в «своём» направлении усредняется одинаковыми лотами и при этом и хэджируется. В своем направлении просто пирамидится.

Рост цены для ветки Sell будет постоянно усредняться и жэджироваться. Т.е. ни прибыли не убытка. А для ветки Buy этот рост будет наращиванием лотов в покупку. И наоборот.

Поэтому в рынке ордеров в нужном направлении всегда будет возрастающе больше.

Если какая-то ветвь накопила профит, а цена развернулась, то разворотные сделки запираются в замок и не влияет на рост-убыток. Зато противоположная ветвь в это время пирамидит прибыль. Одновременно открытых ордеров не более четырёх. Нагрузка на маржу минимальная. Ибо рост лотов происходит за счёт незафиксированной прибыли.

Вроде всё понятно описал.


Редактирован: 2 июля 2024, 23:44
avatar

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

  • 23 марта 2023, 10:00
+
0
Доброго дня Андрей!
Ну теперь вроде все понятно, идея конечно нравится! однако на практике как это будет…, видел раньше такие советники. Так понимаю сделок будет много по инструменту? Даже если не сольет, то хоть спред заработает тоже хорошо. Еще немаловажный момент в таких советниках (по моему скромному мнению) наличие скрытых ТП и трала т.к брокер будет не дотягивать до них итд, если ставить явно SL то только в случае запирания прибыли с трала. для брокера процесс закрытия чтобы был невидимым очень бы желательно. Брокеру нельзя показывать ни тп ни сл))))
avatar

  6  Ramboo Сообщений: 92 - Ram

  • 23 марта 2023, 10:23
+
0
Ramboo, этот советник работает без ограничений TP и SL. Прибыль, а если надо и убыток фиксируется по профиту, информация о котором не доступна брокеру.

Почитайте моё дополнение. Оно очень важно.

Дальше, советник, если кто-то возьмётся написать, будет чисто тестовым, для проверки идеи. Если идея оправдается, его ещё надо будет допиливать. Не исключено, что понадобятся и TP и SL… Это всё потом. А пока брокер — лепший корешь.
avatar

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

  • 23 марта 2023, 11:14
+
0
Хотя, пообщавшись с Ramboo, вспомнил еще одну штуку, которую учитывал в своём коде.
У меня ещё были переменная LotMax и OrdersMax. При достижении максимального размера лота или количества ордеров, закрывалось всё безусловно. И… новый цикл.
Почему безусловно? Эквити всегда выше дэпо.
Почему BuyStop выше SellLimit на половину полосы? Можно меньше-больше.
Здесь идея в том, что есть вероятность, что цена развернётся, раньше, чем зацепит стоповый ордер. Зачем ей тянуть за собой убыточный ордер?

Но это мелочь.

Вновь перечитал ТЗ и заметил одну неприятную вещь. Давно это было, писал ночью, склероз…

Короче, упустил важную вещь. Программистов прошу добавить к ТЗ.
На примере ветки Sell. Пункт №2. следует читать в варианте:

2. Для ордера на продажу выставили выше на расстоянии Step (в пипсах) от цены открытия ордер SellLimit с Magic.
На расстоянии Step*1.5 от цены открытия ордер BuyStop с Magic.
И один ордер SellStоp с Magic ниже на расстоянии Step УДВОЕННЫМ лотом.

3.1. Если открылся ордер Sell ниже предыдущего OP_SELL,
то выставляются три отложенных ордера:
ниже стартовым лотом на расстоянии Step ордер SellStop
и выше, на расстоянии Step УДВОЕННЫМ лотом BuyStop
и второй тоже на расстоянии Step стартовым лотом SellLimit.
В этом случае верхний OP_BUY закрывается.

Это все для Magic номеров. Для ветки Buy симметрично-наоборот.


Редактирован: 23 марта 2023, 11:30
avatar

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

  • 23 марта 2023, 11:05
+
0
Программистам.

Пытался у себя на блогах собрать заинтересованных и основательно прорабатывать ТЗ, но ничего из этого не вышло. Народ посещает блог, но пассивно наблюдает. А вдруг, что-то получится. Грустно. Не было бы таких лагов.
Редактирован: 23 марта 2023, 11:36
avatar

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

  • 23 марта 2023, 11:34
+
0
Андрей, безусловно идея интересная! но из разряда «пока не попробуешь — не узнаешь» вот касательно УДВОЕННЫХ лотов… то, откуда будет браться маржа?, все же с умножением она будет тратиться даже если баланс в плюсе будет, вот тут можно поподробнее: «Если какая-то ветвь накопила профит, а цена развернулась, то разворотные сделки запираются в замок и не влияет на рост-убыток. Зато противоположная ветвь в это время пирамидит прибыль. Одновременно открытых ордеров не более четырёх. Нагрузка на маржу минимальная. Ибо рост лотов происходит за счёт незафиксированной прибыли.»,

если будет речь идти об удвоенных лотах думаю не хватит маржи все равно даже с учетом что :" Одновременно открытых ордеров не более четырёх. Нагрузка на маржу минимальная. Ибо рост лотов происходит за счёт незафиксированной прибыли."" и " Одновременно открытых ордеров не более четырёх" а дальше что? на тренде
avatar

  6  Ramboo Сообщений: 92 - Ram

  • 23 марта 2023, 12:04
+
0
Remboo (блин… как это по-русски?), удвоенные лоты только на изломе. Разово. Заметьте, при открытии села ниже предыдущего села, верхний бай закрывается. В минус, но тоже за счет прибыли удвоенного села. Дальше пирамидим одинарным лотом. Не закрывая удвоенный сел. В этот момент и достигается основная прибыль ветки. При чем, в это время ветка бай спускается локами. Чем дольше в ветке сел будет ордеров ниже предыдущего, тем больше ордеров бай ветки закрывается, увеличивая количество ордеров в селл. Возможно надо будет тралить SL этих ордеров. Но пока так. Потом буду дорабатывать.
Редактирован: 23 марта 2023, 12:23
avatar

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

  • 23 марта 2023, 12:21
+
0
Возможно понадобиться закрывать всю ветку в момент второго перелома. Думал над этим. Но калькулятор не лучший способ ответа на «возможно». Лучше сову дорабатывать. Понятие пилить к слову сова, постеснялся применять. Попахивает.
avatar

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

  • 23 марта 2023, 12:28
+
0
Хорошо, хорошо, все же здоровый скептицизм к ТЗ не стремится убить идею))) а наоборот. Даже если на реальном счете будет кривая идти вверх а затем вниз к 0, даже просто на возврате спреда можно заработать, лишь бы не сливал))) и насчет «изломов и разово...» как это технически осуществимо?
Редактирован: 23 марта 2023, 12:29
avatar

  6  Ramboo Сообщений: 92 - Ram

  • 23 марта 2023, 12:28
+
0
Рембо, ну что вы. Ни в коем случае. Я только за. Я не отбиваюсь от надоедливого… Прислушиваюсь и объясняю, почему баба Яга против, и почему рановато за это говорить. Я уже писал где-то у себя на блоге, что даже самая глупая идея, может стать вишенкой на торте. С глупыми идеями у вас слабовато. Я вообще рад, что вы обратили внимание на топик. Проявили заинтересованность. Хотел бы и дальше сотрудничать с вами.
avatar

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

  • 23 марта 2023, 12:34
+
0
Вон Shaman как-то выдвинул глупую идею. Кинул и пошёл. А я зацепился за неё. Очень даже интересно получилось.
avatar

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

  • 23 марта 2023, 12:39
+
0
в л.с попытался написать что то дошло?
avatar

  6  Ramboo Сообщений: 92 - Ram

  • 23 марта 2023, 12:44
+
0
Так что? Кто-то откликнется? Или сложно?
avatar

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

  • 24 марта 2023, 16:13
+
0
Сложно так воспринимать. С картинкой было бы понятней.
Первый пункт не о чем. купили-продали — зачем?
Похоже, что вы пытаетесь изобрести Русскую систему, люди как только её не крутили — вроде всё затухло. В теме там страниц под 1000 обсуждений.
avatar

  5  cesar781 Сообщений: 43

  • 24 марта 2023, 16:55
+
0
Что купили и продали? Две ветви запустили. Не знаю, кто такая русская система. Я свою разрабатываю.
avatar

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

  • 24 марта 2023, 17:03
+
0
В конце концов сделайте себе два отдельных советника. Обзовите его Sell и назначьте ему магик. Второй обзовите Buy и назначьте ему магик+1. Запускайте два советника одновременно на одну пару.
avatar

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

  • 24 марта 2023, 17:09
+
0
написал болванку. прибыль не увеличивается, закрывать нечего:




//+------------------------------------------------------------------+
//|                                                       Simple.mq4 |
//|                                              Copyright 2023, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот

extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь
extern int Step          = 333;      // шаг

extern int Slip          = 30;       // реквот
extern int Magic1        = 111;      // магик 1
extern int Magic2        = 222;      // магик 1

extern string Comm       = "Simple";

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price,int mn)
  {
   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,Comm,mn,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Подсчет позиций                                                  |
//+------------------------------------------------------------------+
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()==Magic1 || OrderMagicNumber()==Magic2))
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
               count++;
            if(OrderType()==1 && (ot==1 || ot==-1))
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int mn=0)
  {
   int count=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn)
           {
            if(OrderType()>1)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;


   return(lot);
  }
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder(int type=-1,int mn=0)
  {
   bool del=1;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn)
           {
            if(OrderType()==type || type==-1)
               del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
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()==Magic1 || OrderMagicNumber()==Magic2))
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1)
     {
      PutOrder(1,Bid,Magic1);
      PutOrder(0,Ask,Magic2);
     }

   if(CountOrders(Magic1)<1)
     {
      PutOrder(3,Bid+Step*_Point,Magic1);
      PutOrder(5,Bid-Step*_Point,Magic1);
     }

   if(CountOrders(Magic2)<1)
     {
      PutOrder(2,Bid-Step*_Point,Magic2);
      PutOrder(4,Bid+Step*_Point,Magic2);
     }

   if(CountOrders(Magic1)<2)
      DelOrder(-1,Magic1);

   if(CountOrders(Magic2)<2)
      DelOrder(-1,Magic2);

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

avatar

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

  • 25 марта 2023, 09:11
+
0
Что-то алгоритм мелковат. Перепроверю, отпишусь.
avatar

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

  • 25 марта 2023, 11:04
+
0
Спасибо, Андрей. Гляну, отпишусь в топике. Кажется забыл ещё одну вещь.
avatar

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

  • 25 марта 2023, 10:50
+
0
Да, Андрей. Ордера не удаляются. Ордера закрываться должны по тралу профита-убытка. SLи ТР пока ==0.
avatar

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

  • 25 марта 2023, 11:03
+
0
Что-то алгоритм мелковат. Перепроверю, отпишусь.
avatar

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

  • 25 марта 2023, 11:58
+
0
Ордера закрываться должны по тралу профита-убытка


где вы видели такую функцию?

добавил трал для серий по отдельности: www.opentraders.ru/downloads/3554/


avatar

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

  • 25 марта 2023, 13:20
+
0
5. Тралим общую прибыль в валюте. При достижении заданного уровня закрываем и удаляем все ордера. Начинается новый цикл.
avatar

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

  • 25 марта 2023, 13:21
+
0
Да Андрей. Ваш трал через такое проходит… Пока не разобрался. У меня вопрос. А почему бы не посчитать профит-убыток через OrderProfit()? Просуммировали в одном цикле и всё ясно. Превышает прибыль-убыток, гасим свет.
Редактирован: 25 марта 2023, 13:45
avatar

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

  • 25 марта 2023, 13:44
+
0
Вроде разобрался. Вы тралитеSL абсолютно всех ордеров двух магиков За Общим БУ.

Какой смысл… Не врублюсь сразу. Разве что тралить в ветке Sell стопы OP_BUY. В ветке Buy тралить стопы OP_SELL. Тогда какой-то смысл есть. И даже очень не плохой.

А у меня по замыслу было тралить профит.
Редактирован: 25 марта 2023, 14:00
avatar

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

  • 25 марта 2023, 13:59
+
0
Хотя в данном случае тралить надо будет не SL, а ТР. Имею ввиду ваш трал, но в виде трала ТР в ветке Sell тралим ТР ордеров OP_BUY, а в ветке Buy тралить ТР ордеров OP_SELL.

Хотя это не означает, что трал профита не нужен. Нужен.

if(AllProfit()>Profit || -AllProfit()<Loss)
{
CloseAll();
DelAll();
}

Редактирован: 5 мая 2024, 18:16
avatar

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

  • 25 марта 2023, 14:09
+
0
Рекомендую все же включить функцию сбора профитов
avatar

  9  Shtenco Сообщений: 238

  • 25 марта 2023, 14:27
+
0
//+------------------------------------------------------------------+
//|                                                       Simple.mq4 |
//|                                              Copyright 2023, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот

extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь
extern int TrailingStop  = 0;        // трал
extern int Step          = 333;      // шаг
extern double Profit     = 11;       // профит
extern int Slip          = 30;       // реквот
extern int Magic1        = 111;      // магик 1
extern int Magic2        = 222;      // магик 2

extern string Comm       = "Simple";

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price,int mn)
  {
   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,Comm,mn,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void TrailingAll()
  {
   bool mod=1;

   double all=0,count=0,sl=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic1 || OrderMagicNumber()==Magic2))
           {
            if(OrderType()<2)
              {
               all+=OrderOpenPrice()*OrderLots();
               count+=OrderLots();
              }
           }
        }
     }

   if(count>0)
      all=NormalizeDouble(all/count,_Digits);

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic1 || OrderMagicNumber()==Magic2))
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid-all>TrailingStop*_Point)
                 {
                  if(OrderStopLoss()<Bid-TrailingStop*_Point)
                    {
                     sl=NormalizeDouble(Bid-TrailingStop*_Point,_Digits);
                     if(OrderStopLoss()!=sl)
                        mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(all-Ask>TrailingStop*_Point)
                 {
                  if((OrderStopLoss()>(Ask+TrailingStop*_Point)) || (OrderStopLoss()==0))
                    {
                     sl=NormalizeDouble(Bid+TrailingStop*_Point,_Digits);
                     if(OrderStopLoss()!=sl)
                        mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Подсчет позиций                                                  |
//+------------------------------------------------------------------+
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()==Magic1 || OrderMagicNumber()==Magic2))
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
               count++;
            if(OrderType()==1 && (ot==1 || ot==-1))
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int mn=0)
  {
   int count=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn)
           {
            if(OrderType()>1)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;


   return(lot);
  }
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder(int mn=0)
  {
   bool del=1;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn)
           {
            if(OrderType()>1)
               del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
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()==Magic1 || OrderMagicNumber()==Magic2))
           {
            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=1;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic1 || OrderMagicNumber()==Magic2)
           {
            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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  
   if(AllProfit()>Profit && Profit>0)
      CloseAll();
      
   if(TrailingStop>0)
      TrailingAll();
      
   if(CountTrades()<1)
     {
      PutOrder(1,Bid,Magic1);
      PutOrder(0,Ask,Magic2);
     }

   if(CountOrders(Magic1)<1)
     {
      PutOrder(3,Bid+Step*_Point,Magic1);
      PutOrder(5,Bid-Step*_Point,Magic1);
     }

   if(CountOrders(Magic2)<1)
     {
      PutOrder(2,Bid-Step*_Point,Magic2);
      PutOrder(4,Bid+Step*_Point,Magic2);
     }

   if(CountOrders(Magic1)<2)
      DelOrder(Magic1);

   if(CountOrders(Magic2)<2)
      DelOrder(Magic2);

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

  9  Shtenco Сообщений: 238

  • 25 марта 2023, 14:34
+
0
Здравствуйте. Посмотрю отвечу.
avatar

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

  • 25 марта 2023, 14:54
+
0
Да это именно то, о чём я писал Андрею.
avatar

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

  • 25 марта 2023, 15:02
+
0
Тем более, что SL и ТР портят картину. Пробовал. Не удачно пока. Поэтому они пока обнулены.
avatar

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

  • 25 марта 2023, 15:04
+
0
Интересно, неужели бывает функция OrderLoss?
avatar

  9  Shtenco Сообщений: 238

  • 25 марта 2023, 14:46
+
0
Где вы её увидели? Функция ли это или переменная?
avatar

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

  • 25 марта 2023, 14:53
+
0
Вы сами опубликовали выше: if(AllProfit()>Profit || AllProfit()<-Loss)

Функции расчета убытков пока нет в МТ, и если появится то только в МТ5 скорее всего)
avatar

  9  Shtenco Сообщений: 238

  • 25 марта 2023, 15:20
+
0
<code>//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
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()==MagicSell || OrderMagicNumber()==MagicBuy))
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
</code>


По-моемому это в вашем варианте.
Редактирован: 25 марта 2023, 15:58
avatar

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

  • 25 марта 2023, 15:57
+
0
Эту функцию самому надо писать, я такое не умею)А в целом у вас задумка превосходная, получить 30-40% в год с просадкой не выше 3-4% — это тянет на Грааль!)
avatar

  9  Shtenco Сообщений: 238

  • 25 марта 2023, 15:21
+
0
Это не моя задумка, а мечта каждого трейдера.
За сбычу мечт.
avatar

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

  • 25 марта 2023, 16:00
+
+1
Моя задумка не менее 50% в месяц при просадке до 10%.
avatar

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

  • 26 марта 2023, 01:45
+
+1
Алгоритм не соответствует заданному. Попробую сам.
avatar

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

  • 25 марта 2023, 22:35

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