Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1003

 
 

Veuillez indiquer comment mettre en œuvre ce qui suit :

Il y a des lignes personnalisées sur le graphique, il y en a un nombre "n". Comment obtenir la valeur du prix lorsque le prix s'approche d'une des lignes ?

Merci d'avance !

 

Bonjour à tous ) aidez moi s'il vous plait - L'objectif est (si le prix est au-dessus de la "ligne" (100 pips) alors "acheter" ) ) comment l'exprimer (le prix est plus élevé de 100 pips à partir de n'importe quelle valeur) et aussi cette question : comment connaître le prix de la moyenne mobile en ce moment ?

Merci d'avance)

 
Tema97:

Bonjour à tous ) aidez moi s'il vous plait - L'objectif est (si le prix est au-dessus de la "ligne" (100 pips) alors "acheter" ) ) comment l'exprimer (le prix est plus élevé de 100 pips à partir de n'importe quelle valeur) et aussi cette question : comment connaître le prix de la moyenne mobile en ce moment ?

Merci d'avance)

Tema, lisez la documentation, iMa y est décrit ainsi que les objets graphiques. Il existe une fonction ObjectGetDouble(avec les paramètres correspondants) pour obtenir le prix d'une ligne.
 

Veuillez conseiller un nouvel arrivant sur la manière d'éviter de rouvrir un ordre, après qu'il ait été fermé, tout en conservant les conditions commerciales d'ouverture.

Par exemple : si la stochastique traverse le niveau 50 à la hausse, ouvrez un Achat. Fermer sur le renversement du stochastique, ou quand il atteint le niveau 80 ou sur le Take Profit. Mais les conditions commerciales pour ouvrir sont préservées ! C'est-à-dire que la stochastique reste au-dessus de 50 et l'achat est à nouveau ouvert !

double S_1=iStochastic(NULL,0,K,D,ralentissant,MODE_SMA,price_field,MODE_MAIN,0) ;

double S_2=iStochastic(NULL,0,K,D,ralentissant,MODE_SMA,price_field,MODE_MAIN,1) ;

si(S_1>50)

{

Opn_B=vrai ;

}

si(S_1<S_2||S_1>80)

{

Cls_B=vrai ;

}

J'insère des critères de transaction dans le schéma simple du conseiller expert, qui est présenté dans le tutoriel MQL. Veuillez indiquer quelle fonction utiliser pour éviter ce problème. Merci !

 
if(S_1 > 50 && S_2 < 50)

C'est la condition pour franchir le niveau 50 de bas en haut.

 
AlexeyVik:

C'est la condition pour franchir le niveau 50 de bas en haut.

Merci beaucoup ! Je vais essayer maintenant.
 
Comment "détacher" un indicateur (ou EA) "attaché" d'un graphique sans fermer ce graphique ?
 
Est-il possible de mettre un indicateur AccountEquity() qui fonctionne en temps réel sur le graphique ? Où puis-je l'obtenir ?
 

Bonjour, pourriez-vous me conseiller ? Je modifie les critères de transaction dans le conseiller expert présenté dans le tutoriel MQL4. Lorsque j'essaie de définir un stop loss sur Buy, le programme donne l'erreur 130 : wrong stops. Veuillez expliquer pourquoi ?

// Valeurs numériques pour M15

extern double StopLoss =0 ; // SL pour l'ordre en cours d'ouverture

extern double TakeProfit =0 ; // TP pour l'ordre en cours d'ouverture

extern int K = 5 ;

extern int D = 3 ;

extern int slowing = 3 ;

extern int price_field = 0 ;


extern int Level_1 = 80 ; // Niveau stochastique

extern int Level_2 = 20 ;

extern inttern Period_MA_2 = 31 ; // Période MA 2

extern double Rastvor =28.0 ; // Distance entre MA

extern double Lots =0.01 ; // Nombre fixe de lots.

extern double Prots =0.07 ; // Pourcentage de fonds libres

bool Work=true ; // Le conseiller expert fonctionnera.

string Symb ; // Nom de l'instrument financier

//--------------------------------------------------------------- 2 --

int start()

