Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 542

 
Artyom Trishkin:

De ce temps[i], il faut extraire une heure.

Imprime toujours l'heure 10:05:00 et 22:10:00 et d'autres en dehors de l'heure autorisée.

Il ne devrait pas imprimer de 17h00 à 11h00, mais il le fait.

 for(int i=limit-2; i>0; i--) 
     {
    if(TimeHour(time[i])>=17&&TimeHour(time[i])<=11)continue;
      if(i%2==0) 
        {
         if(open[i]<close[i] && open[i+1]>close[i+1]) 
           {
            k1++;
            if(k1>max) {max=k1; dat_max=time[i];}
            if(k1>=4)Print("Num: ",k1,"dat_max ",time[i]);
            SetText("Obj_"+(string)time[i],(string)k1,time[i],high[i],Arr);
           }
         else k1=0;
         
           } else {
         if(open[i]<close[i] && open[i+1]>close[i+1]) 
           {
            k2++;
            if(k2>max){ max=k2; dat_max=time[i];}
            if(k2>=4)Print("Num: ",k2,"dat_max ",time[i]);
            SetText("Obj_"+(string)time[i],(string)k2,time[i],high[i],Arr);
           }
         else k2=0;
         
        }
      
     }

   Comment("Max: ",max,"dat_max ",dat_max," rates_total ",rates_total);

 
if(TimeHour(time[i])>=17 || TimeHour(time[i])<=11)continue;
 
Taras Slobodyanik:

Merci.

 
k_chens:

Bonjour, aidez-nous ! J'essaie d'écrire beaucoup de contrôle de compte. Si mon compte réalise un profit de +10%, alors le lot est doublé. Si +20%, alors lot*4. Si mon compte diminue, la taille du lot diminue également. Je ne comprends pas comment faire pour que Lots_New prenne une nouvelle valeur à chaque nouvelle transaction.

C'est une tâche loin d'être triviale pour une personne qui commence à apprendre la programmation. En effet, pour le résoudre, il faut penser à un mécanisme permettant de stocker la prochaine valeur de solde. De plus, nous devons trouver où stocker cette valeur. Les variables des programmes ne conviennent pas à cette fin. Par exemple, vous pouvez utiliser les variables globales du terminal ou les écrire dans un fichier. Tout dépend de l'endroit et de la manière dont vous comptez utiliser le programme.

La solution la plus universelle (si le programme est prévu pour être utilisé sur différents ordinateurs sans possibilité de transférer les données entre les copies du programme) est de scanner l'historique du compte pour calculer les profits/pertes, obtenus grâce au travail du programme. Mais il y a aussi la question du choix du point de référence (où trouver la valeur d'équilibre à partir de laquelle compter).

 
Bonjour, pouvez-vous nous expliquer les étapes de la sélection d'un médecin ?

Extern bool hand orders =true ;
Extern int Magic_Number =777 ;
//première ligne
((OrderMagicNumber()==Magic_Number && hand_orders==false) || (OrderMagicNumber()==0 && hand_orders==true))

//deuxième ligne
(OrderMagicNumber()==Magic_Number || (OrderMagicNumber()==0 && hand_orders==true)))


Quel type de valeurs médicales leur manque-t-il ? Veuillez écrire
 
Tigerfreerun:
Bonjour, veuillez expliquer les lignes pour la sélection d'un medjic :

Extern bool hand orders =true ;
Extern int Magic_Number =777 ;
//première ligne
((OrderMagicNumber()==Magic_Number && hand_orders==false) || (OrderMagicNumber()==0 && hand_orders==true))

//deuxième ligne
(OrderMagicNumber()==Magic_Number || (OrderMagicNumber()==0 && hand_orders==true)))


Quel type de valeurs médicales leur manque-t-il ? Veuillez écrire

remplacez dans vos expressions - && par "ET EN MÊME TEMPS", et remplacez || par "OU".

vous devriez être capable de le lire et de voir comment il fonctionne.


la première ligne fonctionnera soit avec magic =777 (quand hand_orders=false) ou magic = 0 (quand hand_orders=true)

la deuxième ligne fonctionne TOUJOURS avec majic=777, et si hand_orders=true, elle fonctionne EN PLUS avec majic=0

 

Comment calculer, en une seule fonction, le profit en pips pour deux instruments ?

Spin

double Punkts_B(string Sy_1="",string Sy_2="",int _Mag=-1)
  {
   double xxx=0;
   bool bw;
   for(int t=0;t<=OrdersTotal();t++)
     {
      bw=OrderSelect(t,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Sy_1 || OrderSymbol()==Sy_2
         && OrderMagicNumber()==_Mag
         && (OrderType()==OP_BUY || OrderType()==OP_SELL))
         xxx=OrderClosePrice()-OrderOpenPrice();
      RefreshRates();
     }
   return(xxx);
  }
 
PolarSeaman:

Comment calculer, en une seule fonction, le bénéfice en pips pour deux instruments ?

Rouler

int Punkts_B(string Sy_1="",string Sy_2="",int _Mag=-1)
  {
   int xxx = 0;
   double tickValue_1 = SymbolInfoDouble(Sy_1, SYMBOL_TRADE_TICK_VALUE),
          tickValue_2 = SymbolInfoDouble(Sy_2, SYMBOL_TRADE_TICK_VALUE);
   for(int t=0;t<OrdersTotal();t++)
     {
      if( !OrderSelect(t,SELECT_BY_POS,MODE_TRADES) )  continue;
      if( OrderSymbol()!=Sy_1 && OrderSymbol()!=Sy_2 ) continue;
      if( OrderMagicNumber()!=_Mag )                   continue;
      if( OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;
      xxx+=(int)((OrderProfit()+OrderSwap()+OrderCommission())/(OrderSymbol()==Sy_1 ? tickValue_1 : tickValue_2));
     }
   return(xxx);
  }
 
Konstantin Nikitin:
les points de deux instruments différents ne peuvent pas être superposés.
 
Maxim Kuznetsov:
les points de deux instruments différents ne peuvent pas être additionnés.

Il a demandé, en points, le voici en points. Laissez-le réfléchir =)

Raison: