Tirer profit d'une fourchette de prix aléatoire - page 8

 
avatara:

Le sujet mérite, à mon sens, d'être approfondi. Le temps a passé - il y avait beaucoup de choses à penser et à apprendre.

Surtout le Fisher Transform est en quelque sorte décrit...

;)

J'ai préparé deux scripts pour générer des séries de tests. (pour les incréments uniformes et normaux).

S'il vous plaît, ne donnez pas de coup de pied pour la nécromancie et la négligence dans le code précipité...

La transformée de Fisher, comme tout autre expanseur, amplifie sauvagement le bruit fractionnaire près des limites supérieures et inférieures de l'intervalle, et dans la limite (à la limite elle-même) avec un facteur infini. Pour le marché, c'est tout simplement pertinent - tous les prix sont quantifiés par Point, et donc, dans une certaine mesure, tous les indicateurs sont également quantifiés par Point.
 
NorthernWind:

Cependant, si vous jouez comme je l'ai suggéré dans le lien ci-dessus, vous pouvez sûrement gagner sur les marches aléatoires avec mo=0. Mais, une fois encore, ce n'est pas exactement le jeu dont on nous parle dans les théorèmes. En outre, il existe une situation paradoxale, à savoir que plus vous échouez, plus vous gagnez. Une fois encore, ce jeu n'a rien à voir avec la réalité et vise à démontrer l'importance de tests précis. Le fait est que les gains y sont accumulés en sous-comptant les paris gagnés et perdus. C'est vrai.

Si vous parvenez à jouer un jeu comme je l'ai suggéré, vous deviendrez certainement riche. :) Et je dois ajouter que la distribution dans ce jeu fait également une grande différence. Le jeu n'est tout simplement pas réalisable sur certains types d'errance aléatoire.

ZS. Sans tenir compte de ce qui a été discuté, si vous convertissez la distribution existante en une autre, vous pouvez effectivement avoir un avantage à certains moments, mais un avantage très fragile.

Si l'idée est bonne, j'ai esquissé le code pour un test rapide sur des "prix" avec une distribution normale des incréments :

#property strict

extern int AmountPrices = 10000;
extern int TakeProfit = 100;
extern int StopLoss = 100;
extern double point = 0.0001;
extern int Temp = 0;

#define  MAX_RAND 32767.0

double GetRand()
{
  return(2 * MathRand() / MAX_RAND - 1);
}

void GetRandGauss( double& Rand1, double& Rand2 )
{
  double X1, X2, W = 2;
  
  while (W >= 1)
  {
    X1 = GetRand();
    X2 = GetRand();
    
    W = X1 * X1 + X2 * X2;
  }
  
  W = MathSqrt(-2 * MathLog(W) / W);
  
  Rand1 = X1 * W;
  Rand2 = X2 * W;
    
  return;
}

void GetPrices( double &Prices[], int Amount )
{
  static uint Tmp = 0;
  double Rand1, Rand2;
  
  MathSrand((int)TimeLocal() + Tmp);
  
  Amount <<= 1;
  
  ArrayResize(Prices, Amount);
  
  Prices[0] = 0;
  
  for (int i = 2; i < Amount; i += 2)
  {
    GetRandGauss(Rand1, Rand2);
    Prices[i - 1] = Prices[i - 2] + Rand1;
    Prices[i] = Prices[i - 1] + Rand2;    
  }
  
  Tmp += GetTickCount();
  
  return;
}

void NormalizeArray( double &Array[] )
{
  const int Size = ArraySize(Array);
  const double Interval = ArrayMaximum(Array) - ArrayMinimum(Array);  
  
  for (int i = 0; i < Size; i++)
    Array[i] /= Interval;
    
  return;
}

double System( const double &Prices[], const double TP, const double SL )
{
  const int Amount = ArraySize(Prices);
  bool Flag = TRUE;
  double OpenPrice = Prices[0];
  double Balance = 0;
  
  for (int i = 0; i < Amount; i++)
  {
    if (Flag)
    {
      if ((Prices[i] >= OpenPrice + TP) || (Prices[i] <= OpenPrice - SL))
      {
        Balance += Prices[i] - OpenPrice;
        
        Flag = (MathRand() > (SHORT_MAX + 1) / 2 - 1);  
        OpenPrice = Prices[i];
      }
    }
    else if ((Prices[i] <= OpenPrice - TP) || (Prices[i] >= OpenPrice + SL))
    {
      Balance -= Prices[i] - OpenPrice;

      Flag = (MathRand() > (SHORT_MAX + 1) / 2 - 1);  
      OpenPrice = Prices[i];
    }
  }
  
  return(Balance);
}

