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

 
Rewerpool:

Зачем вообще так писать? 

Если только ставить советник на один символ, а работать он будет на всех? И магик свой увидит!

Совсем запутался!

В старом mql4 условие проверялось от начала до конца не зависимо от результата проверки первых в списке условий. Отсюда это безобразное написание, желание сократить время на обработку.

В настоящее время, где-то об этом написано, но не помню где, если первое условие не выполнено, то проверка прекращается. Соответственно чесать левое ухо мизинцем правой ноги не имеет смысла.

 

@Konstantin Nikitin Выходит если я напишу в начале итерации так:


 for (int i=OrdersTotal()-1; i>=0; i--)
   {
   if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
  
   if (OrderSymbol() != Symbol()) continue;
   
   if (OrderMagicNumber() != Magic) continue;

Выставляться будут стопы и тейки любым ордерам? И не надо делать опрос на предмет кто торгует Бот или человек?
 
Rewerpool:

Выходит если я напишу в начале итерации так:

void STOP_TAKE(void)
{
   int SPREAD    = (int)MarketInfo(Symbol(),MODE_SPREAD);
   if (stoploss<STOPLEVEL) stoploss=0; 
   if (takeprofit<STOPLEVEL) takeprofit=0;

     for(int i=0; i<OrdersTotal(); i++)
     {
          if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
          if(OrderSymbol()!=Symbol()) continue;
     
          int tip = OrderType();
          if(  tip!=OP_BUY && tip!=OP_BUYSTOP && tip!=OP_BUYLIMIT &&
               tip!=OP_SELL && tip!=OP_SELLSTOP && tip!=OP_SELLLIMIT ) continue;
     
          // переменные которые будут использоваться в любых ордерах
          int Ticket = OrderTicket();
          double    OOP = OrderOpenPrice(),
                    OSL = OrderStopLoss(),
                    OTP = OrderTakeProfit();
     
          //---
/* Если это удалить/заблокировать то будет работать со всеми ордерами не обращая внимания эксперта они или нет. Разблокировать, то сначала проверит ордера эксперта их нет то все остальные
          if( OrderMagicNumber() == Magic )
          { //----------Если Ордера Советника
               switch(tip)
               {
                    case OP_BUY:
                    case OP_BUYSTOP:
                    case OP_BUYLIMIT:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         }
                         break;
                         // end case
                         
                    default:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         } // end case
               } // end switch
               
               continue;
          }
*/
          switch(tip)
          {
               case OP_BUY:
               case OP_BUYSTOP:
               case OP_BUYLIMIT:
                    {
                         if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                         if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;       
                         if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                         else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                    }
                    break;
                    // end case
                         
               default:
                    {
                         if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                         if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                         if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                         else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                    } // end case
          } // end switch
     } // end for
} // end STOP_TAKE
Как-то так.
 

Добрый день. Вот что пишут..

"Продукт может содержать только один EX4 файл, никакие дополнительные файлы не допускаются. Название EX4-файла и наименования входных параметров должны быть написаны латинскими буквами. Для создания удобного интерфейса пользователя рекомендуется использовать Ресурсы.

В программе запрещены вызовы любых DLL из соображений безопасности. Если для демонстрации программы требуются тестовые данные, то программа должна сама создать необходимый файл и сообщить пользователю об этом. Вы можете также добавить необходимые файлы с помощью функции ResourceLoad, но имейте в виду, что все продукты перед публикацией на Маркете проверяются на возможные вредоносные действия.

Запрещается встраивать в Продукт какие-либо ограничения на работу в зависимости от времени, типа или номера торгового счета, финансового инструмента и т.д. Все подобные действия будут расцениваться как недружественные к Покупателю и недопустимы."

Скажите КАК..... Сделать запрос советника к индикатору.

 
Oleksandr Kulibaba:

Добрый день. Вот что пишут..

"Продукт может содержать только один EX4 файл, никакие дополнительные файлы не допускаются. Название EX4-файла и наименования входных параметров должны быть написаны латинскими буквами. Для создания удобного интерфейса пользователя рекомендуется использовать Ресурсы.

В программе запрещены вызовы любых DLL из соображений безопасности. Если для демонстрации программы требуются тестовые данные, то программа должна сама создать необходимый файл и сообщить пользователю об этом. Вы можете также добавить необходимые файлы с помощью функции ResourceLoad, но имейте в виду, что все продукты перед публикацией на Маркете проверяются на возможные вредоносные действия.

Запрещается встраивать в Продукт какие-либо ограничения на работу в зависимости от времени, типа или номера торгового счета, финансового инструмента и т.д. Все подобные действия будут расцениваться как недружественные к Покупателю и недопустимы."

Скажите КАК..... Сделать запрос советника к индикатору.

Вы же сами написали ответ: Использовать ресурс

//+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- 
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5"); 
   if(handle_ind==INVALID_HANDLE) 
     { 
      Print("Expert: iCustom call: Error code=",GetLastError()); 
      return(INIT_FAILED); 
     } 
//--- 
   return(INIT_SUCCEEDED); 
  }
Документация по MQL5: Программы MQL5 / Ресурсы
Документация по MQL5: Программы MQL5 / Ресурсы
  • www.mql5.com
В данном примере показано как проигрывать звуки из файлов Ok.wav и timeoit.wav, входящих в стандартную поставку терминала. Эти файлы находятся в папке означает папку, из которой запущен клиентский терминал MetaTrader 5.  Программным путем из mql5-программы каталог терминала можно узнать следующим образом: Расположение каталога данных терминала...
 
Vitaly Muzichenko:

Вы же сами написали ответ: Использовать ресурс

Спасибо за ответ. Но я это уже и читал и пробовал вставить. Не получается чего то.  Что то не правильно делаю либо не туда вставляю. У меня идет обращение к трем индикаторам. Если можно подробнее опишите этот скрипт.

Что, куда, какие параметры... Заранее благодарю.

//+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- 
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5"); 
   if(handle_ind==INVALID_HANDLE) 
     { 
      Print("Expert: iCustom call: Error code=",GetLastError()); 
      return(INIT_FAILED); 
     } 
//--- 
   return(INIT_SUCCEEDED); 
  }
 
Oleksandr Kulibaba:

Спасибо за ответ. Но я это уже и читал и пробовал вставить. Не получается чего то.  Что то не правильно делаю либо не туда вставляю. У меня идет обращение к трем индикаторам. Если можно подробнее опишите этот скрипт.

Что, куда, какие параметры... Заранее благодарю

Создайте три переменные или сколько вам нужно и опрашивайте их как в примере handle_ind=iCustom(_Symbol,_Period,"::Indicators\\бла-бла-бла) Вставьте код. Чтоб люди поняли! 

iCustom - ЭТО! 

iCustom

Возвращает значение указанного пользовательского индикатора. 



double  iCustom( 
   string       symbol,           // имя символа 
   int          timeframe,        // таймфрейм 
   string       name,             // папка/имя_пользовательского индикатора 
   ...                            // список входных параметров индикатора 
   int          mode,             // источник данных 
   int          shift             // сдвиг 
   );
 
Если 
if(handle_ind==INVALID_HANDLE) то это значит - не корректный хэндл
 
Rewerpool:

Создайте три переменные или сколько вам нужно и опрашивайте их как в примере handle_ind=iCustom(_Symbol,_Period,"::Indicators\\бла-бла-бла) Вставьте код. Чтоб люди поняли! 

iCustom - ЭТО! 

Если 

Буду пробовать. Спасибо.

 
@Oleksandr Kulibaba Вставляйте свой код, ошибки! Чтоб было понимание! Добрые люди помогут! А то так не ясно что у вас за проблемы! 
 
@Konstantin Nikitin Прикольно получилось . Из кода убрали 
if ((OSL==0&&stoploss!=0)||(OTP==0&&takeprofit!=0))

Стоп теперь дергается на каждом тике )))))


В посте  вы указали на закрытие кода для магика! Это я понял ! Просто ситуация такая : Торгую руками, но вдруг нужно отойти и передать управление Советнику(поиск патерна и точка входа). Поэтому хотел разделить все операции. Но выставление стопа и тейка, как бы обязательно всем. Может я пока не правильно копаю!

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