[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 922

 
_SS_:
Comment puis-je déterminer le type d'ordre ouvert ?

Type de commande()

En fait, vous devriez commencer par un manuel... :) Ou au moins utiliser F1 dans MetaEditor.

int OrderType( )
Renvoie le type de commande de la commande actuellement sélectionnée. Il peut s'agir de l'une des valeurs suivantes :
OP_BUY - position d'achat,
OP_SELL - position de vente,
OP_BUYLIMIT - ordre d'achat en attente lorsqu'il atteint un niveau spécifié, le prix actuel est supérieur au niveau,
OP_BUYSTOP - ordre d'achat en attente lorsque le niveau spécifié est atteint, le prix actuel est inférieur au niveau,
OP_SELLLIMIT - ordre de vente en attente lorsque le niveau spécifié est atteint, le prix actuel est inférieur au niveau,
OP_SELLSTOP - ordre de vente en attente lorsque le niveau spécifié est atteint, le prix actuel est supérieur au niveau.
La commande doit être présélectionnée à l'aide de la fonction OrderSelect().
Exemple :
 int order_type ; if(OrderSelect(12, SELECT_BY_POS)==true) { order_type=OrderType() ; // ... } else Print("OrderSelect() a retourné une erreur - ",GetLastError()) ;
 
gheka:

double NormalizeDouble( double valeur, int chiffres)

valeur - Valeur à virgule flottante. --- Qu'est-ce que c'est ?
chiffres - Format de précision, le nombre de chiffres après le point décimal (0-8). --- comme 1.29800 est 5 chiffres, non ?

Une valeur à virgule flottante est un nombre réel comme le double

Et au lieu des chiffres , utilisez une variable de type int.

Par exemple int dg=MarketInfo ( Symbol(), MODE_DIGITS) ;

 
extern double Lot=0.01; // Жестко заданное колич. лотов
datetime time;
//--------------------------------------------------------------- 2 --
int start()
{
int Total;


bool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell

//--------------------------------------------------------------- 3 --
// Учёт ордеров


for(int i=OrdersTotal()-1;i>=0;i--)
if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()>1)Total++;

if(Total!=0 || time==Time[1])return;

static int KolBars;



if (Close[0]-Open[0] > Point && Close[1]-Open[1] > Point && Bars == KolBars)


{

KolBars=Bars ; // запоминаем кол-во бар при которых совершались действия

}




// Торговые критерии

// Критерий откр. Buy


Opn_B=true;

//--------------------------------------------------------------- 7 --


if (Opn_B)
{OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0);time=Time[1];}

}




S'il vous plaît, aidez-moi, c'est la troisième fois que je vous le demande. Un EA élémentaire, ouvre une position d'achat à l'apparition d'une nouvelle bougie (à condition que les 2 bougies précédentes soient vertes), et ferme la position à la clôture de la bougie sur laquelle la position a été ouverte, ou à la clôture de la bougie suivante.

Celui que vous voyez ci-dessus ouvre une position chaque fois qu'une nouvelle bougie apparaît, sans réagir aux critères d'ouverture, mais je ne comprends pas comment fermer la position, je ne l'ai pas trouvé dans le tutoriel ou sur les forums.

 
artmedia70:

La valeur à virgule flottante est un nombre réel de type double.

Et au lieu des chiffres , utilisez une variable de type int.

Par exemple int dg=MarketInfo ( Symbol(), MODE_DIGITS) ;


Ils m'ont écrit : "NormalizeDouble(), vérifie la limite maximale/minimale du lot, si cinq chiffres - augmente le stop et le profit de 10 fois".


La documentation indique : "Arrondir un nombre à virgule flottante à la précision spécifiée. Les valeurs calculées de StopLoss et TakeProfit, ainsi que les prix d'ouverture des ordres en attente doivent être normalisés à la précision, dont la valeur est stockée dans la variable prédéfinie digits".

Je n'ai pas trouvé cela dans le manuel. J'ai compris que je devais normaliser le prix actuel, le StopLoss et le TakeProfit avec NormalizeDouble --- comment dois-je le normaliser ?

double NormalizeDouble( double valeur, int chiffres)

double value -- au lieu de double value je peux utiliser e.g. Prise

int digits -- et cette variable dg est égale à MarketInfo( Symbol(), MODE_DIGITS) ; ? ???

 
gheka:


J'ai été écrit : "NormalizeDouble(), vérifie la limite maximale/minimale du lot, si cinq chiffres - augmente le stop et le profit de 10 fois".


La documentation indique : "Arrondir un nombre à virgule flottante à la précision spécifiée. Les valeurs calculées de StopLoss et TakeProfit, ainsi que les prix d 'ouverture des ordres en attente doivent être normalisés à la précision, dont la valeur est stockée dans la variable prédéfinie Digits".

Je ne l'ai pas trouvé dans le tutoriel, je comprends que je dois normaliser le prix actuel, StopLoss et TakeProfit avec NormalizeDouble --- si oui, comment exactement ?

double NormalizeDouble( double valeur, int chiffres)

valeur double -- au lieu de cela, je peux définir par exemple Prise

int digits -- et cette variable dg est égale à MarketInfo( Symbol(), MODE_DIGITS) ; ? ???

int StopLoss=50 ; // StopLoss en pips

int TakeProfit=150 ; // TakeProfit en pips

intOrderDistance=50 ; // Distance de l'ordre en attente en points

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

int pt=MarketInfo(Symbol(), MODE_POINT) ; // Taille du point dans la devise de cotation

