[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 616

 
Naturalmente, você está certo. A implicação foi que você já tem um código para fazer leituras apenas uma vez por barra.
 
sllawa3:
Acho que você está certo... Eu também tenho minhas dúvidas...

Você pode usar este método para monitorar o patrimônio líquido a fim de fechar todas as posições e excluir ordens assim que a porcentagem especificada de lucro do patrimônio líquido for atingida:

//--------------------------------------------------------------
// Описание глобальных переменных советника
// ----------------- Трал эквити -------------
extern double  PercentEquityForClose=15;
double         Equ_OLD,
               Equ_NEW,
               EquPerc,
               Equ_Start;

// ---- Дальнейшее описание глобальных переменных советника

//==========================================================

int init()                             // Функция init
{
   Equ_OLD=AccountEquity();
   Equ_Start=Equ_OLD; 
   EquPerc=Equ_Start/100*PercentEquityForClose;
   
// ---- Дальнейший код функции ----

   return;                             // Выход из init() 
}

//==========================================================
// ---- В функции слежения за событиями ----
// ---- вызываемой из функции start ----

   Equ_NEW=AccountEquity();                              // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
            if (Equ_NEW>=Equ_OLD+EquPerc)                // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
               {                                         
                  ClosePosFirstProfit(NULL, -1, -1);     // то закрываем все позиции
                  DeleteOrders(NULL, -1, -1);            // и удаляем все ордера
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

Eu o escrevi no local, portanto, pode haver erros.
Para acompanhar as mudanças no patrimônio em cada barra, basta verificar a abertura de uma nova barra e, se for o caso, executar este fragmento de código:

   Equ_NEW=AccountEquity();                              // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
            if (Equ_NEW>=Equ_OLD+EquPerc)                // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
               {                                         
                  ClosePosFirstProfit(NULL, -1, -1);     // то закрываем все позиции
                  DeleteOrders(NULL, -1, -1);            // и удаляем все ордера
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

Acho que é algo parecido com isto...

 
Roger:
Naturalmente, você está certo. A implicação foi que você já tem um código para fazer leituras apenas uma vez por barra.
Não, não tenho, mas escrevi algo acima para verificar a equidade em cada carrapato. Basta fazer uma verificação na abertura de um novo bar e, em caso afirmativo, verificar o patrimônio... Eu não acho difícil fazer...
 
interessados na reversão do patrimônio de subir para descer, desde que o patrimônio esteja acima do equilíbrio... para fechar qualquer coisa aberta...
 
sllawa3:
Estou interessado na reversão do patrimônio de crescente para decrescente, desde que o patrimônio seja maior que o equilíbrio... para fechar tudo o que está aberto...

Esta é a função para definir uma nova barra:

//+------------------------------------------------------------------+
//|  возвращает признак появления нового бара для указанного периода |
//+------------------------------------------------------------------+
bool isNewBar(int timeFrame)
   {
   bool res=false;
   
   // массив содержит время открытия текущего (нулевого) бара
   // по 7 (семь) таймфреймам
   static datetime _sTime[7];  
   int i=6;
 
   switch (timeFrame) 
      {
      case 1  : i=0; break;
      case 5  : i=2; break;
      case 15 : i=3; break;
      case 30 : i=4; break;
      case 60 : i=5; break;
      case 240: break;
      case 1440:break;
      default:  timeFrame = 1440;
      }
//----
   if (_sTime[i]==0 || _sTime[i]!=iTime(Symbol(),timeFrame,0))
      {
      _sTime[i] = iTime(Symbol(),timeFrame,0);
      res=true;
      }
      
//----
   return(res);   
   }
   

... interessados na reversão do patrimônio de subir para descer, desde que o patrimônio esteja acima do equilíbrio... para fechar qualquer coisa que esteja aberta...

Então precisamos verificar a equidade em cada carrapato. Afinal, se você trabalha com carrapatos, por exemplo, uma hora antes do próximo cheque de equidade, a equidade pode perder seu valor...

Portanto, não devemos comparar o aumento do patrimônio líquido em 1%, mas seu aumento ou diminuição em relação ao status do tick anterior, registrado na variável Equ-OLD com seu valor atual em Equ_NEW

 
sllawa3:
interessados na reversão do patrimônio de cima para baixo, desde que o patrimônio esteja acima do equilíbrio... para fechar tudo o que está aberto...

Em algum lugar como este:

   Equ_NEW=AccountEquity();                              // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
            if (NormalizeDouble(Equ_NEW-Equ_OLD,8)<0)    // Если эквити уменьшилось по отношению к своему прошлому значению,
               {                                         
                  ClosePosFirstProfit(NULL, -1, -1);     // то закрываем все позиции
                  DeleteOrders(NULL, -1, -1);            // и удаляем все ордера.
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

// (NormalizeDouble(Equ_NEW-Equ_OLD,8)<0) - возможно здесь нужно сравнивать не с нулём, а с каким-то числом, 
                                         // а то может в последующем и не дать увеличиться балансу, 
                                         // постоянно закрывая вновь открываемые позиции (они ведь требуют залога)

No entanto, esta é apenas uma informação a ser pensada, não um código pronto.

 
drknn:

Claro. Só que não é chamado de parada, é chamado de ordem pendente. Abra um terminal. Pressione F1 nela. Na janela que aparece aberta Conteúdo - Comércio - Tipos de pedidos.

)))) obrigado, mas depois de fundos confusos/desacostumados à execução por licitação e perguntar em vez de comércio, quando algo está confuso - não tímido de fazer uma pergunta estúpida para tirar dúvidas. )))
 

Ajuda . o revendedor tem cinco casas decimais . a função iOpen (NULL,0,n) dá apenas quatro casas decimais (as leituras são feitas via impressão) . como resolver o problema .

 
pips500:

Ajuda . o revendedor tem cinco casas decimais . função iOpen(NULL,0,n) dá apenas quatro casas decimais (as leituras são feitas via impressão) . como faço para resolver o problema . obrigado antecipadamente.

A impressão() arredonda até 4 dígitos para emitir corretamente para o console o tipo duplo(que retorna iOpen() 5 casas decimais, neste caso), você deve usar a função DoubleToStr()

string DoubleToStr( valor duplo, dígitos int )
Converte um valor numérico para uma string de texto contendo uma representação de caracteres de um número no formato de precisão especificado.

Parâmetros:

value - Величина с плавающей точкой.

digits - Формат точности, число цифр после десятичной точки (0-8).

 
sllawa3:
Estou interessado na reversão do capital próprio de subir para cair desde que o capital próprio esteja acima do equilíbrio... para fechar tudo o que está aberto...

E aqui está um exemplo de como funciona... Fiz deliberadamente uma abertura de posição em cada novo bar. Então, aqui temos "OC Killer"... :)


Relatório de teste fechado, onde não há limitadores e abertura de posições a cada tick - porcentagem enorme ... E sem drawdown :) É uma pena que ninguém o deixe trabalhar assim ...

Aqui está uma foto do relatório:


Ganhei muito dinheiro com estas "invasões", quase sem drawdowns. Nem sequer consegui chegar a aquisições (você pode vê-las acima):


Arquivos anexados:
Razão: