Spread trading dans Meta Trader - page 144

 
Scorp1978 >>:

rid спасибо хорошая идея (от тиков придется тогда отказываться), фильтр от сильных убыточных движений ты имеешь ввиду "если сумарный профит меньше чего то, то закрыть все позиции".......

Non. Je voulais dire l'entrée initiale - "/if
//la taille de la première bougie est supérieure à la valeur fixée, aucun trading n'est autorisé..."

 
Bon après-midi à tous ! Joyeuses fêtes à tous ceux qui considèrent ce jour comme un jour férié !
//---------------------------------------
Une question s'est posée. Voici une fonction qui donne (calcule) l'écart moyen entre les instruments pour les derniers NBars.
 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);
}
Veuillez me dire comment définir
//-------------
int k ;
double N = 0 ; double Sum = 0 ;
for(k = 0 ; k < iBars(Symbol_1,Timeframe) ; k++)
{
if(N == NBars)
//------------------------
de sorte que la fonction renvoie la valeur moyenne de l'écart non pas pour toutes les barres NBars,
mais pour les barres NBars sauf la dernière.
En d'autres termes, je veux que la dernière barre soit exclue du calcul ! Ou même un nombre donné de barres les plus récentes ne devrait pas être inclus dans le calcul.
Y a-t-il un moyen d'organiser cela ?
(En retour, je peux donner une bonne entrée sur le marché le lundi 3 mai. Avec une forte probabilité de conclusion profitable ultérieure !)
 
double CalculateAvarageSpread(string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars, int NBarsSkip)
{
   int k;
   double N = 0;
   double Sum = 0;
   if(NBars > iBars(Symbol_1,Timeframe)) NBars=iBars(Symbol_1,Timeframe); // если н больше чем баров на графике то обрезаем
   if(NBarsSkip >= NBars) NBarsSkip=0; // если пропускаем баров больше/равно чем NBars, то ничего не пропускаем
   for(k = NBarsSkip; k < NBars; k++)
   {

      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);
}
NBarsSkip définit le nombre de barres manquées qui ne participeront pas au calcul. c NBarsSkip par NBars participera au calcul.
 
Merci, NCI !
Je vous enverrai une entrée prospective dans un instant.
Une dernière question.
Je viens d'avoir une idée.
Et si on simplifiait encore plus. Définissez-le comme suit :
Au lieu de for(k = 0 ; k < iBars(Symbol_1,Timeframe) ; k++)
définissez
for(k = M; k < iBars(Symbol_1,Timeframe) ; k++),
M est le nombre de barres exclues du calcul.
Cela fonctionnera-t-il ?


 
Seulement, pas k=M, mais k=M+1... La barre M n'est pas prise en compte
 
Merci ! J'ai aussi envoyé une inscription.
 
Honnêtement, je n'ai pas remarqué au début que NBars ne devait prendre en compte que les barres existant sur deux instruments en même temps, alors le code que j'ai posté ne répond pas à cette logique. et laconstruction avec M ne serait pas correcte non plus. dans ce cas vous pourriez faire ce qui suit :
double CalculateAvarageSpread(string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars, int NBarsSkip)
{
   int k;
   double N = 0;
   int NReal = 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)
      {
         N++;
         if(N>NBarsSkip)
         {
            Sum += iClose(Symbol_1,Timeframe,k) - iClose(Symbol_2,Timeframe,symb2Shift);
            NReal++;  // счетчик Н которые не пропущены и посчитаны
         }
      }
   }
   if(NReal==0) return(0); // так как у нас не получилось рассчитать ни одного бара
   else
   {
      double avarageSpread = Sum / NReal;
      return(avarageSpread);
   }
}


 
Merci. Pour une raison quelconque, mon code n'a pas compilé au début, il a retourné une erreur (crochet)
Jusqu'à ce que je déplace du nom de la fonction "...., int NBarsSkip "
aux paramètres externes de l'EA
extern int NBarsSkip =2
Je ne sais pas pourquoi il y a eu une erreur.
Mais quand je l'ai déplacé, tout allait bien.
 

j'ai lu cette branche de bout en bout - les 145 pages. merci à tous : rid, leonid553, fduch, neoclassic, getch, forex-k, goldtrader, timbo, fortrader. J'ai beaucoup d'informations, je suis encore en train de les digérer. Ma principale conclusion est la suivante : il faut creuser ici, ça vaut le coup. P.s. : bon fil conducteur, presque aucune inondation. Merci encore 2rid

 

Merci !

"Des informations à méditer.

À partir de lundi, la pâte à tartiner ZM-ZL (farine-huile, 5:6)

!

Raison: