[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 537

 
chief2000:

Voici une question.
Puis-je savoir à partir du code d'un indicateur personnalisé si la fenêtre dans laquelle il s'exécute est actuellement active ou non ?
Par exemple, le même indicateur fonctionne dans deux fenêtres - vous avez besoin qu'il fonctionne uniquement dans la fenêtre dont le graphique est actif et qu'il soit inactif dans la seconde fenêtre.

Merci !

Une fois de plus, la bibliothèque nous aide :-)
 
Zhunko:
Encore une fois, la bibliothèque aide :-)
Merci !
 
Bonsoir, j'ai lancé un rapide rollover du robot ici, et même soudainement sans erreurs procamped, et voilà qu'il ouvre soudainement deux ordres en même temps !!! C'est-à-dire un ordre à la fois, sur le premier et le deuxième tic-tac. Voici le code, je vais le coller ci-dessous. La variable BUY est le nombre d'ordres d'achat qui ont déjà été ouverts et si elle est supérieure à zéro, même si un ordre existe, il ne doit pas être ouvert.
//+------------------------------------------------------------------+
//|                                                        антиб.mq4 |
//|                      Copyright © 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern double volume=0.01;extern double stoploss=12,takeprofit=12;extern int magic=50001,I=5;
int ticket;double volumee ; 
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   volumee=volume;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
        
int start()
  {   int BUY;
  
//----

 for( int i=OrdersHistoryTotal() -1;i>=0;i--){
    OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); if (OrderMagicNumber( )== magic) { if(OrderSymbol()== Symbol()) {
      if(OrderType()==OP_BUY ) {   if ((OrderProfit( )-3*Point) <  OrderTakeProfit( ) && (OrderProfit( )+3*Point) >  OrderTakeProfit( ) ) { if( OrderTicket( ) == ticket ) {
               volumee = volumee+volumee;}}}}}}
if (volumee>volume*I){volumee=volume;}


              for ( i=OrdersTotal()-1;i>=0;i--)
   {
    if (OrderSelect(i, SELECT_BY_TICKET ) == true)    Alert ("Select error ", GetLastError( ) ) ;
     if(OrderMagicNumber( )== magic){
      if(OrderSymbol()== Symbol()) {
      if(OrderType()==OP_BUY ) {
                             BUY++;}}}}   
 if(BUY==0){

 ticket= OrderSend( Symbol(), OP_BUY, volumee, NormalizeDouble(( Ask),Digits),NormalizeDouble(( Point*3),Digits) , NormalizeDouble(( Ask-stoploss*Point),Digits), NormalizeDouble(( Ask+takeprofit*Point),Digits), NULL,  magic, 0, Red) ;}
 
 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Ici, deux mandats ! !
 

Vous savez, peut-être que j'ai tripoté la boucle for, une commande, j'enlève une autre, et la condition de la boucle n'est pas du tout remplie. Oui, oui, on dirait, et il y a exactement deux commandes en cours !

Mes amis, dois-je supprimer mes derniers commentaires ?

Non, j'en ai encore deux, et après la troisième ou quatrième coche, Alert : Select error 4105 s'écrit,

Il semble que la commande n'ait pas été sélectionnée et il n'y a pas d'erreur au départ... Ceci est correct for( int i=0;i<=OrdersHistoryTotal();i++){

