Spread trading dans Meta Trader - page 5

 

En un mot :

1) L'écart moyen est calculé

2) L'écart actuel est calculé pour les DERNIERS prix.

3) Si l'écart actuel est supérieur ou inférieur à l'écart statistique moyen, la position est ouverte. (Le niveau inférieur/supérieur est déterminé en fonction de la situation du marché - contango ou backwardation).

 
Comment calculez-vous l'écart moyen (si ce n'est pas un secret) ?
 
MetaDriver >> :

Je ne suis pas vraiment sûr de ce qu'est le crime. Était-elle de connivence avec un courtier pour faire bouger les prix ? Ou juste avec sa pâte ? Si c'est avec son propre argent, je ne vois pas d'activité criminelle. L'esprit, oui. Le criminel, non. Et votre "gros coup" n'est qu'une moralisation névrotique. Lorsque les banques le font, personne ne pense à appeler cela de la criminalité. :)


Lisez-le ici (à partir du post 310) : http://www.procapital.ru/showthread.php?t=20648&page=21 et ici http://www.procapital.ru/showthread.php?t=21115.

 
rid >> :
Comment calculez-vous l'écart moyen (si ce n'est pas un secret) ?


double CalculateAvarageSpread(string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars)
{
   int k;
   double N = 0;
   double Sum = 0;
   for( k = 0; k < iBars( Symbol_1, Timeframe); k++)
   {
      if( N == NBars)
         break;

      int symb2Shift = iBarShift( Symbol_2, Timeframe,iTime( Symbol_1, Timeframe, k),true);
      if( symb2Shift != -1)
      {
         Sum += iClose( Symbol_1, Timeframe, k) - iClose( Symbol_2, Timeframe, symb2Shift);
         N++;
      }
   }
   double avarageSpread = Sum / N;
   return( avarageSpread);
}
 

C'est la position du bureau et on peut comprendre pourquoi. Mais si vous regardez les faits - la cuisine a fait une offre et une proposition, qui n'est rien d'autre qu'une offre pour conclure un accord. Le client accepte cette offre. Après cela, accuser la cuisine d'avoir été trompée, et en même temps soutenir que "personne, pas même le plus brillant des traders, n'a jamais négocié la nuit sur de la viande" ou "nous ne savions pas que la liquidité du marché n'était pas infinie" - c'est un jeu d'enfant.

La position de la cuisine semble très faible, je doute qu'ils veuillent porter l'affaire en justice.

 

Oui... Bien sûr, ce n'est pas lisse.

Chez B., en démo, les ordres ne peuvent être ouverts qu'aux prix des symboles GCZ9 et GCG0, (Bid = Ask).

Dans la négociation réelle, l'ordre est ouvert à GCZ9#I et GCG0#I, (Bid != Ask).

Et le spread est obtenu de manière tout à fait adéquate mais il n'y a pas de méga-profit.


Il semble donc qu'il s'agisse d'un moyen comme un autre de construire de beaux tableaux d'équilibre de démonstration.

 
Fduch >> :

Oui... Bien sûr, ce n'est pas lisse.

Chez B., dans la démo, les ordres peuvent être ouverts uniquement aux prix des symboles GCZ9 et GCG0, (Bid = Ask).

Dans la négociation réelle, l'ordre est ouvert à GCZ9#I et GCG0#I, (Bid != Ask).

Et le spread est obtenu de manière tout à fait adéquate mais il n'y a pas de méga-profit.


Il semble donc qu'il ne s'agisse que d'un autre moyen de construire de beaux graphiques d'équilibre de démonstration.


Pas exactement. ! Sur la démo, tout comme sur le réel les positions sont ouvertes / fermées aux prix Ask / Bid Ticker #I (et pas du tout LAST) !

C'est dans le testeur - on travaille sur les prix EN DERNIER.

(Et dans le testeur B. la dispersion du ticker #I n'est pas prise en compte. Avec tout ce que cela implique...)

Merci, au passage, pour le code de l'étalement moyen.

Ça marche. Approximativement les mêmes que dans les États de la page 1.

Bien que sur le terrain, bien sûr, il est peu probable que ce soit aussi lisse. Le dérapage réduit pratiquement (au mieux) tout le bénéfice obtenu à zéro. Il faut rechercher les instruments les plus optimaux. Heureusement, il y a beaucoup de marchandises (outils). Alors on pourrait réussir à en tirer quelque chose.

L'EA ne peut pas être exécuté dans le testeur pour des raisons évidentes. Par conséquent, nous devrons surveiller la situation en ligne. Ce n'est pas une tâche rapide...

 

Je suppose également que le calcul de l'écart et le calcul des entrées ne sont pas effectués à partir des prix LUST, mais à partir de MarketInfo(ticker #I,MODE_ASK) ;

En outre, fixez une limite à la taille de l'écart actuel pour chaque symbole :

spr = MarketInfo(ticker #I,MODE_ASK) -MarketInfo(ticker #I,MODE_BID) ;

Et fixez également de manière rigide les intervalles de temps de travail. Afin de ne pas tomber dans des heures illiquides avec un énorme écart lors de l'ouverture d'une position.

Je pense que de cette manière, il sera possible d'augmenter le bénéfice (ou de diminuer la perte) de chaque transaction de 2 à 4 ticks.

 
A cause des DERNIERS prix il arrive que les tickers de la couverture soient en bon profit depuis longtemps (je le regarde maintenant - je l'ai mis dans le commentaire), mais le graphique et le terminal montrent un maigre profit ou, pire, sont encore en perte à cause de l'inertie des DERNIERS prix !
Regarder maintenant sur GBPUSD plus 6BH0, donc besoin urgent de passer aux prix MarketInfo (ticker #I,....).
 

J'ai suivi le sujet presque depuis le début.

Mais, je ne suis pas tout à fait d'accord avec la détection de la valeur moyenne et je ne suis pas tout à fait clair sur la question de l'ouverture, c'est-à-dire quand.

J'ai décrit l'écart (la différence) un peu différemment, c'est peut-être brut, mais c'est très intéressant en tant qu'EA.

Si vous pouvez parler.

extern string Sum_1="GCG0";
extern string Sum_2="GCZ9";
double ARR[100,3];
double ARR_M[100];
int N=0;
int init()
{
ArrayInitialize( ARR,0);
ArrayInitialize( ARR_M,0);
}
int start()
  {
//----
double G0=MarketInfo( Sum_1,MODE_BID);
double Z9=MarketInfo( Sum_2,MODE_BID);
ARR[ N,0]= G0;
ARR[ N,1]= Z9;
ARR_M[ N]= G0- Z9;
N++;
if ( N>=100) N=0;
double SUM_0=0;
double SUM_1=0;
for (int r=0; r<100; r++)
{ 
SUM_0= SUM_0+( ARR[ r,0]- ARR[ r,1]);

}
double Aver= SUM_0/100;
double MAX=0;
double MIN=0;
for (int rr=0; rr<100; rr++)
{
if ( ARR_M[ rr]> MAX) MAX= ARR_M[ rr];
if ( ARR_M[ rr]< MIN) MIN= ARR_M[ rr];
}
Comment ("Aver  ",DoubleToStr( Aver,2),"   ", N,"   MAX  ",DoubleToStr( MAX,2)," MIN  ",DoubleToStr( MIN,2),"\n",
G0,"  ", Z9,"  ", G0- Z9);
//----
   return(0);
  }