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

 
drknn:
Et s'il avait un code pour 70 livres au lieu de 60 ? :) ;)
Gardons-le pour une mise à niveau :)
 
veti-k:
Bonjour, pouvez-vous me dire comment déterminer le nombre de pips de profit d'un ordre ?
.
Si vous avez une position d'achat, vous devez soustraire le prix d'ouverture du cours acheteur actuel. S'il s'agit d'une position de vente, vous devez soustraire le cours vendeur actuel du cours d'ouverture.
 
paladin80:
Si une position d'achat est ouverte, soustrayez le prix d'ouverture du cours acheteur actuel. Si la position est une position de vente, soustrayez le cours vendeur actuel du cours d'ouverture.

Les scouts ont découvert que OrderClosePrice() peut être utilisé à la place de Bid ou Ask.
 
Merci))
 
Chers utilisateurs du forum, pourriez-vous me dire comment mettre une variable de iCustom dans ArrayMaximum?
 
Alexandr24:
Chers utilisateurs du forum, pourriez-vous nous indiquer comment placer une variable de iCustom dans ArrayMaximum ?
Pour cela, vous devez lire ce qu'est ArrayMaximum.

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

Il recherche l'élément ayant la valeur maximale. La fonction renvoie la position de l'élément maximum dans le tableau.

La recherche est un processus, pas une variable. En d'autres termes, vous pouvez attribuer une valeur d'indicateur à un élément du tableau, puis rechercher l'élément le plus grand dans le tableau avec ArrayMaximum.
 
granit77:
Pour cela, vous devez lire ce qu'est ArrayMaximum.

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

Recherche de l'élément ayant la valeur maximale. La fonction renvoie la position de l'élément maximal dans le tableau.

La recherche est un processus, pas une variable. En d'autres termes, vous pouvez attribuer une valeur d'indicateur à un élément du tableau, puis rechercher dans le tableau l'élément maximal avec ArrayMaximum.
Comment trouver la valeur maximale de l'indicateur pour la journée d'hier ? J'ai trouvé le premier et la valeur maximale de l'indicateur de la journée d'hier, mais je ne peux pas trouver la valeur maximale de la journée d'hier, ArrayMaximum commence à chercher dans tout le graphique, ou peut-être que cela se fait par une autre fonction ?
 

Bonjour à tous, je suis assis devant mon ordinateur à me taper la tête contre le clavier - je n'arrive pas à corriger un seul bug dans le code... Veuillez aider un débutant.

Voici mon code hibou :

extern double TakeProfit = 500 ;

extern double Lots = 0.1 ;

extern double Stoploss = 30 ;

extern double TrailingStop = 30 ;

extern string Indicateur_1 = "SAR (SAR_STEP)" ;

extern double SAR_Step = 0.02 ;

extern double SAR_MaxStep =0.2 ;

extern double GeneralShift = 0 ; // 0 - barre non fermée, 1 - fermée.

// Ce sont les variables qui seront

// affiché pendant

// connexion de l'Expert Advisor avec le graphique


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

//| |

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

int start()

{

double a ;

int b ;

int total, ticket, cnt ;


//juste des variables à utiliser dans le programme


si(Bars<100)

{

Print("barres inférieures à 100") ;

retour(0) ;

}

// Cette condition vérifie si l'historique du graphique contient plus de 100 chandeliers, et si ce n'est pas le cas, elle renvoie une erreur,

// cela générera une erreur. Il est nécessaire d'attirer votre attention sur le problème des

// manque d'information


si(TakeProfit<5)

{

Print("TakeProfit inférieur à 5") ;

retour(0) ;

}

// Cette condition vérifie le niveau de TakeProfit (une des variables externes,

// qui contrôle le niveau de prise de bénéfices. C'est nécessaire pour vérifier si // vous avez fixé les niveaux de Take Profit.

// vérifiez si vous avez fixé des niveaux de prise de bénéfices à un niveau non autorisé par votre société de courtage.

// Non autorisé pour votre société de courtage. C'est juste pour que si votre Expert Advisor échoue, vous // sachiez exactement quelle est l'erreur.

// où se trouve l'erreur. Je recommande vivement de le régler.


total=OrdersTotal() ;

si(total<1)

// Cette vérification est nécessaire, afin d'éviter d'ouvrir plusieurs positions identiques à la fois. Si cette case n'est pas cochée, si, par exemple, votre EA est déclenché lorsque la stochastique est dans la zone de surachat, il sera négocié à chaque tick jusqu'à ce qu'il ait utilisé toute la marge.

// Par conséquent, afin de limiter le nombre de postes ouverts, cette

// limiteur. S'il est défini, le conseiller n'ouvrira pas plus d'un certain nombre // d'ouvertures.

// nombre de positions <x

{

// aucun ordre ouvert identifié

si(AccountFreeMargin()<(1000*Lots))

{

Print("Nous n'avons pas d'argent. Marge libre = ", AccountFreeMargin() ;

retour(0) ;

}

// Un autre morceau de code auxiliaire. S'il n'y a pas assez d'argent sur le compte, il...

// imprime une erreur. Cette pièce est complètement inutile si le conseiller expert fonctionne.

// temps réel, mais elle est très utile pour les tests sur l'historique.


if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)>Close[0]) ; // Ouvrir BUY

// Nous arrivons enfin à la partie la plus intéressante. A la place de ces x, nous devons insérer

// condition qui déclenche un BUY.


{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-Stoploss*Point, Ask+TakeProfit*Point, "comment",16384,0,Green) ;


// Ce sont les conditions d'achat. En principe, il n'y a rien à changer ici, mais afin d'élargir /mes horizons, j'élargis la portée.

// Je vais déchiffrer ce qu'il dit ici. Il est dit ici que nous devons acheter

// (OP_BUY) le symbole actuel (paire de devises, au graphique duquel ce conseiller expert a été attaché),

// taille de la transaction Lots (variable qui est définie au début). Prix du marché, avec

// slippage 3, et avec un StopLoss et un TakeProfit fixés à la valeur de l'indice de référence.

au // début, la transaction sera marquée du commentaire "commentaire", avec le numéro déterminant 0, et au // début, la transaction sera marquée du commentaire "commentaire".

// au point d'achat, sur le graphique, il y aura un curseur vert avec le code déterminant

// 16384


si(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;

}

else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;

retour(0) ;

}


// Ce bloc est uniquement nécessaire pour vérifier que tout s'est bien passé.

// Ou, sinon, pour enregistrer une erreur qui a fait échouer quelque chose.


// Maintenant la même chose avec le pari de vente. Au lieu de YYYYYY - condition

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)<Close[0])

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+Stoploss*Point,Bid-TakeProfit*Point, "macd sample",16384,0,Red) ;

si(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordre de vente ouvert : ",OrderOpenPrice()) ;

}

else Print("Erreur lors de l'ouverture d'un ordre de VENTE : ",GetLastError()) ;

retour(0) ;

}

retour(0) ;

}


// Maintenant la sortie. Rien n'a changé ici non plus, c'est juste RRRRRR - condition

// fermer une transaction par BUY, ZZZZZZZZ - par SELL


for(cnt=0;cnt

//Pendant un moment, ils regardent tous les postes ouverts.

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;

if(OrderType()<=OP_SELL && // vérification des positions ouvertes

OrderSymbol()==Symbol()) // vérification du symbole

{

if(OrderType()==OP_BUY) // une position longue est ouverte

{

// doit-il être fermé ?

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)<Close[0]) //close BUY.

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ; // fermer la position

return(0) ; // sortie

}

// vérifier le trailing stop

si(TrailingStop>0)

{

si(Bid-OrderOpenPrice()>Point*TrailingStop)

{

si(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green) ;

retour(0) ;

}

}

}

}

else // Même chose pour la position courte

{

// doit-il être fermé ?

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)>Close[0])//clôturer SELL

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ; // position de clôture

return(0) ; // sortie

}

// vérifier le trailing stop

si(TrailingStop>0)

{

si((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

si((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red) ;

retour(0) ;

}

}

}

}

}

}

}

retour(0) ;

//--------

}

//-------- la fin.

 

Un trader novice ne peut pas attraper un insecte ! !! S'IL VOUS PLAÎT AIDEZ-MOI !!!!!!!!!!!!!!!!!!

'}' - parenthèses non équilibrées C:\Program Files (x86)\Forex4you MetaTrader 4\experts\Saurentios V101.mq4 (167, 1)

 
Je regrette de ne pas m'être cogné la tête en formatant le code comme ça. Je vais le corriger :)
Raison: