Características úteis da KimIV - página 74

 
allarkoms писал(а) >>

Olá Igor!

Estou tentando aprender MQL4 e, devido à falta de descrição dos operadores de idiomas, um problema me deixou perplexo. Eu tenho um indicador com 8 buffers de dados acumulados. Preciso que ele seja exibido com o período do próximo período de tempo em um período de tempo que eu tenha escolhido. Para este fim, ele utiliza o operador iCustom(). Mas retorna um valor duplo e não sei como e se o iCustom pode e deve ser usado neste caso.

Espero realmente a sua ajuda.

Olá, Alexey!

Você deve fazer um novo indicador que utilize a função iCustom(). Atribuir os valores retornados por esta função aos amortecedores do novo indicador.

 
ProfitTrader писал(а) >>

Olá Igor! E boa tarde a todos!

Estou interessado no código que deve ser inserido para que o Expert Advisor não faça mais negócios naquele dia em que fecha um negócio...

Encontrei-o mas não funciona no testador de estratégia, quero testá-lo, que código devo usar em seu lugar?

Então eu deveria adicioná-lo na condição de entrada.

Olá, Sergiy!

Nem vejo porque o uso da minha função dada por você não pode funcionar no testador de estratégia. Se ainda for relevante para você, sugiro que você poste todo o código da EA. Vamos tentar descobrir...

 

Há perguntas sobre as diferenças e peculiaridades das funções SetOrder() e OpenPosition() no tratamento de erros.


SetOrder():

      if ( err==8 || err==141) Sleep(1000*100);
      if ( err!=135 && err!=138) Sleep(1000*7.7);
      if ( err==139 || err==140 || err==148) break;

OpenPositions(): Erros 8 (ERR_TOO_FREQUENT_REQUESTS), 138 (ERR_REQUOTE) e 139 (ERR_ORDER_LOCKED) não são tratados, ao contrário de SetOrder():

      if ( err==141) Sleep(1000*100);
      if ( err!=135) Sleep(1000*7.7);
      if ( err==140 || err==148 || err==4110 || err==4111) break;

Em SetOrder() o erro 130 (ERR_INVALID_STOPS) é tratado por stop correction, mas em OpenPositions() não é tratado de forma alguma.

Em OpenPositions() o processamento 145 (ERR_TRADE_MODIFY_MODIFY_DENIED) está presente. O sentido do seu processamento aqui não é claro.

Além disso, na primeira página desta discussão, há uma menção de erros de manuseio que estão faltando em ambas as funções:

KimIV >>:

На паузу 7.7 секунды нарвутся ошибки 129 (Неправильная цена bid или ask), 130 (Неправильные стопы), 134 (Недостаточно денег), 136 (Нет цен).

Também não há processamento de outros erros (provavelmente, importantes neste caso), por exemplo, 3 (ERR_INVALID_TRADE_PARAMETERS), 6 (ERR_NO_CONNECTION), 7 (ERR_NOT_ENOUGH_RIGHTS), 9 ERR_MALFUNCTIONAL_TRADE, 137 (ERR_BROKER_BUSY), 144(!), 4067 (ERR_TRADE_ERROR), 4106 (ERR_UNKNOWN_SYMBOL), 4107 (ERR_INVALID_PRICE_PARAM)


Igor, por favor comente os pontos descritos.

As funções SetOrder() e OpenPositions() que mencionei foram retiradas da biblioteca b-Orders de 05.11.2008 e b-Positions de 29.10.2008 do site kimiv.ru.


Eu gostaria de acrescentar. Se ocorrer erro 5 ERR_OLD_VERSION, ele pode ser tratado da mesma forma que 2, 64, 65, 133; 4109 ERR_TRADE_NOT_ALLOWED da mesma forma que 4110, 4111

 
O que significa erro 142? Não consegui encontrá-lo nos códigos de erro. Eu também gostaria de saber se é possível reduzir os atrasos em algum lugar para o pipsator?
 
khorosh >> :
O que significa erro 142? Eu não o encontrei em códigos de erro.

https://docs.mql4.com/ru/trading/errors

142 Uma ordem foi enfileirada. Isto não é um erro, mas um dos códigos de comunicação entre o terminal do cliente e o servidor comercial. Este código pode ser recebido em um caso raro, quando durante o desempenho da operação comercial houve uma interrupção na conexão e a conexão foi restaurada posteriormente. Deve ser tratado da mesma forma que o erro 128.

 
Здравствуйте Игорь! И всем Добрый день!

Estou interessado em uma pergunta sobre os GEPs, eles não estão descritos no livro, e há muitas novidades neste tópico. Eu gostaria de saber como fazer um comércio aberto toda vez que um GEP aparece. Eu quero saber como abrir pedidos quando o GEP aparecer. Eu o tenho, mas por alguma razão este algoritmo não funciona, qual é o erro aqui?

extern int     Magic                = 777;
extern int       TP                 = 6;
extern int       SL                 = 2;
extern double  Lots                 = 0.01;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
if(  iClose(NULL,0,1)>iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>1*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if(  iClose(NULL,0,1)<iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>1*Point )
   { //продаем
 OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}

   return(0);
  }
//+------------------------------------------------------------------+
 
Na primeira condição a primeira condição é supérflua, a segunda condição sobre a venda não é de forma alguma viável. Um ponto é uma lacuna? Você tem um escorregamento de 2 e uma parada de 2, pode haver sobreposições.
 
Roger >> :
Na primeira condição, a primeira condição é redundante, a segunda condição à venda é impossível. Um ponto é uma lacuna? Seu escorregamento é 2 e a parada é 2.

Obrigado, mas por que o primeiro prefácio é supérfluo? Você quer uma posição de compra para abrir quando um novo bar estiver acima do fechamento do anterior e vice versa. >> Esse é o caminho certo?

if(  iClose(NULL,0,1)<iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>2*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if(  iClose(NULL,0,1)>iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>2*Point )
   { //продаем
 OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}
 
É isso mesmo.
if(  iClose(NULL,0,1)-iOpen(NULL,0,0)>10*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if( iOpen(NULL,0,0)- iClose(NULL,0,1)>10*Point )
   { //продаем
OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}
 
Roger >> :
>> É isso mesmo.

Tanto quanto eu entendo, a primeira condição implica automaticamente que o preço de fechamento é maior do que o preço de abertura. Na segunda, é ao contrário??????