Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2124

 
законопослушный гражданин #:

сделал как вы сказали и убрал кое что:

ошибка "3" больше не выходит

теперь думаю про стоп и тейк.

Хочу спросить, можно ли нормализацию стопа и тейка тоже добавить сюда? или их нужно отдельной функцией сделать?

Можно
 
законопослушный гражданин #:

новый вопрос возник.

я получаю тип и размер профита последнего закрытого ордера, через функцию:

здесь данные выбираются по магику: if(OrderMagicNumber()==Magic), если у доп. ордеров нет магика, то ни не должны попадаться при переборе в этой функции?

задумка то именно в том, чтобы в виде условия выступали данные от ордеров у которых магики есть: if(OP_TYPE==0 && last_profit<0 && Buy==true && DBsig==1) и если они удовлетворяют условия, то открывается доп. лимитник

Они не попадают в перебор
 
Tretyakov Rostyslav #:
Они не попадают в перебор

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

если доп. лимитка закрылась по стопу то от нее открывается новая доп. лимитка, ведь магика у них нет, ?

значит не должны они открываться друг после друга  

 
законопослушный гражданин #:

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

если доп. лимитка закрылась по стопу то от нее открывается новая доп. лимитка, ведь магика у них нет, ?

значит не должны они открываться друг после друга  

Лимитка без магика закрылась - значит ордеров нет, а последний закрытый с магиком убыточный.

Все условия для новой лимитки без магика

 
Tretyakov Rostyslav #:

Лимитка без магика закрылась - значит ордеров нет, а последний закрытый с магиком убыточный.

Все условия для новой лимитки без магика

понял. Нужно придумать еще условие.

 
законопослушный гражданин #:

ааа кажется понял

нужно еще одно условие добавить

Если я правильно понял, то...

сначала ставим лимитки с магиком, если закрылся с убытком - ставим лимитку без магика.

если лимитка без магика закрылась, то ждем условий для лимиток с магиком.

Все правильно?

 
Tretyakov Rostyslav #:

Если я правильно понял, то...

сначала ставим лимитки с магиком, если закрылся с убытком - ставим лимитку без магика.

если лимитка без магика закрылась, то ждем условий для лимиток с магиком.

Все правильно?

да. всё  так.

и еще выяснил только что. если лимитка без магика открылась, то (при наличии условий) сов откроет еще и лимитку с магиком,

а  от этого тоже 

хотелось бы избавиться

 
законопослушный гражданин #:

да. всё  так.

и еще выяснил только что. если лимитка без магика открылась, то (при наличии условий) сов откроет еще и лимитку с магиком,

а  от этого тоже 

хотелось бы избавиться

Пришли мне советник
 
законопослушный гражданин #:

пожалуйста.

последняя актуальная версия с двумя стопами и тейками отдельно для лимитников с магиком и без

В начале кода добавь переменную

extern int         SL_Plus          =50;                    // Перенос в безубыток на указанное кол-во пунктов
extern int         Slip             =5;                     // Проскальзывание
extern int         Magic=100;                               //индивидуальный номер эксперта

int _magic=1;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |

далее при открытии лимиток с магиком делаешь проверку(желтый цвет) и после открытия меняешь переменную (зеленый цвет)

 //если нет откр орд. и отступ <= мин. стопа то, откр бай/селл на интервале равном мин. стопу (но это не для работы по марж зонам!) типа скальпинг  
   if(n==0&&blimit==0&&step<=stops) {buylimit_open=NormalizeDouble(Bid-stops,Digits);sig_blimit=1; }  
   if(n==0&&slimit==0&&step<=stops) {selllimit_open=NormalizeDouble(Ask+stops,Digits);sig_slimit=1;}
   
   if(_magic==1)
     {
      if(Bid > iHigh(NULL,1440,1)&&Buy==true&&sig_blimit==1) 
      {int open=OrderSend(Symbol(),OP_BUYLIMIT,Lots,buylimit_open,Slip,0,0,NULL,Magic,0,Blue);if(open>0) {_magic=0; return;} if(open<0) {Print("OrderSend failed #",GetLastError());return;}} 
      
      if(Ask < iLow(NULL,1440,1)&&Sell==true&&sig_slimit==1) 
      {int open=OrderSend(Symbol(),OP_SELLLIMIT,Lots,selllimit_open,Slip,0,0,NULL,Magic,0,Red);if(open>0) {_magic=0; return;} if(open<0) {Print("OrderSend failed #",GetLastError());return;}}
     }

далее при открытии лимиток без магика делаешь проверку(желтый цвет) и после открытия меняешь переменную (зеленый цвет)

   if (_slimit==0)  {_selllimit_open=NormalizeDouble(Ask+(step-sl),Digits);        // создадим цену открытия доп. ордера Селл-Лимит
                     Dsl = NormalizeDouble(_selllimit_open+SL2*Point,Digits); // создадим Стоплосс относительно цены открытия
                     Dtp = NormalizeDouble(_selllimit_open-TP2*Point,Digits); // создадим Тейкпрофит относительно цены открытия
                     DSsig=1;                                                 // создадим сигнал на открытие доп. ордера Селл-Лимит
                    }
   if(_magic==0)
     {
      // OP_TYPE==0 - последний закрытый был Бай 
      if(OP_TYPE==0 && last_profit<0 && Buy==true && DBsig==1)
     
      {int openD=OrderSend(Symbol(),OP_BUYLIMIT,Lots,_buylimit_open,Slip,Dsl,Dtp,NULL,0,0,Blue);
      if(openD>0) {_magic=1; return;} if(openD<0) {Print("OrderSend failed #",GetLastError());return;}}
   
      // OP_TYPE==1 - последний закрытый был Селл
      if(OP_TYPE==1 && last_profit<0 && Sell==true && DSsig==1)
      
      {int openD=OrderSend(Symbol(),OP_SELLLIMIT,Lots,_selllimit_open,Slip,Dsl,Dtp,NULL,0,0,Red);
      if(openD>0) {_magic=1; return;} if(openD<0) {Print("OrderSend failed #",GetLastError());return;}}
     }

еще одна проверка перед лимитками

      if(last_profit>0) _magic=1;
//+------------------------------------------------------------------+
//|         Открытие лимитных ордеров                                |
//+------------------------------------------------------------------+
 
Tretyakov Rostyslav #:

В начале кода добавь переменную

………………………………………………………………

Да сделай уже как надо. Чего мучить человека правкой и объяснениями каждой строки. У него нет желания научиться, просто надо сделать очередную задумку нахаляву…

Причина обращения: