[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 634

 
artmedia70:

Mais uma coisa...

Ao testar, removi todas as indulgências que são automaticamente carregadas do modelo (o modelo tem o nome de um EA e é automaticamente carregado ao testar) da janela do gráfico.

No diário do testador é constantemente escrito sobre o carregamento bem sucedido de uma indulgência personalizada e imediatamente segue com um registro de sua eliminação. E assim prossegue durante todo o teste...

É normal ou é uma coisa ruim?

Como posso consertá-lo?


Posso estar atrasado para responder, mas eu mesmo já enfrentei tal situação. Não é bom :)

Eu tenho tais registros na revista, ao chamar um indicador personalizado através do iCustom(), esqueci de passar um dos parâmetros por engano. O compilador não rastreia estes erros, mesmo durante o teste, já que o nome do indicador está correto, MT escreve que tudo é carregado com sucesso, mas o número de parâmetros não é verificado, e como os parâmetros são especificados incorretamente, um erro ocorre no indicador e é descarregado imediatamente. Notei que o teste funciona lentamente e o tronco é o mesmo:

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15: carregado com sucesso

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15: removido

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15: carregado com sucesso

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15: removido

Comecei a investigar e encontrei tal problema por causa de minha desatenção, tentei colocar/remover indicador dele "na mosca", não vi nenhuma "animação" no registro nesta ocasião, o problema era com o iCustom(), então verifique só no caso de :)

 

ToLik_SRGV:

todo o problema era com o iCustom(), portanto verifique só no caso de :)

Isso é certo. é devido a um número errado de argumentos.
 

Dar conselhos sobre como fixar a data de expiração de uma ordem pendente.

De alguma forma, parece não querer trabalhar para mim, e não há muita informação sobre isso no manual.

Se você puder me dar um exemplo.

Agradecemos antecipadamente.

 
ToLik_SRGV:

Resposta tardia, provavelmente, mas eu mesmo já me deparei com isso. Isto não é bom :)

Eu tenho tais registros no diário, ao chamar um indicador personalizado através do iCustom(), esqueci de passar um dos parâmetros por engano. O compilador não rastreia estes erros, mesmo durante o teste, já que o nome do indicador está correto, MT escreve que tudo é carregado com sucesso, mas o número de parâmetros não é verificado, e como os parâmetros são especificados incorretamente, um erro ocorre no indicador e é descarregado imediatamente. Notei que o teste funciona lentamente e o tronco é o mesmo:

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15: carregado com sucesso

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15: removido

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15: carregado com sucesso

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15: removido

Comecei a investigar e encontrei tal problema por causa de minha desatenção, tentei colocar/remover indicador dele "na mosca", não vi nenhuma "animação" no registro nesta ocasião, o problema era com o iCustom(), então verifique só no caso de :)

Não, não muito tarde... Muito bem, obrigado.
 
kwadrad:

Dar conselhos sobre como fixar a data de expiração de uma ordem pendente.

De alguma forma, parece não querer trabalhar para mim, e não há muita informação sobre isso no manual.

Se você puder me dar um exemplo.

Agradecemos antecipadamente.

Aqui. Isso é o que eu faço...

   double   tp,PriceOpn,PriceTake;
   string   sy=Symbol();
   double pa=MarketInfo(sy, MODE_ASK);
   double pb=MarketInfo(sy, MODE_BID);
   double po=MarketInfo(sy, MODE_POINT);

   Magic=511;
   Lots_New=NormalizeLot(Lots/2, False, NULL);
         
   PriceOpn  = NormalizePrice(pa+DistORD*po, NULL);
   PriceTake = NormalizePrice(pa+(DistORD+tp)*po, NULL);
 //------------------------------------------------------------------
   SetOrder(NULL, OP_BUYSTOP, Lots_New, PriceOpn, 0, PriceTake, Magic, TimeCurrent()+12*60); // 12 часов срок его жизни...
 //------------------------------------------------------------------
//==============================================================================================

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.08.2008                                                     |
//|  Описание : Установка ордера.                                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    co - комментарий                                                        |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
              double sl=0, double tp=0, int mn=0, string co="", datetime ex=0) {
  color    cl=IIFc(op==OP_BUYLIMIT || op==OP_BUYSTOP, clOpenBuy, clOpenSell);
  datetime ot;
  double   pa, pb, mp;
  int      err, it, ticket, msl;

  if (sy=="" || sy=="0") sy=Symbol();
  msl=MarketInfo(sy, MODE_STOPLEVEL);
  if (co=="") co=WindowExpertName()+" "+GetNameTF(Period());
  if (ex>0 && ex<TimeCurrent()) ex=0;
  for (it=1; it<=NumberOfTry; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("SetOrder(): Остановка работы функции");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    ot=TimeCurrent();
    ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, co, mn, ex, cl);
    if (ticket>0) {
      if (UseSound) PlaySound(SoundSuccess); break;
    } else {
      err=GetLastError();
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66);
        if (ExistOrders(sy, op, mn, ot)) {
          if (UseSound) PlaySound(SoundSuccess); break;
        }
        Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
        continue;
      }
      if (UseSound) PlaySound(SoundError);
      mp=MarketInfo(sy, MODE_POINT);
      pa=MarketInfo(sy, MODE_ASK);
      pb=MarketInfo(sy, MODE_BID);
      if (pa==0 && pb==0) Message("SetOrder(): Проверьте в обзоре рынка наличие символа "+sy);
      Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
      Print("Ask=",pa,"  Bid=",pb,"  sy=",sy,"  ll=",ll,"  op=",GetNameOP(op),
            "  pp=",pp,"  sl=",sl,"  tp=",tp,"  mn=",mn);
      // Неправильные стопы
      if (err==130) {
        // Корректировка ценовых уровней
        if (modeSetOrders==1) {
          Sleep(1000*5.3);
          switch (op) {
            case OP_BUYLIMIT:
              if (pp>pa-msl*mp) pp=pa-msl*mp;
              if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
              if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
              break;
            case OP_BUYSTOP:
              if (pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;
              if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
              if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
              break;
            case OP_SELLLIMIT:
              if (pp<pb+msl*mp) pp=pb+msl*mp;
              if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
              if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
              break;
            case OP_SELLSTOP:
              if (pp>pb-msl*mp) pp=pb-msl*mp;
              if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
              if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
              break;
          }
          Print("SetOrder(): Скорректированы ценовые уровни");
          continue;
        }
        // Вход по текущим ценам
        if (modeSetOrders==2) {
          Print("SetOrder(): Вход по текущим ценам");
          if (op==OP_BUYLIMIT || op==OP_BUYSTOP) OpenPosition(sy, OP_BUY, ll, sl, tp, mn, co);
          if (op==OP_SELLLIMIT || op==OP_SELLSTOP) OpenPosition(sy, OP_SELL, ll, sl, tp, mn, co);
          break;
        }
      }
      // Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      // Слишком частые запросы (8) или слишком много запросов (141)
      if (err==8 || err==141) Sleep(1000*100);
      if (err==139 || err==140 || err==148) break;
      // Ожидание освобождения подсистемы торговли
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      // Обнуление даты истечения
      if (err==147) {
        ex=0; continue;
      }
      if (err!=135 && err!=138) Sleep(1000*7.7);
    }
  }
}
 
artmedia70:

Aqui. Isso é o que eu faço...




О. Obrigado.

Você tem que entender que este é o prazo em minutos a partir da abertura?

 
kwadrad:


О. Obrigado.

Eu deveria entender que este é o prazo em minutos a partir da abertura?

Sim, no exemplo das 12 horas de vida. 12*60 minutos
 

Eu sei que pode parecer OffTop, mas para mim, como recém-chegado à escrita de especialistas (e programação em geral, não considerando minha experiência de programação assembler para a Spectrum vinte anos atrás), minha pergunta, mas sim.... Vamos lá, é só uma pergunta, seria bem direta no ponto:

Ao testar a EA em um histórico de dois anos, notei meses em que há uma forte retração. Esta é uma questão para os veteranos: que métodos de lidar com drawdowns estão disponíveis como tal, o que você pode aconselhar na sua opinião é o mais eficaz.

Estou a partir de meu próprio ponto de vista, vejo dois métodos até agora:

1. Congelar todas as negociações quando o saque de ações exceder em um certo número de por cento e
1,1 para cada posição. Após seu ponto de equilíbrio, conectar uma parada móvel e fixar a parada a uma pequena distância do Ask/Bid, garantindo assim um pequeno lucro e depois puxar paradas após o preço, fechando parcialmente as posições (para liberar fundos) quando um certo número de pontos ganhar.
1.2 Após o aumento do patrimônio líquido em certa porcentagem, lentamente começa a negociar...

2. Pelo contrário, tendo desativado o comércio principal, temos que usar o meio lote, mas com uma grande quantidade de pedidos, seguindo estritamente a tendência com uma pequena parada após o ponto de equilíbrio.

Acho que a primeira maneira evitará uma grande diminuição do patrimônio, mas é preciso esperar muito tempo para que o mercado se aproxime das ordens
a segunda maneira comerá margem, mas no caso de posições de curto prazo você pode rapidamente adicionar um pouco ao dinheiro...

Até agora, vejo apenas duas formas tão opostas.

O que vocês aconselham, meus camaradas? Quaisquer pensamentos e sugestões, mesmo os mais loucos, à primeira vista, são bem-vindos...

Obrigado antecipadamente :)

 
O testador não lhe permite testar em mais do que o diário?
 
artmedia70:
O testador não permite que você teste em mais do que o diário?


Ы

Você está preparando um EA para o interbancário?