Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 573

 
Bonjour, pouvez-vous me dire comment apprendre à mon conseiller expert à détecter les fractales ?
 
skyjet:
Bonjour, pouvez-vous me dire comment apprendre à mon conseiller expert à détecter les fractales ?

Je souhaiterais avoir plus de détails. Il y a beaucoup d'indices différents qui permettent de dessiner et de trouver des fractales. Le conseiller expert n'a pas besoin de les détecter. Vous prenez l'indicateur et copiez les valeurs d'une certaine fractale à partir de ses tampons. Rien de compliqué si vous y prêtez attention.
 

Bonne journée ! Les gars, conseillez-moi sur cette question : dans le testeur de stratégie, l'exp ouvre des ordres selon l'algorithme et le schéma d'augmentation de la taille du canal des moyennes ultérieures - vous pouvez le voir dans l'image - chaque moyenne ultérieure est ouverte à une plus grande distance de la précédente (comme dans Ilan). Mais en même temps, l'imprimeur produit de telles valeurs d'expressions, que le calcul de la moyenne ne devrait pas avoir lieu, car les conditions de leur ouverture ne sont pas remplies 25 pas plus que 2856, 2197, 1690. Comment peut-il entrer dans cet état et ouvrir des positions ? J'ai décidé de tout entourer d'accolades, mais cela ne sert à rien.

Un test sur les prix d'ouverture. Voici le code et l'image :

...
// Внешние переменные (оптимизируются)
extern string A1 = " Параметры ММ ";
extern double Lots = 0.02;         // Стартовый лот

//-------------------                                  
extern double LotExponent = 2.7;  // на сколько умножать стартовый лот в степени - схема по Илану                                   

extern string A2 = " В настоящих пипсах ";
extern int StopLossPips_BUY = 100;   // уровень стартового усреднения в бай  объёма позиции в пипсах 


// Увеличение шага усреднений по схеме

extern double PipStepExponent_BUY  = 1.3; // на сколько умножать стартовый шаг в степени 

//-----------------------------------------------------------------------

.....

// если стартовая открыта и достигнут уровень усреднения, то усреднить на  Lots * MathPow(LotExponent,NumberOfPositions(Symbol(), -1, MN_L));  
    if (NumberOfPositions(Symbol(), -1, MN_L)>=1 && 
       GetProfitOpenPosInCurrency(Symbol(), -1, MN_L)<0)   
      // if (MathAbs (GetProfitOpenPosInPoint(Symbol(), -1, MN_L)) > StopLossPips)  
          {
           if (GetTypeLastOpenPos(Symbol(), MN_L)==OP_BUY) 
              if (MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L)<0) // надо ли усреднять
                {
                 if (NumberOfPositions(Symbol(), -1, MN_L)==1) 
                    {// при первом усреднении, усреднять через стартовое количество пунктов - StopLossPips_BUY
                     if ( NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0)>StopLossPips_BUY)                 
                     {WmOrderSend(Symbol(), OP_BUY,  NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " первое усреднение вверх ", MN_L);
                      Print (" первое усреднение ");
                     }
                    } 
                 if (NumberOfPositions(Symbol(), -1, MN_L)>1) // при последующих - усреднять через  MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))  
                    {
                     if ( NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0) > 
                          NormalizeDouble((StopLossPips_BUY* MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1)),0))                                           
                     {
                       WmOrderSend(Symbol(), OP_BUY,  NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " усреднение вверх ", MN_L);          
                       Print (" последующие, если это больше ", NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0),
                              " этого, то открыть бай ", NormalizeDouble(StopLossPips_BUY*MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1),0));
                     }
                    }
                 }   
                     
              
           if (GetTypeLastOpenPos(Symbol(), MN_L)==OP_SELL) 
               if ((PriceOpenLastPos(Symbol(), OP_SELL, MN_L)-MarketInfo(OrderSymbol(), MODE_ASK))<0)
               
                  if (NumberOfPositions(Symbol(), -1, MN_L)==1)
                     {
                      if (NormalizeDouble((MathAbs(PriceOpenLastPos(Symbol(), OP_SELL, MN_L)-MarketInfo(OrderSymbol(), MODE_ASK))/Point),0)>StopLossPips_SELL)           
                      WmOrderSend(Symbol(), OP_SELL,  NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_SELL,MN_L))),Bid, 0, TP_START_SELL, " усреднение вниз ", MN_L);         
                     }
                     
          }           
