Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 465

 
Rewerpool:

Por que mesmo escrevê-lo dessa maneira?

Se você colocar o EA em apenas um símbolo, mas ele funcionará em todos eles? E o mágico verá o seu!

Estou confuso!

No antigo mql4 a condição era verificada do início ao fim, independentemente do resultado da verificação da primeira na lista de condições. Daí esta escrita feia, desejo de reduzir o tempo de processamento.

Atualmente, está escrito em algum lugar, mas não me lembro onde, se a primeira condição não for atendida, então o cheque pára. Assim, coçar a orelha esquerda com o dedo mindinho do pé direito não faz sentido.

 

@Konstantin Nikitin Então, se eu escrever no início da iteração desta forma


 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:

Então, se eu escrever no início da iteração desta forma

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
Algo parecido com isto.
 

Boa tarde. Isto é o que eles escrevem.

"O produto só pode conter um arquivo EX4, não são permitidos arquivos adicionais. O nome do arquivo EX4 e os nomes dos parâmetros de entrada devem ser escritos em letras latinas. Recomenda-se a utilização deRecursos a fim de criar uma interface de fácil utilização.

Por razões de segurança, não são permitidas chamadas para quaisquer DLLs no programa. Se forem necessários dados de teste para o programa de demonstração, o programa deve criar o arquivo necessário por si mesmo e informar o usuário sobre ele. Você também pode adicionar os arquivos necessários usando a função ResourceLoad, mas esteja ciente de que todos os produtos são verificados quanto a possíveis atividades maliciosas antes de serem publicados no Marketplace.

É proibido incluir quaisquer restrições ao Produto dependendo do tempo, tipo ou número da conta comercial, instrumento financeiro, etc. Todas essas ações serão consideradas como hostis ao comprador e não serão toleradas".

Digamos HOW..... Fazer um pedido de EA a um indicador.

 
Oleksandr Kulibaba:

Boa tarde. Isto é o que eles escrevem.

"O produto só pode conter um arquivo EX4, não são permitidos arquivos adicionais. O nome do arquivo EX4 e os nomes dos parâmetros de entrada devem ser escritos em letras latinas. Recomenda-se o uso deRecursos a fim de criar uma interface de fácil utilização.

Por razões de segurança, não são permitidas chamadas para quaisquer DLLs no programa. Se forem necessários dados de teste para o programa de demonstração, o programa deve criar o arquivo necessário por si mesmo e informar o usuário sobre ele. Você também pode adicionar os arquivos necessários usando a função ResourceLoad, mas esteja ciente de que todos os produtos são verificados quanto a possíveis atividades maliciosas antes de serem publicados no Marketplace.

É proibido incluir quaisquer restrições ao Produto dependendo do tempo, tipo ou número da conta comercial, instrumento financeiro, etc. Todas essas ações serão consideradas como hostis ao comprador e não serão toleradas".

Digamos HOW..... Fazer um pedido de EA para o indicador.

Você mesmo escreveu a resposta: Use um recurso

//+------------------------------------------------------------------+ 
#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:

Você mesmo escreveu a resposta: Use o recurso

Obrigado pela resposta. Mas eu já o li e tentei inseri-lo. Não consigo entender. Estou fazendo algo errado ou colocando-o no lugar errado. Estou chamando para três indicadores. Por favor, descreva este roteiro com mais detalhes.

O que, onde, que parâmetros... Agradecemos antecipadamente.

//+------------------------------------------------------------------+ 
#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:

Obrigado pela resposta. Mas eu já o li e tentei colocá-lo dentro. Não consigo colocá-lo para trabalhar. Ou estou fazendo isso errado ou estou colocando no lugar errado. Estou chamando para três indicadores. Por favor, descreva este roteiro com mais detalhes.

O que, onde, que parâmetros... Agradecemos antecipadamente.

Crie três ou quantas variáveis forem necessárias e chame-as como no exemplohandle_ind=iCustom(_Symbol,_Period,"::Indicadores\\blah-blah-blah) Insira o código. Só para que as pessoas entendam!

iCustom é ESTE!

iCustom

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



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

Crie três variáveis ou quantas forem necessárias e pesquise como no exemplohandle_ind=iCustom(_Symbol,_Period,"::Indicadores\\blah-blah-blah) Insira o código. Só para que as pessoas entendam!

iCustom é ESTE!

Se

Vou tentar. Obrigado.

 
@Oleksandr Kulibaba Insira seu código, erros! Para ter compreensão! Boas pessoas vão ajudar! Não está claro qual é o seu problema!
 
@Konstantin Nikitin Bom trabalho. Removido do código
if ((OSL==0&&stoploss!=0)||(OTP==0&&takeprofit!=0))

A parada está agora tremendo a cada tique )))))


No post você apontou o código de fechamento para o mágico ! Eu entendo isso! A situação é a seguinte: eu negocio à mão, mas de repente preciso recuar e dar controle à EA (busca de um padrão e ponto de entrada). Quero separar todas as operações. Mas a parada e a retirada, como exigido por todos. Talvez eu ainda não esteja cavando direito!