{

int

Niveau K,

Total, // Nombre de commandes dans la fenêtre

Tip=-1, // Type de commande sélectionné (B=0,S=1)

Ticket ; // Numéro de commande

double S_1,

S_2,

MA_1_t, // Valeur MA_1_t. Valeur actuelle de MA_1

MA_2_t, // Valeur. MA_2 courant MA_2_t valeur // Nombre de lots sélectionnés dans l'ordre

Lots, //Lots Quantité dans l'ordre actuellement sélectionné

Lts, //Nombre de lots dans un ordre ouvert

Min_Lot, // Nombre minimum de lots

Étape, // Étape de la modification de la taille du lot

Libre, // Fonds libres actuels

One_Lot, // Valeur d'un lot

Prix, // Prix de la commande sélectionnée

SL, // Prix SL de l'ordre sélectionné

TP ; // TP de l'ordre sélectionné

bool

Ans =false, // Réponse du serveur après la fermeture

Cls_B=false, // Critère de fermeture de l'achat

Cls_S=false, // Critère de fermeture Vendre

Opn_B=false, // Critère d'ouverture d'Achat

Opn__S=false ; // critère d'ouverture de Sell

//--------------------------------------------------------------- 3 --

//Prétraitement

if(Bars < Period_MA_2) // Pas assez de barres

{

Alert("Pas assez de barres dans la fenêtre, le conseiller expert ne fonctionne pas") ;

return ; // Quitter start()

}

if(Work==false) // Erreur critique.

{

Alert("Erreur critique. Le conseiller expert ne fonctionne pas.") ;

return ; // Sortie de start()

}

//--------------------------------------------------------------- 4 --

// Comptage des commandes

Symb=Symbol() ; // Nom de l'instrument financier.

Total=0 ; // Nombre de commandes

for(int i=1 ; i<=OrdersTotal() ; i++) // Boucle de commande

{

if(OrderSelect(i-1,SELECT_BY_POS)==true) // Si ce qui suit se produit

{ // Analyse de l'ordre :

if (OrderSymbol()!=Symb)continue ; // Pas notre instrument financier

if (OrderType()>1) // Nous avons un ordre en suspens

{

Alert("Ordre en attente détecté. Le conseiller expert ne fonctionne pas ;)

return ; // Exit()

}

Total++ ; // Compteur d'ordres de marché

if (Total>1) // Pas plus d'une commande

{

Alert("Plusieurs ordres de marché. Le conseiller expert ne fonctionne pas ;)

return ; // Exit()

}

Ticket=OrderTicket() ; // Numéro de commande sélectionné.

Tip =OrderType() ; // Type de la commande sélectionnée.

Prix =OrderOpenPrice() ; // Prix de l'ordre sélectionné.

SL =OrderStopLoss() ; // SL de l'ordre sélectionné.

TP =OrderTakeProfit() ; // TP de l'ordre sélectionné.

Lot =OrderLots() ; // Nombre de lots

}

}

//--------------------------------------------------------------- 5 --

// Critères commerciaux

S_1=iStochastic(NULL,0,K,D,ralentissement,MODE_SMA,price_field,MODE_MAIN,0) ;


S_2=iStochastic(NULL,0,K,D,ralentissant,MODE_SMA,price_field,MODE_MAIN,1) ;


si(S_1 > 50 && S_2 < 50)


{


Opn_B=vrai ;


}


if(S_1<S_2||(S_1 < 80 && S_2 > 80))


{


Cls_B=vrai ;


}

si(S_1 < 50 && S_2 > 50)


{


Opn_S=vrai ;


}


if(S_1>S_2||(S_1 > 20 && S_2 < 20))


{


Cls_S=vrai ;


}

//--------------------------------------------------------------- 6 --

// Fermer les commandes

while(true) // Fermez la boucle de commande.

{

if (Tip==0 && Cls_B==true) //Ouvrir un ordre d'achat.

{ //il y a un critère de fermeture

Alert("Essayer de fermer l'achat ",Ticket," ;)

RefreshRates() ; // Rafraîchir les données

Ans=OrderClose(Ticket,Lot,Bid,2) ; // Fermer l'achat

if (Ans==true) // Cela a marché :)

{

Alerte ("Ordre d'achat fermé",Ticket ;)

break ; // Sortie de la boucle fermée

}

if (Fun_Error(GetLastError())==1) // Traitement des erreurs

continue ; // réessayer

return ; // Sortie de start()

}

if (Tip==1 && Cls_S==true) // Ordre de vente ouvert.

{ // il existe un critère proche

Alert("Tentative de fermeture de la vente ",Ticket," ;)

RefreshRates() ; // Rafraîchir les données

Ans=OrderClose(Ticket,Lot,Ask,2) ; // Fermer la vente

if (Ans==true) // Cela a marché :)

{

Alert ("Sell order closed ",Ticket ;)

break ; // Sortie de la boucle fermée

}

if (Fun_Error(GetLastError())==1) // Traitement des erreurs

continue ; // réessayer

return ; // Sortie de start()

}

break ; // Quitter le while

}

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

// Valeurs de commande

RefreshRates() ; // Rafraîchir les données

Min_Lot=MarketInfo(Symb,MODE_MINLOT) ; // Nombre minimal de lots

Free =AccountFreeMargin() ; // Fonds libres

One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Valeur de 1 lot

Step =MarketInfo(Symb,MODE_LOTSTEP) ; // Taille du changement d'étape

if (Lots > 0) // Si les lots sont spécifiés

Lts =Lots ; // nous travaillons avec eux

else // % de fonds libres

Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Pour ouvrir

if(Lts < Min_Lot) Lts=Min_Lot ; // Pas moins que Min_Lot ; // Pas moins que Min_Lot

if(Lts*One_Lot > Free) // Lots plus chers que Free

{

Alert(" Pas assez d'argent ", Lts," lots) ;

return ; // Quitter start()

}

//--------------------------------------------------------------- 8 --

//Ouverture des commandes

while(true) //Ordre de fermer la boucle.

{

if (Total==0 && Opn_B==true) // Aucun ordre ouvert

{ //open Buy criterion.

RefreshRates() ; // Mise à jour des données

Alert("Essayer d'ouvrir un achat. Attendre la réponse...") ;

Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,StopLoss,TakeProfit);//ouverture d'un achat.

if (Ticket > 0) // ça a marché :)

{

Alerte ("Ordre d'achat ouvert ",Ticket ;)

return ; //Exit la commande

}

if (Fun_Error(GetLastError())==1) // Traitement des erreurs

continue ; // réessayer

return ; // Sortie de start()

}

if (Total==0 && Opn_S==true) // aucun ordre ouvert

{ //ouverture du critère de vente.

RefreshRates() ; // Mise à jour des données

Alert("Tentative d'ouverture de la vente. En attente de réponse...") ;

Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,StopLoss,TakeProfit);//Open Sel.

if (Ticket > 0) // Cela a marché :)

{

Alerte ("Ordre de vente ouvert ",Ticket ;)

return ; //Exit la commande

}

if (Fun_Error(GetLastError())==1) // Traitement des erreurs

continue ; // réessayer

return ; // Sortie de start()

}

break ; // Quitter le while

}

//--------------------------------------------------------------- 9 --

return ; //sortir de start()

}


//-------------------------------------------------------------- 10 --

int Fun_Error(int Error) // Fie de gestion des erreurs

{

switch(Erreur)

{ // Erreurs insurmontables.

cas 4 : Alert("Le serveur commercial est occupé. Essayez à nouveau...") ;

Sleep(3000) ; // Solution simple.

return(1) ; // Sortie de la fonction.

cas 135:Alert("Le prix a changé. Essayez à nouveau...") ;

RefreshRates() ; // Rafraîchit les données.

return(1) ; // Sortie de la fonction.

cas 136:Alert("Pas de prix. En attente d'un nouveau tick...") ;

while(RefreshRates()==false) // Till a new tick

Sleep(1) ; // Délai dans la boucle

return(1) ; // Sortie de la fonction

cas 137:Alert("Broker is busy. Try again...") ;

Sleep(3000) ; // Solution simple.

return(1) ; // Sortie de la fonction.

cas 146:Alert("Le sous-système de négociation est occupé. Essayez à nouveau...") ;

Sleep(500) ; // Décision simple

return(1) ; // Sortie de la fonction

// Erreurs critiques

cas 2 : Alert("Erreur générale ;)

return(0) ; // Sortie de la fonction.

cas 5 : Alert("Ancienne version du terminal.") ;

Work=false ; // Ne plus travailler

return(0) ; // Sortie de la fonction

cas 64 : Alert("Compte bloqué.") ;

Work=false ; // Ne plus travailler

return(0) ; // Sortie de la fonction

cas 133:Alert("Trading interdit.") ;

return(0) ; // Sortie de la fonction

cas 134:Alert("Pas assez d'argent pour exécuter la transaction.") ;

return(0) ; // Sortie de la fonction

default : Alert("Une erreur s'est produite ",Error) ; // Autres options

return(0) ; // Sortie de la fonction

}

}

//-------------------------------------------------------------- 11 --

int New_Stop(int Parametr) // Vérifier le stop.

{

int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Distance min.

if (Parametr < Min_Dist) // Si moins que ce qui est autorisé.

{

Parametr=Min_Dist ; // Définit la tolérance.

Alert("Distance d'arrêt augmentée ;)

}

return(Parametr) ; // Valeur de retour.

}