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

 
rapid_minus:

Bonjour !

Je recherchais une erreur dans le code de mon conseiller expert et j'ai rencontré une confusion - lorsque le test de l'opérateur if() dans la fonction OnTick() ne fonctionne qu'une seule fois, il ne fonctionne pas sur les ticks et les barres suivantes.

Pourquoi ? Quel est le problème dans le fragment de code ci-joint ?

Eh bien, cherchez où les variables sont réaffectées. D'abord, trouvez où ClsS = false ; et s'il est exécuté.
 
AlexeyVik:
Eh bien, cherchez où les variables sont réaffectées. D'abord, trouvez où ClsS = false ; et s'il est exécuté.
ClsS = false dans les variables globales. Aha ! Je l'ai - je change false en true. Vérifions...
 

ÇA MARCHE ! MERCI !

Je vais aller vérifier plus loin. Merci encore.

 
Encore une fois, aidez-moi... La vérification des critères d'ouverture/fermeture montre qu'ils apparaissent selon les conditions données, mais lorsque je vais plus loin, l'alerte écrit qu'ils n'existent pas. Est-ce qu'il y a quelque chose qui m'échappe ici aussi ?
//----------------------------------------------------------------------------------- 8 -- Открытие ордеров

    while (Ticket==0)                                            // Цикл открытия ордеров
     {
      if (OpnB != true || OpnS != true)
         {
          Alert("Отсутствуют критерии открытия позиций");
          return;                                            // Выход из OnTick()
         }
      if (Total==0) Alert("открытых ордеров нет"); 

      if (Total==0 && OpnB == true)                         // Если открытых ордеров нет и есть критерий открытия БАЙ...
       {

        SL = Bid - New_Stop(StopLoss)*Point;                // СЛ открытия
        TP = Bid + New_Stop(TakeProfit)*Point;              // ТП открытия
        Alert("Попытка открыть БАЙ. Ожидание ответа...");
        Ticket=OrderSend(Symb,OP_BUY,Lots,Ask,2,SL,TP,Blue); // Открытие БАЙ
        if (Ticket>0)                                       // Если получилось...
         {
          Alert("Открыт ордер БАЙ №",Ticket);
        break;                                              // Выход из while
         }
 
gince:

mComment puis-je le faire de manière programmatique dans l'indicateur ?

Je ne sais pas comment demander à l'assistant.

Peut-être que quelqu'un peut me donner un lien spécifique ou des mots-clés.

Voir les propriétésChartGetInteger() et CHART_WINDOW_IS_VISIBLE

 

Bonjour à tous ! Voici une question qui vient de l'extérieur de la boîte...... Introduction de la fonction de démarrage. Question, pourquoi à chaque nouvelle barre la variable N est doublée. A chaque nouvelle barre, alors qu'il devrait le faire UNIQUEMENT lorsqu'un nouveau signal arrive ???

Que disent les développeurs à ce sujet ???

int start()
 { 
  int i,limit,K;
  int counted_bars=IndicatorCounted();

//  double R,P,N,Zscore,Nprof,Nloose;
//limit=Bars-100;

if (b!=Bars){
b=Bars;
//Sleep(3000);

double ldt_BeginDay = iTime (NULL, PERIOD_D1,20); 
double limit1 = iBarShift (NULL, 0, ldt_BeginDay);

   if(counted_bars<1) limit=limit1-counted_bars;
   else limit=limit1;

 for(i=limit; i>=1; i--)   
      {
       double Profit=(iCustom(NULL, 0, "TDSEQUENTA v2015",5,8,12,0,i)); 
       double CurSignal=(iCustom(NULL, 0, "TDSEQUENTA v2015",5,8,12,6,i)); 
if (CurSignal!=0){      
   /*   
if (curDay!=TimeDay(Time[i])) {
curDay=TimeDay(Time[i]);
double AAA=ProfitFactor;
}*/
      
   
       if ((Profit>0)&&(CurSignal!=0))  {Nprof=Nprof+1;
       if (LastProfit<=0) R=R+1;
                                                      SredP1=SredP1+Profit;
                                                      GrosProf=GrosProf+Profit;
                                                     } else Nprof=Nprof;
                                                     
       if ((Profit<0)&&(CurSignal!=0))  { Nloose=Nloose+1;
       if (LastProfit>=0) R=R+1;
                                                      SredL1=SredL1+(Profit*-1);                                                    
                                                      GrosLoose=GrosLoose+(Profit*-1);
                                                     } Nloose=Nloose;
      if (Nloose>0)SredL=SredL1/Nloose;
      if (Nprof>0) SredP=SredP1/Nprof;
      
      // if (Profit>0) Sred=Sred+Profit; else Sred=Sred+(Profit*-1);                                                                                                                                                    
       N=Nprof+Nloose;
       P=2*Nprof*Nloose;
     // if (Body!=LastBody)N=N+1;   
    //   if (CurSignal!=0)K=K+1;
       
      // if (CumDel!=0)Volum=AD/CumDel;
       if (((Nprof+Nloose)>5)&&(SredL!=0)) MO=(1+(SredP/SredL))*((Nprof/(Nprof+Nloose))-1); //MO
      //////////стандартное отклонение//////////
      if ((N>0)&&(LastProfit!=Profit))Sred1=Sred1+((Profit-(Sred/N))*(Profit-(Sred/N)));
      if ((N>2)&&(LastProfit!=Profit)) Sred2=sqrt(Sred1/(N-1));
      if ((Sred2>0)) Sharp=MO/Sred2;
       
       
       if (GrosLoose>0) ProfitFactor=GrosProf/(GrosLoose); //ProfitFactor
       
       if ((N>2)&&(P>5)) Zscore=(N*(R-0.5)-P)/sqrt((P*(P-N))/(N-1)); // Zscore
       
      if ((SredL>0)&&(SredP>0)&&(P>5))  Kelli=((1-(Nprof/N))/(SredP/SredL))-(Nprof/N);
    //Buffer0[i+1]=ProfitFactor;
    }
    
  //  Buffer1[i]=Kelli-LastKelli;
    //Buffer2[i]=Zscore-LastZscore;
     Buffer2[i]=N;
      // if ((Profit1>0)) Buffer3[i]=1; else Buffer3[i]=0;
  //      if ((Profit1<0)) Buffer5[i]=1; else Buffer5[i]=0;
    // Buffer4[i]=Sharp;
        //Buffer5[i]=HC;
  //      Buffer6[i]=LC;
  
  
  /*
  if (Buffer2[i]>0){
                     if (Profit>0.000){
                                 if (CurSignal>0) Buffer3[i]=1;
                                 if (CurSignal<0) Buffer3[i]=-1;
                                   }
                     if (Profit<0.000){
                                 if (CurSignal>0) Buffer3[i]=-1;
                                 if (CurSignal<0) Buffer3[i]=1;
                                   }
                   } 
  if (Buffer2[i]<0){
                     if (Profit>0.000){
                                 if (CurSignal>0) Buffer3[i]=-1;
                                 if (CurSignal<0) Buffer3[i]=1;
                                   }
                     if (Profit<0.000){
                                 if (CurSignal>0) Buffer3[i]=1;
                                 if (CurSignal<0) Buffer3[i]=-1;
                                   }
                   }*/
 /*
  
        LastPF=ProfitFactor;
        LastMO=MO;
        LastZscore=Zscore;
        LastSTD=STD;
        LastKelli=Kelli;
        LastSharp=Sharp;
        LastVolume=Volum;
        LastProfit=Profit;
        LastPF=ProfitFactor;*/
       // Zscore=0;
        
        } 
    
     }
 return(0);    
     }
 

Bonjour !

Peut-être que quelqu'un a déjà rencontré ce problème et en connaît la cause et la solution ?

Le conseiller fonctionne clairement sur le testeur, et lorsqu'il est activé sur les cotations actuelles, la position ouverte par les critères se ferme sur le prochain tick PERDANT (le tick Plus n'a aucun effet). L'impression générale est celle d'une interférence extérieure. Quel peut être le problème ici ? Merci.

 
rapid_minus:

Bonjour !

Peut-être que quelqu'un a déjà rencontré ce problème et en connaît la cause et la solution ?

Le conseiller fonctionne clairement sur le testeur, et lorsqu'il est activé sur les cotations actuelles, la position ouverte par les critères se ferme sur le prochain tick PERDANT (le tick Plus n'a aucun effet). L'impression générale est celle d'une interférence extérieure. Quel peut être le problème ici ? Merci.

Sans code, seuls les médiums peuvent aider. Il y a une branche d'eux quelque part. Nous devrions y poser une question.
 
Eh bien, certainement s'il y a une intervention extérieure, seulement pour un médium.
 
Vinin:
Sans le code, seuls les médiums peuvent aider. Il y avait une branche d'eux quelque part. Vous devriez y poser une question

Une "blague d'humour" est toujours un plus !

Le code est trop volumineux pour être affiché ici dans son intégralité. Mais il a été écrit en utilisant l'Expert Advisor de Sleptsov comme modèle. Je n'ai inséré que mes propres indicateurs et conditions pour les critères de trading. Je pense que la raison en est une sorte de réglage préliminaire du code, mais ils sont absolument identiques à l'original.