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

 

mais il y a un autre code dans l'EA :

int CloseMarket()
   {
    for (int j=0; j<OrdersTotal(); j++)
      {
       OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()<2)
         {
          CloseOrder(OrderTicket(),OrderLots());
          j--;
         }
      }
   } 
 
alex12:

Mais il y a un autre code dans l'EA :

mettez par exemple Print("close by CloseMarket ", j) ; dans cette fonction et quelque chose de similaire dans la précédente que vous avez postée . exécutez-la et regardez dans les logs pour voir laquelle de ces impressions apparaît afin d'analyser celle qui se déclenche. ensuite, enregistrez de la même manière les valeurs des variables vérifiées dans les conditions d'exécution de la fermeture et trouvez les raisons de leur déclenchement...

 
alsu:
Et qu'est-ce qui vous empêche de placer l'EA sur la fenêtre exacte où vous voulez dessiner ?


Mon EA fonctionne mieux sur M1, car il est meilleur sur M1 et ouvre 1 trade sur l'ouverture de la barre M5, il recharge également si les conditions le permettent. J'utilise également des indicateurs sur la M5 et d'autres TF. Et il est préférable de tester sur M1 à l'ouverture de la barre, alors que sur d'autres TFs avec tous les ticks, les tests sont mauvais.

Je ne dessine pas, je vois juste les résultats des calculs effectués par l'EA et affichés dans somments pour m'assurer que tout est en ordre. Merci de votre attention et de votre aide !

 
borilunad:


Mon EA fonctionne mieux sur M1, car il trafique mieux sur M1 et ouvre une transaction sur l'ouverture de la barre M5, il recharge également si les conditions le permettent. Et j'utilise des indicateurs sur le M5 et d'autres TF. Et il est préférable de tester sur M1 à l'ouverture de la barre, alors que sur d'autres TFs avec tous les ticks, les tests sont mauvais.

Je ne dessine pas, je vois juste les résultats des calculs effectués par l'EA et affichés dans somments pour m'assurer que tout est en ordre. Merci de votre attention et de votre aide !

Sur M1 et sur M5, les ticks proviennent de la même source, et vous pouvez utiliser n'importe quel cadre temporel de n'importe quel graphique, il suffit de remplacer Close[] par iClose, etc. Afin de mieux le tester, vous devriez faire de meilleurs fichiers fxt à partir de ticks, voici un exemple, mais en général google, il y a beaucoup d'informations sur ce sujet.
 
alsu:
Sur M1 et M5, les ticks proviennent de la même source, et vous pouvez utiliser n'importe quel cadre temporel de n'importe quel graphique, il suffit de remplacer Close[] par iClose, etc. Pour mieux le tester, il faut faire de meilleurs fichiers fxt à partir de ticks, voici un exemple, mais en général google, il y a beaucoup d'informations sur ce sujet.

La pratique a montré qu'il est préférable d'ouvrir sur Op et de tester aussi mieux que sur ticks. Je n'aime pas du tout les tiques. Quand la dépo le permettra, je passerai peut-être à un TF plus élevé, qui donnera de meilleurs résultats en un jour. Je ne quitte pas les marchés pour la nuit pour bien dormir. Merci encore !
 
smshev:

Print("Close by CloseMarket ", j) ; dans cette fonction et quelque chose de similaire dans la précédente que vous avez postée. Exécutez-la et regardez dans le journal les résultats de ces imprimantes pour analyser celle qui se déclenche. Ensuite, enregistrez de la même manière les valeurs des variables vérifiées dans les conditions de fermeture et trouvez les raisons de leur déclenchement....

Merci.
 
borilunad:

La pratique a montré qu'il vaut mieux ouvrir sur Orep et tester mieux, aussi, que sur les tiques. Et je n'aime pas du tout les tiques. Quand la dépo le permettra, je passerai peut-être à une TF plus élevée, ce qui donnera de meilleurs résultats en un jour. Je ne quitte pas les marchés pour la nuit pour bien dormir. Merci encore !
Je ne dis pas ça, je dis quelle différence cela fait-il de savoir où l'EA est attaché ? S'il est correctement écrit, l'endroit où il se trouve n'a aucune importance : même s'il se trouve sur le graphique de la bourse de Mongolie, s'il est configuré pour fonctionner sur l'EURUSD 1 minute, il le fera. Et il n'est pas difficile de le programmer, il suffit de modifier quelques lignes en règle générale.
 

Cher Monsieur le Programmateur ! Je n'arrive pas à tracer une ligne horizontale par la valeur numérique maximale de la fenêtre de l'indicateur MACD.

Code


#propriété indicator_separate_window
#property indicator_buffers 3
#propriété indicator_color1 Lime
#property indicator_color2 Red
//--- tampons
double ExtMapBuffer1[] ;
double ExtMapBuffer2[] ;
double topBuffer[] ;


bool initFinished=false ; // ajouter une variable qui se souviendra de l'état de l'initialisation.
// false - l'initialisation n'a pas encore eu lieu.
// vrai - a été initialisé
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int init()
{
//---- indicateurs
SetIndexStyle(0,DRAW_LINE) ;
SetIndexBuffer(0,ExtMapBuffer1) ;
SetIndexStyle(1,DRAW_LINE) ;
SetIndexBuffer(1,ExtMapBuffer2) ;
SetIndexStyle(2,DRAW_NONE) ;
SetIndexBuffer(2,topBuffer) ;
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| Fonction personnalisée de désinitialisation de l'indicateur |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| Fonction d'itération de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),
limite ;

si(barres comptées>0)
barres comptées.. ;

limit=Bars-counted_bars ;
//----
for(int i=0;i<limit;i++)

{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i) ;
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i) ;

si(initFinished==false)
{
IndicatorShortName("MACD_max-min") ;

int win_idx=WindowFind("MACD_max-min") ;
// trouver le numéro de notre sous-fenêtre d'indicateur

si(win_idx<0)
{
// si le numéro de la sous-fenêtre est -1, il y a une erreur
Print("Fenêtre non trouvée") ;
retour(0) ;
}

double top=WindowPriceMax(win_idx) ;
//Trouver la valeur maximale de l'échelle verticale de la sous-fenêtre spécifiée du graphique actuel.


ObjectCreate("max",OBJ_HLINE,win_idx,0,top) ;
// dessiner une ligne horizontale dans une sous-fenêtre de notre indicateur

ObjectSet("max",OBJPROP_COLOR,Yellow) ;
ObjectSet("max",OBJPROP_WIDTH,0) ;

WindowRedraw() ;
// redessiner la fenêtre pour voir la ligne

initFinished=true ;
// le dessin est terminé

}

topBuffer[i]=top ;


}

//----
retour(0) ;
}

//+------------------------------------------------------------------+


On dirait que dans la ligne

double top=WindowPriceMax(win_idx) ;

La variable supérieure ne reçoit pas de valeur et dans le fichier

ObjectCreate("max",OBJ_HLINE,win_idx,0,top) ;

à la place de celle-ci (c'est-à-dire à la place de la variable top), j'obtiens automatiquement 0 (zéro). J'obtiens donc une ligne zéro dans la fenêtre requise et dans la couleur requise. topBuffer[] est également vide. Si dans cette ligne à la place de la variable top mettre une valeur numérique, la ligne prend cette valeur fixe.Quelque part j'ai une erreur clinique.Aidez à comprendre ! Merci d'avance.

Dossiers :
 
IndicatorShortName serait mieux déplacé vers init()
 
alsu:
IndicatorShortName devrait être déplacé vers init()
Quand vous ouvrez l'indicateur, l'objet n'apparaît pas, vous devez ouvrir en plus la fenêtre avec les propriétés de l'indicateur, la fermer et alors l'objet sera visible.