Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 102

 
Dozol:


Roger, je ne peux pas comprendre !

Jeter une ligne horizontale sur le graphique, fixer son prix, supprimer la ligne - elle n'est plus nécessaire. Nous passons immédiatement un ordre à ce prix.

Quelle est l'erreur ? Et pourquoi un Sell Stop ne s'ouvre pas ?

Pourquoi continuer à suivre le prix si je n'ai besoin que de la valeur du prix de la ligne horizontale ?

Expliquer ! !! Au secours ! Plus de détails, s'il vous plaît !

Sellstop avait tort, ça va s'ouvrir.

Maintenant, à propos des lignes. Lorsque je négocie en direct, je regarde le graphique et je place une ligne horizontale, les conditions sont appropriées, la ligne est supprimée et l'ordre est ouvert. En quoi est-ce mieux qu'un simple script de raccourci ? Dans le testeur, pour tracer la ligne, vous devez activer la visualisation et observer le graphique. En général, je ne comprends même pas pourquoi nous devrions l'ajouter au testeur.

 
borilunad:
Désolé. Puis va sur le pot et va dormir ! Bonne matinée ! ;)
Ok. Je le découvrirai moi-même, ce n'est pas une énigme si insoluble. Mais pour l'instant, je ne pense qu'à des béquilles. La méthode de la béquille n'est pas une bonne méthode...
 
Braves gens, pouvez-vous me dire ce qui ne va pas. Dans une transaction de vente, qui s'ouvre sur le premier tick de la barre 0, le stop loss doit être fixé 30 pips (5 chiffres) au-dessus du High de la première bougie. Je l'ai écrit de cette façon, mais le stop loss n'est pas du tout défini.
     Price = NormalizeDouble(Bid, Digits); // округляем до нужного нам числа цифр после запятой
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1)) 
     {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;
       SL= Price + StopLoss*Point;
       SL = NormalizeDouble(SL, Digits); // округляем до нужного нам числа цифр после запятой
      }
 
artmedia70:

Et sur vos doigts ? Comment le temps et le prix peuvent-ils vous dire de conclure la prise ? Je peux certainement le penser moi-même, mais il est 7h43 du matin et je ne me suis pas encore couché.


S'il est 7h43 et que je ne me suis pas couché... Donc, je vais supposer que c'est le Graal!
 
alexey1979621:
Braves gens, dites-moi ce qui ne va pas. Dans une transaction de vente, qui s'ouvre sur le premier tick de la barre 0, le stop loss doit être fixé 30 pips (5 chiffres) au-dessus du High de la première bougie. C'est écrit, mais le stop loss n'est pas placé du tout.

StopLoss = iHigh(Symbol(),0,1)+30*Point;

Il s'agit du niveau stop loss que vous souhaitez, par exemple, 1.5000+30*0.00001 = 1.5003.


SL= Price + StopLoss*Point; 
Sinon, pourquoi ajouteriez-vous StopLoss*Point au prix(1,5003*0,00001=0,000015). Le SL devient presque égal au prix, c'est pourquoi le StopLoss n'est pas fixé.
 
Le stop loss n'est toujours pas défini, mais le take profit fonctionne. Code stop loss et take profit ci-joint
Price = NormalizeDouble(Bid, Digits);  
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1)) 
      {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;
       SL = NormalizeDouble(SL, Digits); 
      }
       else SL = 0;
       if(TakeProfit > 0)
      {
       TP = Price - TakeProfit*Point;
       TP = NormalizeDouble(TP, Digits); 
      }
       else TP = 0;
      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",Magic,0,Red);
      return;
      }
 
artmedia70:
1. Recherchez la dernière position fermée (MODE_HISTORY).
2. S'il a fermé à (ou près de) l'endroit où se trouve le restaurant --> Souvenez-vous de son heure d'ouverture -->.
3. Regardez toutes les positions ouvertes (MODE_TRADES) et comparez leur temps d'ouverture avec le temps mémorisé (du point 2) --> Si le temps mémorisé d'ouverture de la position fermée par la position actuelle (du point 2) est le plus long par rapport au temps d'ouverture des autres positions ouvertes --> Cela signifie que la dernière position ouverte a été fermée par la position actuelle -->
4. Recadrez/supprimez tout le reste.


Hm. Il semble être écrit. Mais le résultat n'est pas le même.

Voici ce qui est ressorti pour moi :

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
datetime GetLastOrderState()
{
   datetime lastOrderCloseTime = -1,               // Время закрытия последнего открытого ордера
            lastOOTMarket = -1,          // Время открытия последнего открытого ордера рыночного
            lastOOTHist = -1;            // Время открытия последнего открытого ордера из истории
   
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют..
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
          lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
      
      if (MathAbs(OrderTakeProfit() - OrderOpenPrice()) < i_tp * pt) return(0);
      
      lastOOTHist = OrderOpenTime();   // Тогда время открытия последней закрытой позиции из истории
   }
   
   Comment("Время открытия последнего открытого ордера = ", lastOOTHist);
  
   for (int h=OrdersTotal()-1; i>=0; i--)
   {   
      if (!OrderSelect(h, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      {
         if (lastOOTMarket < OrderOpenTime())
             lastOOTMarket = OrderOpenTime();
  
         if (lastOOTMarket < lastOOTHist)      // Если время открытия последнего открытого ордера (рыночного) ниже последнего открытого ордера из истории..
             lastOrderCloseTime = OrderCloseTime(); // Значит это искомый ордер
      }
   }

   Comment("Время закрытия последнего открытого ордера = ", lastOrderCloseTime);
   return (lastOrderCloseTime);
}
 
alexey1979621:
Braves gens, pouvez-vous me dire ce qui ne va pas. Dans une transaction de vente, qui s'ouvre sur le premier tick de la barre 0, le stop loss doit être fixé 30 pips (5 chiffres) au-dessus du High de la première bougie. C'est écrit, mais le stop loss n'est pas placé du tout.

Ce que vous avez ici n'est rien du tout. Commençons par le fait que les clôtures courtes se font toujours sur l'ASC, et non sur le BID.
 
alexey1979621:
Le stop loss n'est toujours pas défini, mais le take profit fonctionne. Code stop loss et take profit ci-joint

Price = NormalizeDouble(Bid, Digits);  
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1))               // Здесь еще STOPLEVEL нужно проверять, иначе частые ошибки будут
      {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;  // Здесь вместо переменной StopLoss попробуйте поставить SL
       SL = NormalizeDouble(SL, Digits); 
      }
       else SL = 0;
       if(TakeProfit > 0)
      {
       TP = Price - TakeProfit*Point;
       TP = NormalizeDouble(TP, Digits); 
      }
       else TP = 0;
      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",Magic,0,Red);
      return;
      }
 
hoz:


Hmm. Il semble avoir été écrit. Mais la sortie est fausse...

C'est ce que j'ai obtenu :

Lors de la recherche du dernier ordre clôturé, le plus récent devrait être trouvé en premier, mais la vérification de la clôture à la prise devrait être retirée de la boucle, sinon elle vérifie chaque ordre clôturé pour la clôture à la prise et, si c'est le cas, elle se souvient de l'heure du premier ordre clôturé à la prise dans la boucle, et non du plus récent.