.....

 
skyjet:
Bonjour, pouvez-vous me dire comment apprendre à l'Expert Advisor à détecter les fractales ?

Voir navigateur. Si c'est à propos de ça, c'est comme ça.
 
Roman.:

Bonne journée ! Les gars, conseillez-moi sur cette question : dans le testeur de stratégie, l'exp ouvre des ordres selon l'algorithme et le schéma d'augmentation de la taille du canal des moyennes ultérieures - vous pouvez le voir dans l'image - chaque moyenne ultérieure est ouverte à une plus grande distance de la précédente (comme dans Ilan). Mais en même temps, l'imprimeur produit de telles valeurs d'expressions, que le calcul de la moyenne ne devrait pas avoir lieu, car les conditions de leur ouverture ne sont pas remplies 25 pas plus que 2856, 2197, 1690. Comment peut-il entrer dans cet état et ouvrir des positions ? J'ai décidé de tout entourer d'accolades, mais cela ne sert à rien.

Un test sur les prix d'ouverture. Voici le code et l'image :


D'après ce que je comprends, sans voir tout le code et sans apprendre comment il fonctionne ici, il est peu probable que quelqu'un puisse vous le dire. Toutes les fonctions utilisées dans ce bloc ne sont connues que de vous. Il est préférable de tout imprimer au fur et à mesure et de garder un œil sur la sortie des messages.
 
hoz:

D'après ce que je comprends, sans voir tout le code et sans apprendre comment il fonctionne ici, je pense que personne ne peut vous le dire. Toutes les fonctions utilisées dans ce bloc ne sont connues que de vous. Il est préférable de tout imprimer au fur et à mesure et de garder un œil sur la sortie du message.

Toutes les fonctions fonctionnent correctement - ce sont les fonctions de Kim I.V. "Seulement les fonctions utiles de Kim I.V." Du nom des fonctions - leur but est clair.
 

J'ai trouvé la solution - tout fonctionne correctement. Il aurait dû être imprimé AVANT l'ouverture de la position.

 if (GetTypeLastOpenPos(Symbol(), MN_L)==OP_BUY) 
              if (MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L)<0) // надо ли усреднять
                {
                 if (NumberOfPositions(Symbol(), -1, MN_L)==1) 
                    {// при первом усреднении, усреднять через стартовое количество пунктов - StopLossPips_BUY
                     if ( NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0)>StopLossPips_BUY)                 
                        {
                         Print (" первое усреднение ",NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0),
                                " StopLossPips_BUY = ",StopLossPips_BUY, " MODE_BID = ", DoubleToStr(MarketInfo(OrderSymbol(), MODE_BID),Digits), " PriceOpenLastPos = ", DoubleToStr(PriceOpenLastPos(Symbol(), OP_BUY, MN_L),Digits), "P = ", DoubleToStr(Point,Digits));                 
                         WmOrderSend(Symbol(), OP_BUY,  NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " первое усреднение вверх ", MN_L);
                        }
                    } 
                 if (NumberOfPositions(Symbol(), -1, MN_L)>1) // при последующих - усреднять через  MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))  
                    {
                     if (NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0) > 
                         NormalizeDouble((StopLossPips_BUY* MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1)),0))                                           
                     {
                        Print (" последующие, если это больше ", DoubleToStr(NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0),Digits),
                              " этого, то открыть бай ", DoubleToStr(NormalizeDouble(StopLossPips_BUY*MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1),0),Digits),
                              " MODE_BID = ", DoubleToStr(MarketInfo(OrderSymbol(), MODE_BID),Digits), " PriceOpenLastPos = ", DoubleToStr(PriceOpenLastPos(Symbol(), OP_BUY, MN_L),Digits));
                       WmOrderSend(Symbol(), OP_BUY,  NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " усреднение вверх ", MN_L);          
                                           }
                    }
                 }   
           

La position de moyenne a été ouverte selon l'algorithme et la fonction PriceOpenLastPos(Symbol(), OP_BUY, MN_L) a retourné la valeur de la position qui venait d'être ouverte, c'est pourquoi j'avais des questions.

Merci, Hoz.

 

Roman, Heureux que cela ait marché pour vous :) Et aussi, si rapide.

En gros, mon compilateur s'est remis à jurer. Il y a une bibliothèque qui utilise une classe dans celle-ci. La classe de cours est incluse dans la bibliothèque :

