[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 320

 
comment puis-je savoir s'il existe un ordre ouvert ou fixé à un prix donné ?
 
sdm:
Comment puis-je savoir s'il existe un ordre ouvert ou en attente au prix donné ?

Passez en revue les commandes et comparez-les avec le prix indiqué. Si c'est le cas, vérifiez le temps d'ouverture

if(OrderOpenTime()!=0) S'il n'est pas égal à zéro, alors il est ouvert, s'il est égal, alors il est en attente.

 
int start()
{

double kr =0.00060 // fixer le multiple, étape
double msell =Ask - MathMod( Ask, kr) ; // prix de vente

{
Alert(" just ", msell," typed) ;
return ;// quitter start()
}
//----

//----
return(0)

}


Pouvez-vous me dire ce qui ne va pas ici ?

la compilation donne 'msell' - variable non définie C:\Program Files\MetaTrader 4 \experts\temp.mq4 (16, 11)

 
Je l'ai trouvé moi-même)
 
hoz:

nous avons un compteur dont les valeurs sont calculées en fonction de l'ordre d'apparition des barres, de la barre d'indicei_AnyBarsToHistory à la barre d'indice 1. Il s'ensuit que si la condition sera remplie sur les barres de l'indice 30 à l'indice 15:

directionMA == CROSS_UP 

et alors par exemple à cnt=2 la condition sera remplie :

directionMA == CROSS_DN

Ensuite, cnt sera incrémenté à la valeur précédente. Si nous avions 2, la nouvelle condition s'incrémenterait de 1, puis cnt=3 et nous quitterions la fonction avec la valeur 3. Vous voyez ce que je veux dire ? Regardez de plus près, la logique est en principe claire ici.

Désolé pour le retard dans la réponse, je m'occupais de mon ordinateur de poche. Donc. La question est de savoir comment utiliser un tel compteur unique pour déterminer à quel mouvement il se réfère, n'est-ce pas ? Vous pouvez coudre une variable logique dans le compteur, mais ensuite l'incrémenter par deux au lieu de un.

int LastCandlesType(int& cnt){//передаём параметры по ссылке, т.е. они у нас отсюда меняются на глобальном уровне
        for (int i=IndicatorCounted(); i>=1; i--){//считаем все неподсчитанные свечи; появится новая свеча - функция прогонится один раз
                if ((2*cross-1)*(Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt){cnt=cnt+2;//инкрементируем на 2, т.к. у нас в cnt вшит cross
                }else{
                        cross = !cross;//иначе, если не соответствует, оборачиваем флаг направления
                        cnt = cross;//и обнуляем счётчик её значением
                }//потом cnt/2 будет количеством подсчитанных свечей,
        }//а cnt%2 - их направлением.
}

Ça donne quelque chose comme ça.

 
sdm:
double kr =0.00060;//внимательнее надо быть
sdm:
Je l'ai trouvé moi-même)

Comme on dit, nos gens sont comme ça, ils sont pleins de conseils. Je n'ai pas eu le temps).

 
Bon après-midi. Pourriez-vous me dire comment résoudre la situation suivante : j'ai dessiné un objetOBJ_FIBOARC dans la fenêtre. J'ai défini les niveaux requis. Je veux comprendre que le prix a franchi un niveau ou un autre. J'ai résolu un problème similaire avec les niveaux de Fibonacci, mais c'est plus facile car nous travaillons avec des niveaux horizontaux et le croisement peut être facilement calculé. Ici, nous avons une ellipse. Nous ne pouvons pas utiliser l'équation du cercle (ellipse) ici car le système de coordonnées X est le temps et le système de coordonnées Y est le prix, c'est-à-dire que les valeurs ne sont pas comparables.
 
gyfto:

Désolé pour le retard dans la réponse, je m'occupais de la voiture.

Ooh, vilain garçon ! Vous tourmentez toujours Mashka :)

gyfto:

Désolé pour le retard dans la réponse, je m'occupais de la voiture. Donc. La question est de savoir comment utiliser un tel compteur unique pour déterminer à quel mouvement il se réfère, n'est-ce pas ? Vous pouvez coudre une variable logique dans le compteur, mais ensuite l'incrémenter par deux au lieu de un.

int LastCandlesType(int& cnt){//передаём параметры по ссылке, т.е. они у нас отсюда меняются на глобальном уровне
        for (int i=IndicatorCounted(); i>=1; i--){//считаем все неподсчитанные свечи; появится новая свеча - функция прогонится один раз
                if ((2*cross-1)*(Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt){cnt=cnt+2;//инкрементируем на 2, т.к. у нас в cnt вшит cross
                }else{
                        cross = !cross;//иначе, если не соответствует, оборачиваем флаг направления
                        cnt = cross;//и обнуляем счётчик её значением
                }//потом cnt/2 будет количеством подсчитанных свечей,
        }//а cnt%2 - их направлением.
}

Ça donne quelque chose comme ça.

Eh bien, vous l'avez écrit pour l'indicateur, pas pour le Conseiller Expert. Je suis un conseiller expert.

Et pourquoi incrémenter par 2 ?

gyfto:

Donc. La question est de savoir comment déterminer à quel mouvement il se réfère, n'est-ce pas ?


Je veux que le calcul des barres consécutives d'une caractéristique (par exemple, baissière ou haussière) soit basé sur une autre caractéristique, qui est passée par un paramètre de fonction.

Au fait,https://www.mql5.com/ru/forum/144705, j'ai créé une branche séparée. Tout est là, ce dont on a besoin. C'est très intéressant de trouver ce qui ne va pas.

 
Alors voici la question ... Je ne comprends pas, quand j'ai téléchargé les cotations, le terminal exécute un script pour recalculer les timeframes..... sur un mois quel jour il met 30 ou 31 comment le savoir ?
 
hoz:

https://www.mql5.com/ru/forum/144705 Ici, j'ai commencé un fil séparé. Il contient tous les détails de ce qui est nécessaire.


Oui, c'est plus amusant avec une source complète. Immédiatement visible, que d'où et où passe, que diable et combien de fois. C'est ce qui a immédiatement attiré mon attention :

hoz:
int GetStateOfMA()
{
   if (GetMA(1) > GetMA(2))
   {
       pr ("GetStateOfMA() = CROSS_UP");
       return (CROSS_UP);
   }
       
   if (GetMA(1) < GetMA(2))
   {
       pr ("GetStateOfMA() = CROSS_DN");
       return (CROSS_DN);
   }
       
    pr ("GetStateOfMA() = CROSS_NO");
    return (CROSS_NO);
}

Vous pouvez le simplifier en le réduisant pratiquement à une ligne :

int GetStateOfMA(){
   if(GetMa(2)==GetMa(1)) return(0); else return(MathAbs(GetMA(2)-GetMA(1))/(GetMA(2)-GetMA(1)));
}

Ici, nous retournons le zéro ou le signe de la différence (plus ou moins). Voir : le module d'un nombre divisé par le nombre lui-même est pratiquement le même que la division d'un nombre par un nombre, c'est-à-dire un, seulement si le nombre était négatif, naturellement moins un est retourné.

Je continue à réfléchir.