Indicateur stochastique. Une observation curieuse.

 

Je pense que le stochastique est un indicateur prometteur pour le trading automatique.

Mais il s'avère que ce n'est pas si simple ! J'ai réalisé un Expert Advisor très simple (une dizaine de lignes) basé sur la stochastique sans aucun "excès".

Entrée - franchissement de la ligne principale de la ligne de signalisation. L'algorithme est donc basé sur le croisement des lignes de signaux :

int start()
  {
 
 
double StochK_0=iStochastic(NULL, 0, K_period,D_period,3,MODE_SMA,0,MODE_MAIN, 0);
double StochK_1=iStochastic(NULL, 0, K_period,D_period,3,MODE_SMA,0,MODE_MAIN, 1);
 
double StochD_0=iStochastic(NULL, 0, K_period,D_period,3,MODE_SMA,0,MODE_PLUSDI, 0);
 
 
//===== Ищем возможность войти в рынок ==================================================
 
int Orders=OrdersTotal ();     //получаем кол-во открытых ордеров
if (Orders==0)                 //если нет открытых ордеров
  {  
//---------проверяем условие на покупку----------------------------
  if   (  (StochK_1<StochD_0)  &&
          (StochK_0>StochD_0)  )
   {
  ticket= ... ...          
   }
 
//--------проверяем условие на продажу------------------------------
  if  (   (StochK_1>StochD_0)  &&
          (StochK_0<StochD_0)) 
   {       
  ticket=... ...       
   }

Puis je l'ai optimisé à l'œil et l'ai fait tourner dans le testeur pendant un an et demi. Et là, j'ai découvert, ou plutôt prouvé mon observation de longue date ! Le stochastique n'est pas un indicateur symétrique, comme beaucoup de gens le pensent. La gamme dynamique de l'indicateur, en raison de sa structure, reflète différemment les mouvements de prix à la hausse et à la baisse !

C'est pourquoi, dans le trading manuel et automatique, nous sommes parfois initialement désavantagés lorsque nous ouvrons des positions de VENTE.

Symbole GBPUSD (livre sterling contre dollar américain) Période 4 heures (H4) (2006.01.01 - 2007.08.31)

Modèle Tous les ticks (basé sur toutes les plus petites périodes disponibles avec interpolation fractale de chaque tick)

Qualité de la modélisation 90.00% Dépôt initial 10000.00

Bénéfice net 3667.00

Bénéfice total 9801.02

Perte totale -6134.02 Rentabilité 1.60

Gain attendu 13,94 Retrait absolu 202,02 Retrait maximal 438,24 (3,25%) Retrait relatif 3,25% (438,24)

Total des transactions 263

Positions courtes (% de gain) 134 (51,49%)

Positions longues (% de gain) 129 (67,44%)

Transactions rentables (% de toutes) 156 (59,32%)

Transactions à perte (% de toutes) 107 (40,68%)

La transaction la plus rentable est de 130.00

Perte de Deal Deal -60.56

Moyenne des transactions rentables 62.83

perte de l'accord -57,33

Quels que soient les dispositions, les variantes et les paramètres, il s'avère toujours que les transactions longues utilisant l'indicateur sur diverses paires sont plus prometteuses que les transactions courtes.

Il s'avère toujours que le nombre d'affaires rentables des longues est de 80 %.

Et pour les plus courtes - au mieux 50/55%.

Et ceci est vrai pour les entrées par la ligne de signal, ainsi que par les niveaux de surachat/survente, et même par iOnArray.

La conclusion est que lors de l'utilisation de la stochastique, les paramètres d'achat et de vente doivent être définis séparément. C'est-à-dire appliquer deux indicateurs.

 

La stochastique a la fâcheuse propriété de changer ses valeurs rétroactivement, surtout si les valeurs sont prises à partir d'horizons temporels plus élevés.

Si ce problème n'existait pas, il serait difficile de trouver un meilleur indicateur !

Et il est difficile de trouver un meilleur indicateur !

 
Aleksey24:

La stochastique a la fâcheuse propriété de changer ses valeurs rétroactivement, surtout si les valeurs sont prises à partir d'horizons temporels plus élevés.

Si ce problème n'existait pas, il serait difficile de trouver un meilleur indicateur !


C'est absurde. Où avez-vous vu une telle stochastique ?
 
leonid553:

Le stochastique n'est pas du tout un indicateur symétrique. Comme beaucoup de gens le pensent. La gamme dynamique de l'indicateur, en raison de sa structure, dépeint différemment les mouvements de prix à la hausse et à la baisse !

C'est une autre conclusion. Connaissez-vous la formule stochastique ?
 

Non. 99/1.

Saviez-vous que le code stochastique complet est disponible à l'adresse suivante : 'Stochastic Oscillator, Stochastic'.

Pourriez-vous pointer du doigt l'endroit du code qui est responsable de.. :

- " lorsque l'ouverture d'une position de VENTE nous désavantage parfois au départ " ?

- "La stochastique a la fâcheuse propriété de changer ses valeurs rétroactivement" ?

 

Voici une preuve claire de l'asymétrie de la stochastique.

Le canal accroché à l'indicateur se rétrécit constamment en bas et s'élargit en haut. Ou devons-nous passer par les chiffres de manière ennuyeuse pour trouver la formule ?

 

Si nous jetons un coup d'œil superficiel à la formule stochastique, nous pouvons déjà supposer avec une grande probabilité que l'unipolarité de l'indicateur est "à blâmer" pour l'asymétrie !

Et je ne peux rien dire sur le changement des "valeurs arriérées", je n'y ai pas été confronté.

 

Que ferait une formule "miroir" ?

%K = 100*SUM (MAX (HIGH, Pk)-CLOSE), Sk) / SUM (MAX (HIGH, Pk) - MIN (LOW, Pk)), Sk)

 

C'est difficile à dire d'emblée. Vous devez probablement écrire le code pour l'indicateur de miroir. Comparez leur configuration sur le tableau.

Pour le trading automatique, toute différence d'affichage sera significative. Entrez dans l'achat en utilisant un indicateur normal. Utilisez un indicateur de miroir pour entrer dans Sell.

 

Eh bien, le code source est disponible, il est facile à remplacer. Mais pour la perception ce sera plus naturel par idée

%K = 100*(1-SUM (MAX (HIGH, Pk)-CLOSE), Sk) / SUM (MAX (HIGH, Pk) - MIN (LOW, Pk)), Sk))

 
leonid553:

Si nous jetons un coup d'œil superficiel à la formule stochastique, nous pouvons déjà supposer avec une grande probabilité que l'unipolarité de l'indicateur est "à blâmer" pour l'asymétrie !

Et je ne peux rien dire sur le changement des "valeurs arriérées", je n'y ai pas été confronté.

Unipolarité de l'indicateur - peut être corrigée :
- Dans l'indicateur standard
iStochastic
Le sommet et la clôture sont formés par l'offre - c'est là tout le problème. C'est une erreur grossière ! Surtout pour les stochastiques ! !! Et surtout sur les petites périodes ! !!
Je ne suis pas un programmeur, ne jugez pas sévèrement, j'ai amélioré la stochastique standard pour moi-même. Il fonctionne correctement :
//+------------------------------------------------------------------+
//| $Stochastic. mq4 |
//| Vladimir |
//+------------------------------------------------------------------+
 
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_level1 80
#property indicator_level2 50
#property indicator_level3 20
 
#property indicator_buffers 2
#property indicator_color1 LightSeaGreen
#property indicator_color2 Red
//---- input parameters
extern int KPeriod=6;
extern int DPeriod=2;
extern int Slowing=1;
//---- buffers
double MainBuffer[];
double SignalBuffer[];
double HighesBuffer[];
double LowesBuffer[];
//----
int draw_begin1=0;
int draw_begin2=0;
double CHigh,CClose;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- 2 additional buffers are used for counting.
IndicatorBuffers(4);
SetIndexBuffer(2, HighesBuffer);
SetIndexBuffer(3, LowesBuffer);
//---- indicator lines
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0, MainBuffer);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1, SignalBuffer);
//---- name for DataWindow and indicator subwindow label
short_name="Stochastic("+KPeriod+","+DPeriod+", "+Slowing+")";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
SetIndexLabel(1,"Signal");
//----
draw_begin1=KPeriod+Slowing;
draw_begin2=draw_begin1+DPeriod;
SetIndexDrawBegin(0,draw_begin1);
SetIndexDrawBegin(1,draw_begin2);
//----
CHigh=MarketInfo(Symbol(),MODE_SPREAD)*MarketInfo(Symbol(),MODE_POINT);// Вычисляем спред
CClose=CHigh/2.0;// Спред пополам
//----
return(0);
}
//+------------------------------------------------------------------+
//| Stochastic oscillator |
//+------------------------------------------------------------------+
int start()
{
int i,k;
int counted_bars=IndicatorCounted();
double price;
//----
if(Bars<=draw_begin2) return(0);
//---- initial zero
if(counted_bars<1)
{
for(i=1;i<=draw_begin1;i++) MainBuffer[Bars-i]=0;
for(i=1;i<=draw_begin2;i++) SignalBuffer[Bars-i]=0;
}
//---- minimums counting
i=Bars-KPeriod;
if(counted_bars>KPeriod) i=Bars-counted_bars-1;
while(i>=0)
{
double min=1000000;
k=i+KPeriod-1;
while(k>=i)
{
price=Low[k];
if(min>price) min=price;
k--;
}
LowesBuffer[i]=min;
i--;
}
//---- maximums counting
i=Bars-KPeriod;
if(counted_bars>KPeriod) i=Bars-counted_bars-1;
while(i>=0)
{
double max=-1000000;
k=i+KPeriod-1;
while(k>=i)
{
price=High[k]+CHigh;
if(max<price) max=price;
k--;
}
HighesBuffer[i]=max;
i--;
}
//---- %K line
i=Bars-draw_begin1;
if(counted_bars>draw_begin1) i=Bars-counted_bars-1;
while(i>=0)
{
double sumlow=0.0;
double sumhigh=0.0;
for(k=(i+Slowing-1);k>=i;k--)
{
sumlow+=Close[k]+CClose-LowesBuffer[k];
sumhigh+=HighesBuffer[k]-LowesBuffer[k];
}
if(sumhigh==0.0) MainBuffer[i]=100.0;
else MainBuffer[i]=sumlow/sumhigh*100;
i--;
}
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;
//---- signal line is simple movimg average
for(i=0; i<limit; i++)
SignalBuffer[i]=iMAOnArray(MainBuffer,Bars,DPeriod, 0, MODE_SMA, i);
//----
return(0);
}
//+------------------------------------------------------------------+