[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 621
:) Maintenant l'erreur 130 est apparue. La chose la plus étrange est qu'avec des stops erronés (130), il définit toujours le takei correct (calculé par ATR), mais mes stops n'ont pas été définis depuis le début... Y a-t-il un moyen de le comprendre ?
Besoin d'aide ! !! Comment choisir la dernière commande perdue dans l'historique ?
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает флаг убыточности последней позиции. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isLossLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
int i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderProfit()<0) return(True);
}
return(False);
}
if (isLossLastPos(NULL, -1, Magic искомого ордера)) {нашли - обрабатываем...}
C'est un peu trop compliqué pour vous :)) Voici mon code
Passez en méthode comme paramètres un medjack retardé et un trall souhaitable.
Je ne comprends pas pourquoi votre fonction donne l'erreur 1 (drôle : erreur 1 = pas d'erreur, mais résultat inconnu) et ne chaloupe pas. Parfois, il peut y avoir des retards, mais la plupart du temps >>>ERROR1 dans le journal et ne pas tousser...
C'est comme ça que je fais :
//==============================================================================================// Модификация ордеров//============================================================================================== int criterion = TakeProfitATR (1); // Рассчитываем "достаточную" волатильность
if (criterion>=15) trailingOrder(511, 20); // и если она в "норме" - тралим ордера...
//==============================================================================================// Функция для рассчёта Take Profit по ATR//+------------------------------------------------------------------+//| Take from ATR |//+------------------------------------------------------------------+double TakeProfitATR (int tf)
{
double atr =iATR(NULL,tf,14,0);
double mltp =15000;
if (tf==1) mltp=15000;
if (tf==5) mltp=45000;
double tp =MathRound(atr*mltp);
return (tp);
}
Je ne comprends pas pourquoi votre fonction donne l'erreur 1 (drôle : erreur 1 = pas d'erreur, mais résultat inconnu) et ne chaloupe pas. Parfois, il peut attraper une erreur en suspens, mais la plupart du temps >>>ERROR1 est dans le journal et je ne tousse pas...
Je l'appelle comme ça :
L'erreur 1 peut apparaître à cause de ceci (tiré de la doc OrderModify()) :
Si des valeurs inchangées sont transmises comme paramètres de fonction, l'erreur 1 (ERR_NO_RESULT) sera générée.
Donc c'est bon, il n'y a pas vraiment d'erreur, vous pouvez l'ignorer.
Je ne comprends pas pourquoi votre fonction donne l'erreur 1 (drôle : erreur 1 = pas d'erreur, mais résultat inconnu) et ne chaloupe pas. Parfois, il peut attraper une erreur en suspens, mais la plupart du temps >>>ERROR1 est dans le journal et je ne tousse pas...
C'est comme ça que je fais :
J'ai ajouté Limit`order(dans le dernier code je les ai oubliés :))) + traitement de l'erreur #1 (avant la modification le nouveau prix est comparé avec le prix actuel, s'ils sont les mêmes, alors ne rien faire) :
//+------------------------------------------------------------------+void trailingOrder(int magic, int trailing){
int index = 0;
while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
if(OrderMagicNumber() == magic){
if(OrderType() == OP_BUYSTOP){
if(OrderOpenPrice() - Ask > Point*trailing){
if((Ask+Point*trailing) - Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
(Ask+Point*trailing) - Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
(Ask+Point*trailing) != OrderOpenPrice()){
if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
}else{
Print(">>> Слишком близко к рынку или передано неизмененное значение!");
}
}
return;
}
if(OrderType() == OP_SELLSTOP){
if(Bid - OrderOpenPrice() > Point*trailing){
if(Bid - (Bid-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
Bid - (Bid-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
(Bid-Point*trailing) != OrderOpenPrice()){
if(!OrderModify(OrderTicket(),Bid-Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
}else{
Print(">>> Слишком близко к рынку или передано неизмененное значение!");
}
}
return;
}
if(OrderType() == OP_SELLLIMIT){
if(OrderOpenPrice() - Bid > Point*trailing){
if((Bid+Point*trailing) - Bid >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
(Bid+Point*trailing) - Bid > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
(Bid+Point*trailing) != OrderOpenPrice()){
if(!OrderModify(OrderTicket(),Bid+Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
}else{
Print(">>> Слишком близко к рынку или передано неизмененное значение!");
}
}
return;
}
if(OrderType() == OP_BUYLIMIT){
if(Ask - OrderOpenPrice() > Point*trailing){
if(Ask - (Ask-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
Ask - (Ask-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
(Ask-Point*trailing) != OrderOpenPrice()){
if(!OrderModify(OrderTicket(),Ask-Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
}else{
Print(">>> Слишком близко к рынку или передано неизмененное значение!");
}
}
return;
}
}
index++;
}
}
//+------------------------------------------------------------------+
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Oui.
Y a-t-il un moyen de le comprendre ?
Besoin d'aide ! !! Comment choisir la dernière commande perdue dans l'historique ?
C'est un peu trop compliqué pour vous :))
Passez en méthode comme paramètres un medjack retardé et un trall souhaitable.Voici mon code
Je ne comprends pas pourquoi votre fonction donne l'erreur 1 (drôle : erreur 1 = pas d'erreur, mais résultat inconnu) et ne chaloupe pas. Parfois, il peut y avoir des retards, mais la plupart du temps >>>ERROR1 dans le journal et ne pas tousser...
C'est comme ça que je fais :
Je ne comprends pas pourquoi votre fonction donne l'erreur 1 (drôle : erreur 1 = pas d'erreur, mais résultat inconnu) et ne chaloupe pas. Parfois, il peut attraper une erreur en suspens, mais la plupart du temps >>>ERROR1 est dans le journal et je ne tousse pas...
Je l'appelle comme ça :
L'erreur 1 peut apparaître à cause de ceci (tiré de la doc OrderModify()) :
Si des valeurs inchangées sont transmises comme paramètres de fonction, l'erreur 1 (ERR_NO_RESULT) sera générée.
Je ne comprends pas pourquoi votre fonction donne l'erreur 1 (drôle : erreur 1 = pas d'erreur, mais résultat inconnu) et ne chaloupe pas. Parfois, il peut attraper une erreur en suspens, mais la plupart du temps >>>ERROR1 est dans le journal et je ne tousse pas...
C'est comme ça que je fais :
J'ai ajouté Limit`order(dans le dernier code je les ai oubliés :))) + traitement de l'erreur #1 (avant la modification le nouveau prix est comparé avec le prix actuel, s'ils sont les mêmes, alors ne rien faire) :
Au fait, j'ai trouvé une erreur dans le tutoriel concernant les distances StopLevel et FreezeLevel pour les pendentifs :
Limitation de la distance minimale du StopLevel.
L'opération commerciale n'est pas exécutée si l'une de ces conditions n'est pas respectée.
SellLimit est fixé au-dessus du prix actuel, donc c'est correct :
OpenPrice - Bid ≥ StopLevel
y a-t-il un moyen de trier les instruments dans les onglets en bas de l'écran ? car 8 instruments dans 4 délais sont éparpillés dans un désordre .....
y a-t-il un moyen de trier les instruments dans les onglets en bas de l'écran ? car 8 instruments dans 4 délais sont éparpillés dans un désordre .....
Saisissez l'onglet portant le nom du graphique et faites-le glisser au bon endroit.