double GetRandProfit( int Amount, const double TP, const double SL )
{
   double Prices[];
   
   GetPrices(Prices, Amount >> 1);
   NormalizeArray(Prices);
   
   return(System(Prices, TP, SL));  
}


double OnTester( void )
{
  return(GetRandProfit(AmountPrices, TakeProfit * point, StopLoss * point));
}

L'optimisation (prise et perte) par critère personnalisé a déjà clairement montré l'échec attendu de l'ancien mythe (ou du mien).

 
hrenfx:

Si j'ai bien saisi l'idée, j'ai esquissé le code pour une vérification rapide des "prix" avec une distribution normale des incréments :

L'optimisation (prise et perte) par critère personnalisé a déjà clairement montré l'échec attendu de l'ancien mythe (ou du mien).

Monsieur, votre dame est partie relativement récemment.
 
hrenfx:

Si j'ai bien saisi l'idée, j'ai esquissé le code pour une vérification rapide des "prix" avec une distribution normale des incréments :

L'optimisation (prise et perte) par critère personnalisé a déjà clairement montré l'échec attendu de l' ancien mythe (ou du mien).

Le mythe de quoi ?
 
ZaPutina:
Le mythe de quoi ?

Certains oncles ont discuté de la possibilité de créer un TS rentable sur les prix générés par les SB (plus précisément, les incréments avec une distribution normale). Formalisé le TS, fait beaucoup de recherches...

Je l'ai découvert grâce à une discussion privée qui se rapporte indirectement à ce sujet. Car, peut-être, un jour dans le futur, un sceptique a décidé d'esquisser dans le domaine public un contrôle de code dont personne n'a besoin.

 

pour les dickfks , ne pouvez-vous pas essayer une distribution différente ? par exemple, un prix de marché (généré artificiellement). et pour commencer, sur quelle distribution pouvez-vous faire des bénéfices ?



 
YOUNGA:

Pour dickfks, pourriez-vous essayer une autre distribution ? par exemple, le prix du marché (généré artificiellement). et pour commencer, quelle distribution peut être utilisée pour faire un profit ?

Les bénéfices garantis peuvent être arrachés à des prix "doux". La définition de la fluidité et la formalisation de la TS pour celle-ci ne seront pas données. Peut-être ailleurs. Tout cela n'a pas grand-chose à voir avec le commerce réel.

Le code peut être modifié pour s'adapter à n'importe quelle distribution. Pour ce faire, il suffit de remplacer la fonction GetRandGauss par la fonction quantile de la distribution souhaitée - elle convertit une variable aléatoire uniformément distribuée (MathRand) en la distribution correspondante.

 
hrenfx:

Les bénéfices garantis peuvent être arrachés à des prix "doux". La définition de la fluidité et la formalisation de la TS pour celle-ci ne seront pas données. Peut-être ailleurs. Tout cela n'a pas grand-chose à voir avec le commerce réel.

Le code peut être modifié pour s'adapter à n'importe quelle distribution. Pour ce faire, il suffit de remplacer la fonction GetRandGauss par la fonction du quantile de la distribution souhaitée - elle convertit une variable aléatoire uniformément distribuée (MathRand) en la distribution correspondante.

Vous voulez dire que votre code passe en revue TOUS les choix possibles en 100 lignes ou moins ? Puisque ce n'est pas le cas, qu'est-ce que cela a à voir avec la preuve que l'on ne peut pas gagner de l'argent avec du pseudo SB (il n'y a pas de SB pur dans la nature).
 
ZaPutina:
Vous voulez dire que votre code passe par TOUTES les variantes possibles sans dépasser 100 lignes ? Et puisque ce n'est pas le cas, qu'est-ce que cela a à voir avec la preuve que l'on ne peut pas gagner de l'argent avec du pseudo SB (il n'y a pas de SB pur dans la nature).

Changez le bruit blanc pour la fonction de distribution qui vous intéresse et vérifiez si vous le souhaitez. Seulement, c'est une absurdité : prouver que l'on ne peut pas gagner de l'argent. Prouvez le contraire.

ZZY En parlant de la nature aléatoire du marché : son état actuel(prix de clôture aujourd'hui) a été prédéterminé le 23.03 à 19:00+3:00 heure de Moscou.

 
tara:

Changez le bruit blanc en fonction de la fonction de distribution qui vous intéresse et vérifiez si vous le souhaitez. Seulement, c'est une absurdité : prouver que l'on ne peut pas gagner de l'argent. Prouvez le contraire.

En parlant de la nature aléatoire du marché : son état actuel (prix de clôture aujourd'hui) a été prédéterminé le 23.03 à 19:00+3:00 heure de Moscou.

Avec vous seulement à travers votre gendre... sans vouloir vous manquer de respect.
Raison: