Firebird v63G - page 30

 

Comme vous pouvez le voir sur le graphique de l'USDCHF de la semaine dernière, Firebird s'en sort très bien dans un marché en range bound. Lorsque le marché devient tendu, Firebird prend très souvent les mauvaises décisions. La solution à ce problème peut être très simple : nous devons sortir du marché dès que la tendance se dessine et y revenir lorsque le marché est de nouveau en fourchette.

Dans Phoenix, il y a un morceau de code qui s'occupe de ces changements. En bref, il prend les sommets des dernières 24, 12, 6 et 2 heures et peut décider quand le marché devient à tendance et quand le marché de la fourchette est restauré.

Dossiers :
 

Excellent travail Hendrick, votre brainstorming porte ses fruits, j'ai hâte de tester Phoenix quand vous le sortirez. Merci, Goldensight.

Hendrick:
Ici vous pouvez voir la différence de comportement entre Phoenix et Firebird pour le USDCHF quand les choses deviennent difficiles :

Firebird a placé 3 BUYS, tous arrêtés.

Phoenix attend le bon moment, il a fait 3 VENTES qui ont toutes touché le TP.

Joli ?
 
MarvinSk:
Je me rapproche beaucoup maintenant

J'ai ajouté ceci :

si ((Safe1!=1)&&(DealTime==2)) {

for (int i=OrdersTotal()-1 ; i>=0 ; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol()) {

si (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID) ;

OrderClose(OrderTicket(), OrderLots(), pBid, slip, clCloseBuy) ;

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK) ;

OrderClose(OrderTicket(), OrderLots(), pAsk, slip, clCloseSell) ;

}

}

}

}

}

Dans un Back Test, je vois qu'il ferme les OpenTrades, mais j'ai besoin d'ajouter la fonction de recherche de STOPLOSS, parce qu'il ferme des trades qui ont des GAINS POSITIFS, lorsque les variables Safe1 et DealTime sont appariées.....

Donc le Stoploss doit être le 3ème piège... J'enverrai ceci la semaine prochaine une fois que j'aurai réussi à le faire fonctionner...

Encore une fois, l'idée est d'avoir un certain contrôle sur les trades ouverts existants lorsque le marché devient volatile... Si une transaction doit s'arrêter, je préfère qu'elle s'arrête à mi-chemin plutôt qu'à 100%. Au moins, lorsque le marché se redresse, vous n'avez pas beaucoup à rattraper...

Merci

Bonjour Marvin,

Une solution beaucoup plus simple serait de fermer un trade ouvert dès que le signal change. Qu'en pensez-vous ?

 
Hendrick:
Bonjour Marvin, Une solution beaucoup plus simple serait de fermer une transaction ouverte dès que le signal change. Qu'en pensez-vous ?

Hé Hendrick... Quand vous dites signal, voulez-vous dire quand les valeurs Safe1 et Dealtime deviennent vraies ?

Si c'est le cas, ce que j'ai vu en backtesting parce que le marché est fermé en ce moment, c'est que certains trades positifs ont également été fermés... Donc la vérification de STOPLOSS est la troisième variable pour contrôler cela.

J'ai un code présenté par ELIHAYUN.

Regardez ça Hendrick...

void CloseOrder(int ticket,double numLots,double close_price)

{

int CloseCnt, err ;

// essaie de fermer 3 fois

CloseCnt = 0 ;

while (CloseCnt < 3)

{

si (OrderClose(ticket,numLots,close_price,Slippage,Violet))

{

CloseCnt = 3 ;

}

sinon

{

err=GetLastError() ;

Print(CloseCnt," Error closing order : (", err , ") " + ErrorDescription(err)) ;

si (err > 0) CloseCnt++ ;

}

}

}

void CloseHalfSL()

{

double LosePercent = 50.0 ; // 50% de la S/L

for(int i=OrdersTotal()-1;i>=0;i--) // analyse tous les ordres et positions...

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;

si (OrderMagicNumber() != MagicNumber) continuez ;

si ( OrderSymbol()==Symbol() )

if (OrderProfit() < 0) // nous avons un trade à perte

{

double prc = Bid ;

if (OrderType() == OP_SELL) prc = Ask ;

double ord_prc = OrderOpenPrice() ;

double ord_SL = OrderStopLoss() ;

int SL_points = MathAbs(ord_prc - ord_SL) / Point ;

int Actual_Lose = MathAbs(prc - ord_prc) / Point ;

if ( (Actual_Lose * 100 / SL_points) >= LosePercent) // Trop de perte

{

CloseOrder(OrderTicket(), OrderLots(), prc) ;

}

}

}

}

/// ---- Vérifier si la transaction n'est pas sûre, puis appeler CloseHalfSL

if (NotSafeToTrade) CloseHalfSL() ;

 
MarvinSk:
On se rapproche de plus en plus.

J'ai ajouté ceci :

si ((Safe1!=1)&&(DealTime==2)) {

for (int i=OrdersTotal()-1 ; i>=0 ; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol()) {

si (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID) ;

OrderClose(OrderTicket(), OrderLots(), pBid, slip, clCloseBuy) ;

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK) ;

OrderClose(OrderTicket(), OrderLots(), pAsk, slip, clCloseSell) ;

}

}

}

}

}