int dg=MarketInfo(Symbol(),MODE_DIGITS) ; // Nombre de chiffres après la virgule dans le prix du symbole.

int StLev=MarketInfo(Symbol(),MODE_STOPLEVEL) ; // Niveau minimum autorisé de stop loss/stake profit en points

double pa=MarketInfo(Symbol(), MODE_ASK) ; // Prix à la demande

double pb=MarketInfo(Symbol(), MODE_BID) ; // Cours acheteur

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

double slB=NormalizeDouble(pa-StopLoss*pt, dg) ; // Normaliser le niveau de prix du StopLoss pour la position d'achat.

double tpB=NormalizeDouble(pa+TakeProfit*pt, dg) ; // normaliser le niveau de prix TakeProfit pour la position d'offre.

double slS=NormalizeDouble(pb+StopLoss*pt, dg) ; // normaliser le niveau de prix de l'arrêt de perte pour la position de vente.

double tpS=NormalizeDouble(pb-TakeProfit*pt, dg) ; // Normalisation du niveau de prix TakeProfit pour la position de vente.

doubleB=NormalizeDouble(pa+SetOrderDistance*pt, dg) ; // Normaliser le niveau de prix pour placer un ordre d'achat en attente.

double SetS=NormalizeDouble(pb-SetOrderDistance*pt, dg) ; // Normaliser le prix pour placer un ordre de vente en attente.

double slBS=NormalizeDouble(SetB-StopLoss*pt, dg) ; // Normaliser le niveau de prix du StopLoss pour un ordre d'achat en attente.

double tpBS=NormalizeDouble(SetB+TakeProfit*pt, dg) ; // Normaliser le niveau de prix du TakeProfit de l'ordre d'achat en attente.

double slSS=NormalizeDouble(SetS+StopLoss*pt, dg) ; // normalise le niveau de prix du StopLoss pour l'ordre de vente en attente.

double tpSS=NormalizeDouble(SetS-TakeProfit*pt, dg) ; // Normalise le niveau de prix du TakeProfit de l'ordre de vente en attente.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Découvre-le... :)

Et n'oubliez pas le StopLev - int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL) ;

Vérifiez que la distance minimale d'arrêt et d'enlèvement n'est pas inférieure à cette valeur.

 
artmedia70:

int StopLoss=50 ; // StopLoss en points

int TakeProfit=150 ; // TakeProfit en points

intOrderDistance=50 ; // Distance de l'ordre en attente en points

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

int pt=MarketInfo(Symbol(), MODE_POINT) ; // Taille du point dans la devise de cotation

int dg=MarketInfo(Symbol(),MODE_DIGITS) ; // Nombre de chiffres après la virgule dans le prix du symbole.

int StLev=MarketInfo(Symbol(),MODE_STOPLEVEL) ; // Niveau minimum autorisé de stop loss/stake profit en points

double pa=MarketInfo(Symbol(), MODE_ASK) ; // Prix à la demande

double pb=MarketInfo(Symbol(), MODE_BID) ; // Cours acheteur

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

double slB=NormalizeDouble(pa-StopLoss*pt, dg) ; // Normaliser le niveau de prix du StopLoss pour la position d'achat.

double tpB=NormalizeDouble(pa+TakeProfit*pt, dg) ; // normaliser le niveau de prix TakeProfit pour la position d'offre.

double slS=NormalizeDouble(pb+StopLoss*pt, dg) ; // Normaliser le niveau de prix du StopLoss pour la position de vente.

double tpS=NormalizeDouble(pb-TakeProfit*pt, dg) ; // Normalisation du niveau de prix TakeProfit pour la position de vente.

doubleB=NormalizeDouble(pa+SetOrderDistance*pt, dg) ; // Normaliser le niveau de prix pour placer un ordre d'achat en attente.

double SetS=NormalizeDouble(pb-SetOrderDistance*pt, dg) ; // Normaliser le prix pour placer un ordre de vente en attente.

double slBS=NormalizeDouble(SetB-StopLoss*pt, dg) ; // Normaliser le niveau de prix du StopLoss pour un ordre d'achat en attente.

double tpBS=NormalizeDouble(SetB+TakeProfit*pt, dg) ; // Normaliser le niveau de prix du TakeProfit de l'ordre d'achat en attente.

double slSS=NormalizeDouble(SetS+StopLoss*pt, dg) ; // normalise le niveau de prix du StopLoss pour l'ordre de vente en attente.

double tpSS=NormalizeDouble(SetS-TakeProfit*pt, dg) ; // Normalise le niveau de prix du TakeProfit de l'ordre de vente en attente.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Découvre-le... :)

Et n'oubliez pas le StopLev - int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL) ;

Vérifiez la distance minimale pour les arrêts de réglage et les prises en charge afin qu'elle ne soit pas inférieure à cette valeur.


Merci beaucoup ! !! Je vais m'en occuper ! )
 
Comment créer une fonction et l'appeler ?
 

Réinstallation de Windows. La fenêtre d'alerte ne s'affiche plus. Il y a une notification sonore, une entrée de journal, mais la fenêtre flottante ne s'affiche plus.

J'ai nettoyé le terminal, tout recompilé. Quelle pourrait être la raison ?

 
_SS_:
Comment créer une fonction et l'appeler ?
Pour la énième fois, lisez un manuel et apprenez les bases... :)
 
artmedia70:
Pour la énième fois, lisez un manuel, étudiez la matière... :)
J'ai essayé, ça ne marche pas !