[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

 
Oui.
 
Roger:
Oui.
:) 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 ?
 
b0r1s:

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 искомого ордера)) {нашли - обрабатываем...}
 
ToLik_SRGV:

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);
  }
 
artmedia70:

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.
 
artmedia70:

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++;
   }
}
//+------------------------------------------------------------------+
 

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.

Type de commande Prix d'ouverture de l'ordre (OpenPrice) StopLoss (SL) TakeProfit (TP)
Acheter
Aucune modification autoriséeBid-SL StopLevelTP-Bid ≥ StopLevel
Vendez
Aucune modification autoriséeSL-Ask StopLevelAsk-TP StopLevel
Limite d'achat
Ask-OpenPrice StopLevelOpenPrice-SL StopLevelTP-OpenPrice ≥ StopLevel
Limite de vente
Bid-OpenPrice ≥ StopLevelSL-OpenPrice ≥StopLevelOpenPrice-TP StopLevel
BuyStop
OpenPrice-Ask StopLevelOpenPrice-SL StopLevelTP-OpenPrice StopLevel
SellStop
Bid-OpenPrice StopLevelSL-OpenPrice StopLevelOpenPrice-TP StopLevel

SellLimit est fixé au-dessus du prix actuel, donc c'est correct :

OpenPrice - Bid ≥ StopLevel

 
Comment ouvrir deux orbites opposées à 50 pips d'écart ?
 

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 .....

 
Rossi:

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.
Raison: