Cálculo de lote por Vince - página 8

 
Roman.:

Para aqueles que estão interessados - foi possível alcançar valores de trabalho (médios) da variável ótima f, pelo método da média geométrica de acordo com R. Vince no EA incluído na entrega padrão da MT baseada na MA (ver captura de tela). Com base nas condições e ordem de cálculo do ótimo f pelo livro, seu valor é de 0,36. Após terminar o código, colocarei aqui a função com a descrição e a ordem de utilização para calcular os volumes de lotes abertos em futuras negociações de acordo com o livro de R. Vince.

Parabéns por seu sucesso! :))
 
MaxZ:
Parabéns por seu sucesso! :))

Obrigado. Parece que terei que fazer um TWR array, apenas para estar seguro, como você aconselhou.
 
MaxZ:
Parabéns por seu sucesso! :))


ponto de inflexão f = 0,36, ou seja, conforme f aumenta ainda mais, a variável TWR - diminui - R. Vince está certo! :-)))

 

Um, como tudo isso pode ser anexado a uma EA em funcionamento com a definição mais simples de tamanho de lote em % do depo? Ou talvez eu não esteja obtendo lucro suficiente))))

Quero dizer, é tudo jogos mentais ou tem uma aplicação prática com efeito positivo?

 
Dezil:

Um, como tudo isso pode ser anexado a uma EA em funcionamento com uma definição simples de tamanho de lote em % do depo? Talvez eu não esteja obtendo lucro suficiente)).

Tudo isto é um jogo mental ou tem uma aplicação prática com um efeito positivo?


Claro, leia R. Vince - veja os posts acima no trailer, eu mesmo ainda não o testei em uma demonstração... Veremos... :-)))

Eu colocarei a fiya aqui assim que eu terminar, com uma descrição.

 
Roman.:


Claro, leia R. Vince - veja os posts acima no trailer, eu mesmo ainda não o testei em uma demonstração... Veremos... :-)))

Assim que eu terminar, colocarei aqui a ficção com uma descrição.


Você poderia me dizer o que ler do trabalho de Vince? Qual é o título da obra?
 
Dezil:

Você pode me dizer o que devo ler de Vince? Qual é o título da obra?

Baixe o trailer do meu post na página 2 do tópico a partir daqui - páginas 30-32.
 
Roman.:

Acho que descobri onde está o erro...

Voltemos ao código original, que já distorcemos algumas vezes:

   for (f = 0.01; f<=1.0; f=f+0.01)//цикл перебора переменной f для поиска оптимального ее значения,при котором TWR-максимально
     {  
          
          for ( orderIndex = 1;orderIndex<Qnt; orderIndex++) //при заданной f проходим по всем закрытым ордерам
            {                                                // и считаем относительный конечный капитал (TWR)
             TWR = TWR*(1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D))); // TWR - это произведение всех HPR
             //if (TWR>TWR_Rez) {TWR_Rez = TWR; Print(" TWR = ",TWR_Rez, " при f = ", f);}  
             //   else break;       
            }
          if (TWR>TWR_Rez) {
              TWR_Rez = TWR;
              G=MathPow (TWR_Rez, 0.001988); // 1/503 сделки по данной торговой системе, как в книжке: в степени 1/N 
              Print(" TWR = ",TWR_Rez," G = ",G, " при f = ", f);} // если текущий TWR > результирующего, 
              else break;    // то результирующий делаем равным текущему, иначе переходим на след итерацию цикла по f                                  
      }    

Poderia ser que a variável TWR não seja redefinida para "1" a cada iteração de f?

 
MaxZ:

Acho que descobri onde está o erro...

Voltemos ao código original, que já distorcemos algumas vezes:

Talvez seja tudo sobre a variável TWR não ser redefinida para "1" a cada iteração de f?


Sim, um ponto competente, a propósito... Possivelmente...muito possivelmente. Vou verificar esta tarde e postarei aqui. Obrigado.