Dans un Back Test, je vois qu'il ferme les OpenTrades, mais j'ai besoin d'ajouter la fonction de recherche de STOPLOSS, parce qu'il ferme des trades qui ont des GAINS POSITIFS, lorsque les variables Safe1 et DealTime sont appariées.....

Donc le Stoploss doit être le 3ème piège... J'enverrai ceci la semaine prochaine une fois que j'aurai réussi à le faire fonctionner...

Encore une fois, l'idée est d'avoir un certain contrôle sur les trades ouverts existants lorsque le marché devient volatile... Si une transaction doit s'arrêter, je préfère qu'elle s'arrête à mi-chemin plutôt qu'à 100%. Au moins, lorsque le marché se redresse, vous n'avez pas grand-chose à rattraper...

Merci

Ceci pourrait être un moyen de laisser des ordres de GAINS POSITIFS ouverts. Ajoutez "&& OrderProfit()<0" dans la ligne if(OrderType()".

if ((Safe1!=1)&&(DealTime==2)) {

for (int i=OrdersTotal()-1 ; i>=0 ; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol()) {

si (OrderType()==OP_BUY && OrderProfit()<0) {

pBid=MarketInfo(OrderSymbol(), MODE_BID) ;

OrderClose(OrderTicket(), OrderLots(), pBid, slip, clCloseBuy) ;

}

si (OrderType()==OP_SELL && OrderProfit()<0) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK) ;

OrderClose(OrderTicket(), OrderLots(), pAsk, slip, clCloseSell) ;

}

}

}

}

}

Wackena

 
Wackena:
Cela pourrait être un moyen de laisser des ordres à GAINS POSITIFS ouverts. Ajoutez "&& OrderProfit()<0" dans la ligne if(OrderType()".

si ((Safe1!=1)&&(DealTime==2)) {

for (int i=OrdersTotal()-1 ; i>=0 ; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol()) {

si (OrderType()==OP_BUY && OrderProfit()<0) {

pBid=MarketInfo(OrderSymbol(), MODE_BID) ;

OrderClose(OrderTicket(), OrderLots(), pBid, slip, clCloseBuy) ;

}

si (OrderType()==OP_SELL && OrderProfit()<0) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK) ;

OrderClose(OrderTicket(), OrderLots(), pAsk, slip, clCloseSell) ;

}

}

}

}

}

Wackena

Wackena merci... mais j'ai apporté une correction à notre syntaxe

double pBid, pAsk ;

if ((Safe1!=1)&&(DealTime==2)) {

for (int i=OrdersTotal()-1 ; i>=0 ; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol()) {

if ((OrderType()==OP_BUY)&&(OrderProfit()<0)){

pBid=MarketInfo(OrderSymbol(), MODE_BID) ;

OrderClose(OrderTicket(), OrderLots(), pBid, slip, clCloseBuy) ;

}

if ((OrderType()==OP_SELL)&&(OrderProfit()<0)) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK) ;

OrderClose(OrderTicket(), OrderLots(), pAsk, slip, clCloseSell) ;

}

}

}

}

}

 

Ok, je suis en train de tester les ajouts que j'ai faits concernant la gestion des transactions ouvertes existantes lorsque le marché est volatile...

La seule exception que j'ai est... Au lieu de TradingHour de 0 à 24

Je négocie ce modèle :

0 - 7 EST

11 - 24 EST

Je fais cela parce que je veux m'assurer que l'EA ne négocie pas explicitement pendant l'ouverture de NY... J'ai vu trop de volatilité entre 8 et 10 EST.

Je posterai mes résultats au fur et à mesure que la semaine avance... Nous avons des nouvelles qui font du bruit cette semaine, voyons ce qui se passe...

 

Je viens de terminer la lecture du livre "Bird Watching in Lion Country". Il n'est pas mauvais. Le dernier chapitre est utile. Il est également très pertinent pour l'idée derrière l'Oiseau de feu et le Phénix. L'idée n'est pas exactement la même, mais elle est très similaire et l'on peut facilement en tirer quelques bonnes idées et les mettre en œuvre pour faire de Firebird un excellent EA. Si Hendrick, Wackena et les quelques autres développeurs de Firebird sont intéressés à le lire, faites-le moi savoir.

 

Je veux tester Firebird

Salut hendrik,.. Je veux tester la nouvelle version de Fire Bird (car il y a beaucoup de versions de Firebird). Pouvez-vous me montrer s'il vous plaît, .....

Un travail difficile pour le développement de Firebird à Phoenix, je vous respecte tous,...

Merci

 

Aucun problème avec le compte réel

MarvinSk:
Quelqu'un a un compte en direct avec InterbankFX

J'obtiens les erreurs suivantes

2006.06.26 20:10:59 : ordre buy 1.00 USDCHFm opening at 1.2407 sl : 1.2307 tp : 1.2417 failed [Common error] (erreur commune)

Cela signifie-t-il qu'ils n'autorisent pas les EA sur les comptes LIVE ?

J'ai un compte en direct avec IBFX, aucun problème jusqu'à présent...

Raison: