Aide au codage - page 18

 

Obtention d'une erreur dans l'EA Besoin d'aide

Obtention d'une seule transaction

J'ai besoin de tous les trades qui sont générés dans icustom ARROW.

mais

extern string Symbol_1 = "EURUSD" ;

int magic=9503 ;

retour(0) ;

int deinit()

{

return(0) ;

}

datetime newbar ;

int start()

{

if(newbar==Time[0])return(0) ; //

sinon newbar=Time[0] ;

double ArrowUp = iCustom(NULL,0, "NBO-System_v1",2,1,10000,2,1) ;

double ArrowDown = iCustom(NULL,0, "NBO-System_v1",2,1,10000,3,1);//PERIOD_M5

if (ArrowDown >0 && ArrowDown!=2147483647 && OrdersTotal()==0)//!= EMPTY_VALUE )

{

OrderSend(Symbol_1,OP_BUY,0.1, MarketInfo(Symbol_1,MODE_ASK), 2, NULL, NULL, "RapidFire", magic, NULL, FireBrick) ;

}

if (ArrowUp >0 && ArrowUp!=2147483647 && OrdersTotal()==0)

{

OrderSend(Symbol_1,OP_SELL,0.1, MarketInfo(Symbol_1,MODE_BID), 2, NULL, NULL, "RapidFire", magic, NULL,LimeGreen ) ;

}

return(0) ;

}

Dossiers :
ea.png  22 kb
 

C'est magnifique ! ....poésie dans un forum de forex lol

 
Dans votre EA, cette condition

OrdersTotal()==0

Si vous voulez ouvrir plus d'un ordre à la fois, supprimez cette condition mais vous devez ajouter un code pour éviter d'ouvrir plusieurs ordres sur la même barre (sinon vous vous retrouverez avec des millions d'ordres ouverts). Vous pouvez utiliser une fonction qui ressemblerait à ceci :

int countOpenedOnACurrentBar()

{

int openedAtBar = 0;

datetime startTime = Time[0];

datetime endTime = Time[0]+Period()*60;

for(int i=0; i < OrdersTotal(); i++)

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;

if(OrderMagicNumber() != MagicNumber) continue;

if(OrderSymbol() != Symbol()) continue;

if(OrderOpenTime()=endTime) continue;

openedAtBar++;

break;

}

return(openedAtBar);

}

[/PHP]

et ensuite votre condition complète (pour l'achat) serait comme ceci :

[
PHP]if (ArrowDown >0 && ArrowDown!=2147483647 && countOpenedOnACurrentBar()==0)

Cela empêcherait l'ouverture de plusieurs ordres sur une même barre (ce code ne vérifie pas le type d'ordre déjà ouvert sur une barre courante, si vous souhaitez vérifier cela aussi, vous devez ajouter des conditions supplémentaires).

vegadigitalco:
Obtention d'une seule transaction

J'ai besoin de tous les trades qui sont générés dans icustom ARROW

mais

extern string Symbol_1 = "EURUSD" ;

int magic=9503 ;

retour(0) ;

int deinit()

{

return(0) ;

}

datetime newbar ;

int start()

{

if(newbar==Time[0])return(0) ; //

sinon newbar=Time[0] ;

double ArrowUp = iCustom(NULL,0, "NBO-System_v1",2,1,10000,2,1) ;

double ArrowDown = iCustom(NULL,0, "NBO-System_v1",2,1,10000,3,1);//PERIOD_M5

if (ArrowDown >0 && ArrowDown!=2147483647 && OrdersTotal()==0)//!= EMPTY_VALUE )

{

OrderSend(Symbol_1,OP_BUY,0.1, MarketInfo(Symbol_1,MODE_ASK), 2, NULL, NULL, "RapidFire", magic, NULL, FireBrick) ;

}

if (ArrowUp >0 && ArrowUp!=2147483647 && OrdersTotal()==0)

{

OrderSend(Symbol_1,OP_SELL,0.1, MarketInfo(Symbol_1,MODE_BID), 2, NULL, NULL, "RapidFire", magic, NULL,LimeGreen ) ;

}

return(0) ;

}
 

Très Très ThanX pour HELPPPPPPPPPPPP

Très Très ThanX pour HELPPPPPPPPPPPP

Très Très ThanX pour HELPPPPPPPPPPP

Très Très Important pour HELPPPPPPPPPPP

Très très supérieur à la moyenne pour HELPPPPPPPPPPP

mladen:
Dans votre EA, cette condition

OrdersTotal()==0