#include <HOZ_Code\Classes\CLogging.mqh>

CLogging logging;

Lors de la compilation de cette bibliothèque, qui utilise la classe CLogging.mqh, le compilateur jure comme ceci :

'#property' - name expected     CLogging.mqh    6       1

Dans la classe sur cette ligne :

Qu'est-ce que tout cela peut signifier ?

 
Comment le script permet-il d'activer/désactiver l'affichage des niveaux de trading?
 

Au secours ! !!

Dans un EA du forum public, j'ai attaché un modèle à 3 barres à une condition d'entrée de transaction.

Après l'optimisation et les tests (3,5 ans), j'ai installé dix fenêtres sur un compte de démonstration avec des paramètres individuels dans chacune d'elles, ce qui a permis d'assurer la vitesse des transactions de chouettes au moins 1,5 par jour. La même vitesse est assurée sur 10 ordinateurs virtuels sur mon serveur - une fenêtre dans chacun.

Une semaine s'est écoulée, mais aucun accord n'a été conclu nulle part.

Que faire ?

=========================

int GetSignal()
{
double LevelADX = iADX(NULL,TF_ADX,PeriodADX,4,MODE_MAIN,0) ;
double Delta_01_ADX =(iADX(NULL,TF_ADX,PeriodADX,4,MODE_MAIN,0)
- iADX(NULL,TF_ADX,PeriodADX,4,MODE_MAIN,2)) ;
double mas,maf ;
mas=iMA(NULL,TF_MA,Slow.period,0,Slow.metod,Slow.price,1) ;
maf=iMA(NULL,TF_MA,Fast.period,0,Fast.metod,Fast.price,1) ;
//------------------
double delta1,delta2 ;

delta1=NormalizeDouble((Close[1]-Close[2])/Point,5) ;
delta2=NormalizeDouble((Close[2]-Close[3])/Point,5) ;

double body3=NormalizeDouble((Open[3]-Close[3])/Point,5)
//------------------
int STsig=-1 ;
if(CrossLevel && Lines>0) {
int up,dw ;
int up_l,dw_l ;
for(jj=0;jj<8;jj++) {
if(ST[jj][0]<LevelDw) dw++ ; else{
if(ST[jj][0]>LevelUp) up++ ;
}
if(ST[jj][1]<LevelDw) dw_l++ ; else{
if(ST[jj][1]>LevelUp) up_l++ ;
}
}
if(up<=8-Lines && up_l>8-Lines) STsig=1 ;
if(dw<=8-Lines && dw_l>8-Lines) STsig=0 ;
}
if(STsig==-1 && BreakSweep) {
double big,small ;
double big_l,small_l ;
for(jj=0;jj<8;jj++) {
if(ST[jj][1]>big_l) big_l=ST[jj][1] ;
if(ST[jj][1]<small_l || small_l==0) small_l=ST[jj][1] ;
}
if(big_l-small_l<=Sweep && (small_l>=LevelUp || big_l<=LevelDw)) {
for(jj=0;jj<8;jj++) {
if(ST[jj][0]>big) big=ST[jj][0] ;
if(ST[jj][0]<small || small==0) small=ST[jj][0] ;
}
if(big-small>Sweep)

{

//--------------- mes add-ons Volume [] et Open [] et Close [] ------------------------------

if(Close[1]>Close[2]&& Close[2]>Close[3]&& Close[3]<Open[3] && Close[2]>High[3]
&& body3>=Body3 && delta1>=Delta1 && delta2>Delta2 && big_l<=LevelDw && maf>mas)
STsig=0 ;

if(Close[1]<Close[2]&& Close[2]<Close[3]&& Close[3]>Open[3] && Close[2]<Low[3]
&& body3>=Corps3 && delta1>=Delta1 && delta2>Delta2 && small_l>=LevelUp && maf<mas)
STsig=1 ;
}

}

}

if(Volume[0]<2 && Volume[1]>Volume1 && Volume[2]>Volume2
&& Delta_01_ADX > DeltaADX && LevelADX < StopADX && STsig==0) return(OP_BUY) ;

if(Volume[0]<2 && Volume[1]>Volume1 && Volume[2]>Volume2
&& Delta_01_ADX > DeltaADX && LevelADX < StopADX && STsig==1) return(OP_SELL) ;
return(-1) ;

}

=================================================

Merci d'avance !