[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 279

 

Si vous le savez, il existe deux lignes, l'une suivant les nouveaux sommets d'une série de chandeliers, l'autre suivant les creux. Lorsque la distance entre les lignes est supérieure à 50, une ligne verticale doit être tracée. La ligne verticale a besoin d'une coordonnée - le temps. Comment puis-je dessiner le moment où la distance entre les lignes sera supérieure à 50 ? Je ne peux pas penser à quelque chose.

Je voulais dessiner la ligne verticale en utilisant ObjectCreate... Si l'on peut le faire sans temps, que faut-il utiliser ?
 
waitra >> :

Pourrait-il y avoir une fonction qui détecte simplement qu'"il n'y a pas encore d'ordres dans l'historique de l'EA" ? - Ce serait suffisant.

Je ne sais pas. Peut-être que quelqu'un ici peut nous le dire ?

Je pense que nous devrions essayer de modifier la fonction de Kim. Celui-là :

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru            |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                  |
//|  Описание : Возвращает количество позиций.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                            |
//|    sy - наименование инструмента   (""   - любой символ,  |
//|                                     NULL - текущий символ)          |
//|    op - операция                   (-1   - любая позиция)       |
//|    mn - MagicNumber                (-1   - любой магик)               |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()== sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op) {
            if ( mn<0 || OrderMagicNumber()== mn) kp++;
          }}}}}  return( kp);}

C'est-à-dire qu'au lieu de MODE_TRADES, prenez MODE_HISTOIRE - c'est-à-dire que l'ordre est sélectionné parmi les ordres fermés et supprimés.

Ensuite (changer le nom de f-i) :

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru            |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                  |
//|  Описание : Возвращает кол-во ордеровиз истории счета  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                           |
//|    sy - наименование инструмента   (""   - любой символ, |
//|                                     NULL - текущий символ)        |
//|    op - операция                   (-1   - любая позиция)       |
//|    mn - MagicNumber                (-1   - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfPos_HISTORY (string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY )) {
      if (OrderSymbol()== sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op) {
            if ( mn<0 || OrderMagicNumber()== mn) kp++;
          }}}}}  return( kp);}

Essayez-le, cela fonctionnera-t-il ou non ?

 

Bonjour, mes amis.


Veuillez me conseiller à ce sujet.


Par exemple, je dois ouvrir une position lorsqu'une "bougie de prix" a franchi une moyenne mobile.

Jusqu'à présent, je sais seulement comment classer les signaux lorsqu'un chandelier s'est fermé/ouvert au-dessus/au-dessous de la moyenne mobile...

( iMA( .....) >Close[1] ou iMA(....) >Open[0] )

Comment puis-je entrer lorsque la bougie actuelle est déjà au-dessus/au-dessous de la MA, au lieu d'attendre que la bougie actuelle se ferme et que la suivante s'ouvre ?


Merci beaucoup d'avance.

 
Morzh09 >> :

Bonjour, mes amis.


Veuillez me conseiller à ce sujet.


Par exemple, je dois ouvrir une position lorsqu'une "bougie de prix" a franchi une moyenne mobile.

Jusqu'à présent, je sais seulement comment classer les signaux lorsqu'un chandelier s'est fermé/ouvert au-dessus/au-dessous de la moyenne mobile...

( iMA( .....) >Close[1] ou iMA(....) >Open[0] )

Comment puis-je entrer lorsque la bougie actuelle est déjà au-dessus/en dessous de la MA, au lieu d'attendre que la bougie actuelle se ferme et que la suivante s'ouvre, si elle est déjà au-dessus/en dessous de la MA ?


Je ne sais pas quoi en faire.

Comment l'aimez-vous ?

iMA(....) >Open[0] ? - zéro est la bougie actuelle.

 
rid >> :

Ce qui n'est pas à aimer :

iMA(....) >Open[0] ? - zéro est le chandelier actuel

c'est vrai, mais, par exemple, il y a des cas où, après avoir ouvert sous la MA, le prix casse ensuite (généralement aux nouvelles) la MA dans une longue bougie et monte, vers le bas.....

Si nous utilisons mes critères d'ouverture, nous pouvons manquer de tels mouvements...

Par conséquent, j'aimerais ouvrir une position si le prix est actuellement au-dessus/au-dessous de la moyenne, plutôt que d'attendre la fermeture de celle-ci et l'ouverture de la bougie suivante.

 

Il peut s'agir de :

if (  iMA(.... .... , 1) >Close[1]  && iMA(.... ... , 0) < Open[0]  ) // продажа

(Si la MA de la barre précédente est supérieure au prix de clôture de la barre précédente et que la MA de la barre actuelle devient inférieure au prix d'ouverture de la barre actuelle, alors vendez).

 

Ça fait deux jours que je fais des bêtises et je n'arrive pas à comprendre. J'ai pris le code du tutoriel de Kovalev et j'ai essayé d'ouvrir un ordre d'achat et j'ai obtenu la réponse "Error 130".

Code

nt f_Open_Ord(int Tip)
{
int Ticket, // Numéro d'ordre
MN ; // MagicNumber

double SL, // StopLoss (valeur du prix relatif)
TP ; // TakeProf (valeur du prix relatif)
//--------------------------------------------------------------- 3 --
while(g_Mas_Tip[Tip]==0) // Tant que .
{ //...pas de succès
if (SL<g_Level_new) // si moins que permis...
SL=(g_Niveau_nouveau+20) ; // ... alors autorisé
if (TP<g_Niveau_nouveau)
// Si moins que l'autorisé...
TP=(g_Level_new+20) ; // .alors autorisé
MN=TimeCurrent() ; // Simple MagicNumber
f_Inform(13,Tip) ; // Message sur la tentative d'ouverture
if (Tip==0) // Ouvrons l'achat
{
SL=Bid - SL*Point ; // StopLoss (prix)
SL=NormalizeDouble(SL,Digits) ;
TP=Bid + TP*Point ; // TakeProfit (prix)
TP=NormalizeDouble(TP,Digits) ;
Ticket=OrderSend(Symbol(),0,g_Lots_New,Ask,5,1.46500,1.47500,",MN) ;
err=GetLastError() ;
Comment("numéro d'erreur ",err) ;
if (Ticket>0) f_Inform(4) ;
//if (Ticket<0) f_Inform(25)

Le code a été retravaillé. Tout fonctionne correctement. Je pense que l'erreur n'est pas dans le code. DC-Broco/.

 

Sorri, c'était précipité. Les valeurs 1.46500 et 1.47500 dans la fonction OrderSend doivent être changées en SL et TP respectivement.

 
VNG писал(а) >>

Sorri, c'était précipité. Les valeurs 1.46500 et 1.47500 dans la fonction OrderSend doivent être remplacées par SL et TP, respectivement.

Que représentent SL et TP ? S'il est égal à zéro, comme dans le code ci-dessus, tout est correct. Une erreur devrait être générée

 

Les arrêts sont extraits de la variable globale g_Level_new, qui est calculée comme suit : g_Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL )