Aide au codage... Comment faire pour que l'indicateur filtre au lieu de l'alerte ? - page 5

 

Les ordres sont placés trop près de l'offre et de la demande actuelles. Les ordres doivent être placés à une certaine distance du prix actuel. Utilisez la fonction Marketinfo avec le paramètre stop_level pour extraire cette information et assurez-vous que vos ordres sont à cette distance du ask/bid.

J'espère que cela vous aidera.

 
Maji:
Les ordres sont placés trop près de l'offre et de la demande actuelles. Les ordres doivent être placés à une certaine distance du prix actuel. Utilisez la fonction Marketinfo avec le paramètre stop_level pour extraire cette information et assurez-vous que vos ordres sont à cette distance du ask/bid. J'espère que cela vous aidera.

ummm....

désolé mais vous m'avez perdu là...

La plupart de ce que j'ai fait jusqu'à présent a été d'exécuter des ordres à la clôture de la période. Est-ce que cela peut être fait ?

Je vais d'abord devoir apprendre ce que sont le paramètre stop_level et les fonctions marketinfo.

Merci pour votre aide.

pour ce que cela peut valoir, voici la mise à jour que j'ai faite de l'indicateur de bandes de tendance, c'était plutôt amusant.

ok, le voici...

Identificateurs d'information de marché, utilisés avec la fonction MarketInfo().

Il peut s'agir de l'une des valeurs suivantes :

MODE_STOPLEVEL 14 Niveau d'arrêt en points.

Je suppose donc que c'est...

MarketInfo(14)

où dois-je le mettre ?

ou est-ce...

MarketInfo(NULL,MODE_STOPLEVEL) ;

ou bien...

double bid =MarketInfo(NULL,MODE_BID) ;

double ask =MarketInfo(NULL,MODE_ASK) ;

double point =MarketInfo(NULL,MODE_POINT) ;

Je suppose que je ne comprends pas vraiment comment utiliser ceci... pouvez-vous me montrer un exemple ?

Voici ce avec quoi je travaille dans ce cas... Je me demande pourquoi cet EA n'avait pas de problème pour placer des ordres avant et maintenant il en a ? Il fonctionnait avant que j'ajoute le filtre ? ??

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);

// ENTRY

if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position

if(isCrossed == 1 && Ask < upLevel)

{

if(UseStopLoss)

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

else

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### ends here

return(0);

}

if(isCrossed == 2 && Ask > LowLevel)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### ends here

return(0);

}

return(0);

}

return(0);

}

return(0);

}

}

//+------------------------------------------------------------------+
Dossiers :
 

Vous devez utiliser MarketInfo(NULL,MODE_STOPLEVEL) pour déterminer à quelle distance du prix actuel vos ordres stop doivent être situés. N'oubliez pas que cette fonction renvoie sa valeur en pips.

Cependant, vous pouvez la convertir en points en utilisant quelque chose comme ceci :

double MinDist = NormalizeDouble(MarketInfo(NULL,MODE_STOPLEVEL)*Point, Digits) ;

Assurez-vous maintenant que vos ordres stop sont au moins à cette distance du prix actuel du marché. Au fait, en utilisant NormalizeDouble et Digits, vous convertissez la valeur du pip aux places appropriées après la décimale (4 ou 2). C'est une fonctionnalité très intéressante de MT4.

J'espère que cela vous aidera.

Maji

 
Maji:
Vous devriez utiliser MarketInfo(NULL,MODE_STOPLEVEL) pour déterminer à quelle distance du prix actuel vos ordres stop doivent être placés. N'oubliez pas que cette fonction renvoie sa valeur en pips.

Cependant, vous pouvez convertir en points en utilisant quelque chose comme ceci :

double MinDist = NormalizeDouble(MarketInfo(NULL,MODE_STOPLEVEL)*Point, Digits) ;

Assurez-vous maintenant que vos ordres stop sont au moins à cette distance du prix actuel du marché. Au fait, en utilisant NormalizeDouble et Digits, vous convertissez la valeur du pip aux places appropriées après la décimale (4 ou 2). C'est une fonctionnalité très intéressante de MT4.

J'espère que cela vous aidera.

Maji

Ce que je ne comprends pas, c'est pourquoi l'ajout de l'indicateur en tant que filtre a perturbé la façon dont il place les ordres ou les stops. Cela n'a rien changé pour autant que je sache, alors pourquoi le fait d'interdire les transactions au-dessus de la ligne change-t-il la façon dont il place ses ordres d'arrêt?

 

Si cela ne vous dérange pas, envoyez-moi le code actuel par courriel. J'essaierai d'y jeter un coup d'œil pendant le week-end. Je ne peux pas vous promettre que je le réparerai, mais je jetterai un coup d'œil honnête et j'essaierai.

 

Voici le problème que vous devez examiner en premier

if(isCrossed == 1 && Ask < upLevel-longrange)[/PHP]

Ask and upLevel are in "price" (like 115.56 or 1.2678) while longrange is in pips (like 4,5,6) and u cannot mixed them. U have to normalize the pips to "price" and this is done by muliplying the pips with Points

the corrected code is like that

[PHP]if(isCrossed == 1 && Ask < upLevel-longrange*Point)
 

Pour une fois, c'est une solution facile...

seulement...

... le truc c'est que je l'ai changé depuis que j'ai fait ce post. ...j'ai modifié l'indicateur avec un paramètre pour rendre les bandes plus larges ou plus étroites et j'ai enlevé la partie de l'EA qui faisait une limite de proximité à la ligne. Je me suis dit que si je pouvais simplement rendre les bandes commerciales elles-mêmes étroites ou larges, cela donnerait la même fonction sans être aussi complexe, et pour moi, c'était plus facile de garder un suivi mental.... donc...

actuellement c'est comme ça...

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);

// ENTRY

if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position

if(isCrossed == 1 && Ask < upLevel)

{

if(UseStopLoss)

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

else

les deux ask et uplevel sont tous deux en prix, n'est-ce pas ? c'est le code qui génère toujours l'erreur. il doit y avoir plus que cela...

 

jusqu'à présent, je ne vois aucun problème (orienté code)

Mais logiquement, regardez ceci

if(isCrossed == 1 && Ask < upLevel)

Vous ne vérifiez pas qu'ils sont proches, juste que le prix est inférieur à la ligne.

 

Je savais que je l'avais ! !!

J'ai testé exactement ce que tu voulais, et dans mon précédent post j'ai juste mis le mauvais EA.

Cet EA peut vérifier jusqu'à 4 TF pour vérifier si tous les TF obtiennent le bord en même temps. Vous pouvez en sélectionner un seul si vous le souhaitez.

Vous pouvez l'utiliser comme un exemple de comment obtenir la logique d'un indicateur, et comment combiner plusieurs TF ensemble.

Salutations

Eli

Dossiers :
tbs.mq4  7 kb
 
elihayun:
Je savais que je l'avais !!!

J'ai testé exactement ce que vous vouliez obtenir, et dans mon précédent post j'ai juste mis le mauvais EA.

Cet EA peut vérifier jusqu'à 4 TF pour vérifier si tous les TF obtiennent l'avantage en même temps. Vous pouvez en sélectionner un seul si vous le souhaitez.

Vous pouvez l'utiliser comme un exemple de comment obtenir la logique d'un indicateur, et comment combiner plusieurs TF ensemble.

salutations

Eli

C'est intriguant Je n'ai pas encore vraiment exploré les indicateurs multi TF mais je crois qu'ils ont du mérite.