et donc for( int i=0;i<=OrdersTotal();i++){

Et il y a deux ordres tout de même.

C'est ça, un. Ouf. ;


 
Erreur 4105 - ordre non sélectionné - ne disparaît pas, mais fonctionne généralement de manière adéquate
 
Ivn:

Bonjour, comment rédiger un conseiller standard pour une autre période de temps. Par exemple, mettez cet indicateur sur le graphique 1 heure qui montrera l'indicateur 4 heures.

пытался //+------------------------------------------------------------------+
//| vv at 4 o'clock.mq4 |
//| Copyright © 2012, MetaQuotes Software Corp.
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#lien de propriété "https://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 3
#propriété indicator_color1 LightSeaGreen
#propriété indicator_color2 LightSeaGreen
#propriété indicator_color3 LightSeaGreen
//---- paramètres de l'indicateur
extern int BandsPeriod=20 ;
externe interne BandsShift=0 ;
extern double BandsDeviations=2.0 ;
//---- tampons
double MovingBuffer[] ;
double UpperBuffer[] ;
double LowerBuffer[] ;
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int init()
{
//---- indicateurs
SetIndexStyle(0,DRAW_LINE) ;
SetIndexBuffer(0,MovingBuffer) ;
SetIndexStyle(1,DRAW_LINE) ;
SetIndexBuffer(1,UpperBuffer) ;
SetIndexStyle(2,DRAW_LINE) ;
SetIndexBuffer(2,LowerBuffer) ;
//----
SetIndexDrawBegin(0,BandsPeriod+BandsShift) ;
SetIndexDrawBegin(1,BandsPeriod+BandsShift) ;
SetIndexDrawBegin(2,BandsPeriod+BandsShift) ;
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| Bandes de Bollinger |
//+------------------------------------------------------------------+
int start()
{
int i,k,counted_bars=IndicatorCounted() ;
double déviation ;
double sum, oldval, newres ;
int B=iBars( NULL,PERIOD_H4) ;
double C=iClose(NULL,PERIOD_H4,0) ;
//----
si(B <=BandsPeriod) return(0) ;
//---- zéro initial
si(barres comptées<1)
for(i=1;i<=BandsPeriod;i++)
{
MovingBuffer[B-i]=EMPTY_VALUE ;
UpperBuffer[B-i]=EMPTY_VALUE ;
LowerBuffer[B-i]=EMPTY_VALUE ;
}
//----
int limit=B-counted_bars ;
si(barres comptées>0) limite++ ;
pour(i=0 ; i<limite ; i++)
MovingBuffer[i]=iMA(NULL,PERIOD_H4,BandsPeriod,BandsShift,MODE_SMA,PRICE_CLOSE,i) ;
//----
i=B-BandsPeriod+1 ;
if(counted_bars>BandsPeriod-1) i=B-counted_bars-1 ;
while(i>=0)
{
somme=0.0 ;
k=i+BandesPériode-1 ;
oldval=MovingBuffer[i] ;
alors que (k>=i)
{
newres=C[k]-oldval ;
somme+=nouvelles*nouvelles ;
k-- ;
}
écart=BandesDeviations*MathSqrt(sum/BandsPeriod) ;
UpperBuffer[i]=oldval+déviation ;
LowerBuffer[i]=oldval-deviation ;
i-- ;
}
//----
retour(0) ;
}
//+------------------------------------------------------------------+

n'a pas fonctionné

this newres=C[k]-oldval;- '[' - jeton inattendu

L'indicateur des bandes de Bollinger.


Au lieu de C[k], insérez iClose(NULL,PERIOD_H4,k) ;

Cependant, j'ai obtenu un moyen d'afficher le graphique de 1 heure et la ligne de 4 heures d'une manière plus naturelle.
Lorsque je traduis ce code sur un graphique, je vois le prix quitter le canal ; il semble que la bande de Bollinger à 4 heures ne soit pas connectée à la ligne de temps.

Merci d'avance

 

Les gars, pouvez-vous me dire par expérience... J'ai choisi une société pour louer un VPS pour le trading via un terminal client MT4. Je suis intéressé par la quantité de trafic que consomme en moyenne un terminal en fonctionnement, par exemple, avec dix sops ? Il y aura plusieurs terminaux en fonctionnement... Pour que je puisse choisir le plan de données approprié parmi ceux proposés :

P.S. Ils ont un tarif basé sur le trafic total, c'est-à-dire entrant + sortant.

 

Collègues, qui sait répondre :

J'ai un testeur de stratégie sur la même période (01.05.2011 - 27.01.2012), paire de devises EURUSD, sur des barres horaires (H1), d'un DC (Alpari), et le même conseiller, mais sur différents ordinateurs (portable, de bureau) donne des résultats opposés ! Sur le PC - 2000 $, sur l'ordinateur portable +3000. Et là, et là vérifié sur 2-3 fois.

Veuillez m'indiquer la cause et ce qu'il faut faire et / ou me donner un lien où lire ce sujet.
 
Sersad:

Collègues, qui connaît la réponse :

J'ai un testeur de stratégie sur le même intervalle de temps (01.05.2011 - 27.01.2012), la paire de devises EURUSD, sur les barres horaires (H1), d'un DC (Alpari), et le même Expert Advisor, mais sur des ordinateurs différents (portable, desktop) donne des résultats opposés ! Sur le PC - 2000 $, sur l'ordinateur portable +3000. Et là, et là vérifié sur 2-3 fois.

Veuillez m'indiquer la cause et ce qu'il faut faire et / ou me donner un lien où lire ce sujet.


J'ai été moi-même pris dans ce piège une fois... a connu une situation similaire : Le premier terminal a été installé avec Metacquotes, le second avec Alparey, l'historique aussi en conséquence, il y avait des différences significatives en testant le même hibou, je n'ai pas pu comprendre ce qui n'allait pas pendant longtemps.

1. Téléchargez les terminaux d'Alpari. Téléchargez l'historique des cotations Alpari pour l'instrument et cette fenêtre apparaîtra :

Si elle ne s'affiche pas après avoir appuyé sur F2 puis sur "Télécharger", cela signifie que vous êtes en train de télécharger l'historique des cotations Alpari. Si vous ne voyez pas cette fenêtre apparaître après avoir appuyé sur F2 puis sur "Télécharger", cela signifie que vous n'allez pas télécharger l'historique des prix d'Alpari.

2. Dans le testeur de stratégie, réglez toutes les options sur la même valeur et vérifiez l'écart en cliquant sur le bouton "Propriétés". Vérifiez les valeurs d'écart dans le testeur de stratégie en cliquant sur le bouton "Propriétés du symbole".

Avant de faire cela - effacez et rechargez l'historique des cotations pour l'instrument qui vous intéresse + vérifiez la période de test : dans la capture d'écran H4 - pour qu'elle soit la même dans les deux cas.