Então não é necessário criar uma matriz TWR (como esta - a nova versão - também não é necessário...

Aqui eu tentei todo tipo de exorcismos para reduzir proporcionalmente seu valor no produto (porque seu valor absoluto não é importante, o que importa é a comparação por mais/pequeno), de modo a evitar o transbordamento ao calcular o f ótimo.

for (f = 0.01; f<=1.0; f=f+0.01)//цикл перебора переменной f для поиска оптимального ее значения,при котором TWR-максимально
     {  
          
          for ( orderIndex = 1;orderIndex<Qnt; orderIndex++) //при заданной f проходим по всем закрытым ордерам
            {                                                // и считаем относительный конечный капитал (TWR)
             //TWR = MathPow(TWR*(1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D))),0.33); // TWR - это произведение всех HPR                    
             Mas_TWR[orderIndex] = (1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D))); // заполняем массив значениями HPR                               
            }
          //Print ("Mas_TWR[Qnt]= ", Mas_TWR[Qnt]); 
          
          for ( orderIndex = 1;orderIndex<Qnt; orderIndex++)         
              {
               TWR = MathSqrt(TWR*Mas_TWR[orderIndex]);}
               
          if (TWR>TWR_Rez)
              {
                TWR_Rez = TWR;               
                //G = MathPow(TWR_Rez, 1/N);
                     // G1 = G1*MathPow(Mas_TWR[orderIndex], 1/N);
                     //G=MathPow (TWR_Rez, 0.0054054); // 1/185 сделки по данной торговой системе, как в книжке: в степени 1/N 
                Print(" TWR_Rez = ",DoubleToStr(TWR_Rez,8), " при f = ", f); 
                                                       // если текущий TWR > результирующего
              } 
          else 
              {
                TWR_Rez = TWR;
               // G=MathPow (TWR_Rez, 1/N);
                Print(" А это уже меньше: TWR_Rez = ",DoubleToStr(TWR_Rez,8), " при f = ", f);                                                     
              }       
      }      
             
   Print("Закрытых позиций = ", Qnt, " Нетто Профит/лосс = ", SUMM, " У последней ",Qnt, " закрытой позы профит/лосс = ", 
        Mas_Outcome_of_transactions[Qnt]);     
 

Eu era preguiçoso demais para colocar o código na EA e verificar eu mesmo! :)))

Ainda não tenho um Expert Advisor adequado. Eu tenho apenas algumas idéias. É por isso que peguei uma média móvel padrão sem otimizá-la e escolhi um período lucrativo.

O último código que tentei, quando entendi que o TWR não será zerado para "1", foi o seguinte:

//+------------------------------------------------------------------+
//---------переменные для расчета лота по оптимальному f Ральфа Винса
int Mas_Outcome_of_transactions [10000]; // Массив профитов/убытков закрытых позиций

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//--- Расчет оптимального f ---
   int Qnt = 0, Orders = OrdersHistoryTotal();        // Счётчик количества ордеров   
   ArrayInitialize(Mas_Outcome_of_transactions, 0);   // Обнуление массива
   double f, D, SUMM, TWR, G, G_Rez, Pow = 1/NormalizeDouble(Orders, 0);
   int orderIndex;
   
   for (orderIndex = 0; orderIndex < Orders; orderIndex++)
   {   
      if (!OrderSelect(orderIndex, SELECT_BY_POS, MODE_HISTORY))
      {
         Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
         continue;
      }
   
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != magic || OrderCloseTime()==0)
         continue; 
         
      int lastType = OrderType();
      double lastLots = OrderLots();
      double lastProfit = OrderProfit() + OrderSwap();
      
      if (orderIndex == 0 || lastProfit < D)
         D = lastProfit;
      
      Mas_Outcome_of_transactions[Qnt] = lastProfit;  // Заполняем массив профитом/лоссом по всем закрытым позициям 
      SUMM=SUMM+lastProfit;
      Qnt++;                                          // увеличиваем счетчик закрытых ордеров    
   }
   
   Print("D = ", DoubleToStr(D, 2), " Pow = ", DoubleToStr(Pow, 8));
   
   for (f = 0.01; f<=1.0; f=f+0.01)                   // цикл перебора переменной f для поиска оптимального ее значения,
   {                                                  // при котором G - максимально
      G = 1;
      for ( orderIndex = 1; orderIndex < Qnt; orderIndex++) // при заданной f проходим по всем закрытым ордерам
      {                                                     // и считаем среднее геометрическое от TWR
         TWR = 1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D));
         G *= MathPow(TWR, Pow);
      }
      if (G > G_Rez)
      {
         G_Rez = G;
         Print("G = ", G, " при f = ", f);
      }           // если текущий G > результирующего, то результирующий делаем равным текущему
      else break; // иначе переходим на следующую итерацию цикла по f
   }
   
   Print("Закрытых позиций = ",   Qnt,
         " Нетто Профит/лосс = ", SUMM,
         " У последней ",         Qnt,
         " закрытой позы профит/лосс = ", Mas_Outcome_of_transactions[Qnt-1]);
   
   return(0);
}

Sem matriz TWR.

Você vai esperar muito tempo por um transbordamento! ;D Embora talvez isso não tivesse acontecido de todo...