Si vous voulez ouvrir plus d'un ordre, supprimez cette condition mais vous devez ajouter du code pour éviter d'ouvrir plusieurs ordres sur la même barre (sinon vous vous retrouverez avec des millions d'ordres ouverts). Vous pouvez utiliser une fonction qui ressemblerait à ceci :
int countOpenedOnACurrentBar()

{

int openedAtBar = 0;

datetime startTime = Time[0];

datetime endTime = Time[0]+Period()*60;

for(int i=0; i < OrdersTotal(); i++)

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;

if(OrderMagicNumber() != MagicNumber) continue;

if(OrderSymbol() != Symbol()) continue;

if(OrderOpenTime()=endTime) continue;

openedAtBar++;

break;

}

return(openedAtBar);

}

[/PHP]

et alors votre condition complète (pour l'achat) serait comme ceci :

[PHP]if (ArrowDown >0 && ArrowDown!=2147483647 && countOpenedOnACurrentBar()==0)
Cela empêcherait l'ouverture de plusieurs ordres sur une même barre (ce code ne vérifie pas le type d'ordre déjà ouvert sur une barre courante, si vous souhaitez vérifier cela aussi, vous devez ajouter d'autres conditions).
Dossiers :
 

l'équilibre est le back-test, le test en direct ou l'équilibre en argent réel.

EA ne m'a jamais traversé l'esprit car les entrées semi-automatiques sont assez bonnes et cool (semi signifie un obstacle supplémentaire lorsque vous passez un ordre, comme le fly-by-wire, l'ordinateur peut déclarer vos entrées invalides).

mais le ticks-ease est comme un anneau de feu dans un jeu vidéo, il n'y a que quelques endroits dans l'anneau à un moment donné, dans lesquels vous pouvez vous mettre, les autres vous brûleront assez facilement --- ce n'est pas l'état du marché durant les 5 à 10 derniers mois cependant, les choses deviennent plus faciles

je veux lire ces codes dans l'EA ci-dessus - mais ces codages sont au-delà de ma limite de compréhension

 

besoin d'une alerte dans le trade codé ci-dessus

Bonjour mladen,

Merci pour votre soutien unique pour moi

Une autre chose, comment puis-je ajouter un code d'alerte sur l'achat ou la vente généré dans le code ci-dessus que vous avez suggéré.

Dans le marché réel il ne ferme pas l'achat ou la vente, il crée juste un nouveau trade.

Merci à l'avance

 

...

Essayez quelque chose comme ceci (ceci est un exemple pour l'achat seulement)
if (ArrowDown >0 && ArrowDown!=2147483647 &&countOpenedOnACurrentBar()==0)

{

OrderSend(Symbol_1,OP_BUY,0.1, MarketInfo(Symbol_1,MODE_ASK), 2, NULL, NULL, "RapidFire", magic, NULL, FireBrick);

if (!IsTesting()) Alert(Symbol_1+" BUY ordere opened at "+TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS));

}

vegadigitalco:
Bonjour mladen,

merci pour votre soutien unique pour moi

1 chose de plus, comment puis-je ajouter le code d'alerte sur l'achat ou la vente générée dans le code ci-dessus que vous avez suggéré.

dans le marché en direct, il ne ferme pas l'achat ou la vente, il vient de créer un nouveau commerce.

ThanX in Advance
 

J'aime beaucoup la façon dont l'ea prend le commerce.

 

Bonjour, mLaden,

Merci encore pour votre aide précieuse :)

Il ne reste qu'un seul problème

Dans le marché réel, il ne ferme pas les positions d'achat ou de vente précédentes, il crée simplement une nouvelle transaction. ? ??

Merci à l'ADV

mladen:
Essayez quelque chose comme ceci (c'est un exemple pour l'achat seulement)
if (ArrowDown >0 && ArrowDown!=2147483647 &&countOpenedOnACurrentBar()==0)

{

OrderSend(Symbol_1,OP_BUY,0.1, MarketInfo(Symbol_1,MODE_ASK), 2, NULL, NULL, "RapidFire", magic, NULL, FireBrick);

if (!IsTesting()) Alert(Symbol_1+" BUY ordere opened at "+TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS));

}

 

...

vegadigitalco

Vous devez ajouter une logique de fermeture dans votre EA pour cela. Soit vous utilisez un take profit et un stop loss, soit vous utilisez un OrderClose() explicite basé sur des règles de sortie pour cela.

vegadigitalco:
Bonjour, mLaden,

Merci encore pour votre aide précieuse :)

Il ne reste qu'un seul problème

Dans le marché réel, il ne ferme pas les positions d'achat ou de vente précédentes, il crée simplement une nouvelle transaction. ? ??

Merci en ADV