[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 323

 
sergeev:

avant de tenter de fermer, exécutez OrderSelect et vérifiez OrderCloseTime. S'il est déjà supérieur à 0, l'ordre est fermé.


J'ai Select, et où dois-je placer OrderCloseTime ? Après la sélection ou dans la fonction CloseOrder() ?

J'ai regardé dans Doc. Je n'ai pas History Select, seulement Trad. Je vais donc essayer de placer cette sélection historique après la condition de clôture et avant CloseOrder(). Merci !

 
À l'intérieur de la sélection, après les filtres pour le symbole et la magie (s'il y en a), c'est-à-dire, nous vérifions l'ordre pour le temps de fermeture, s'il n'est pas égal à zéro (l'ordre est fermé), nous interdisons sa refermeture.
 
FAQ:
A l'intérieur de la sélection, après les filtres pour le symbole et la magie (s'il y en a), c'est-à-dire, nous vérifions l'ordre pour l'heure de fermeture, si elle n'est pas égale à zéro (l'ordre est fermé), alors nous interdisons de le fermer à nouveau.


Merci ! Je vais essayer celle du dessus alors !

Ici, a essayé d'insérer, a couru dans la démo, mais quelque chose sort plus d'erreurs et différents. Je demande d'abord, depuis le fourneau, sur ce code de Doka :

  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
    {
     datetime ctm=OrderOpenTime();
     int      ticket=OrderTicket();
     if(ctm>0) Print("Время открытия ордера № ",ticket," ",ctm);
     ctm=OrderCloseTime();
     if(ctm>0) Print("Время закрытия ордера № ",ticket," ",ctm);
    }
  else
    Print("OrderSelect() вернул ошибку ",GetLastError());

Ce qui est superflu ici, à insérer entre Selecta Trades, les vérifications de symboles, la magik... и ... type de commande. Peut-être que cmt datetime et int ticket à introduire au début ? Et l'imprimante écrit d'autres erreurs.

Et ajoutez une condition de clôture :

if(ctm == 0) {CloseOrder(OrderTicket(),OrderLots(),Bid,slip,Yellow);return(0);} else continue;

Aidez-nous !

 

Bonjour, pouvez-vous me donner un indice ?

Je veux ouvrir un ordre non pas immédiatement avec stp et sl, mais définir stp et sl après l'ouverture de l'ordre en le modifiant.

Je l'ai fait :

ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,SpringGreen)
{
CommandeSelect(ticket,SELECT_BY_TICKET) ;
}
{
OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Blue) ;
retour(0) ;

}


Je ne sais pas ce que je fais.

n'est-ce pas ?

 
RMX13:

Bonjour, pouvez-vous me donner un indice ?

Je veux ouvrir un ordre non pas immédiatement avec stp et sl, mais définir stp et sl après l'ouverture de l'ordre en le modifiant.

Je l'ai fait :

ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,SpringGreen)
{
CommandeSelect(ticket,SELECT_BY_TICKET) ;
}
{
OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Blue) ;
retour(0) ;

}


Je ne sais pas ce que je fais.

n'est-ce pas ?



Et je ne comprends pas et plus encore ! Utiliser le CRS pour définir le code, voir ci-dessus ?
 
int orderOpen(int cmd, double open, int stopLossPips, int takeProfitPips, int magicNumber){       
      double sl=0, tp=0;
      if(stopLossPips>0){
         stopLossPips = MathMax(stopLossPips,MarketInfo(Symbol(),MODE_STOPLEVEL)+3*_pipsMultiplyer);
      }
      if(takeProfitPips>0){
         takeProfitPips = MathMax(takeProfitPips,MarketInfo(Symbol(),MODE_STOPLEVEL)+3*_pipsMultiplyer);
      }
      int ticket=-1;
      if(_doTrade){        
         double lots  = OrderLotSize();
         if(lots>=MarketInfo(Symbol(), MODE_MINLOT)){          
            //wait context
            if(TradeIsBusy() < 0) {
                 return(-1); 
            }
            if(cmd==OP_BUYSTOP || cmd==OP_BUY || cmd==OP_SELLLIMIT){
               RefreshRates();
               if(cmd==OP_BUY){
                  open=Ask;
               }
               if(stopLossPips>0){
                  sl=NormalizeDouble(open-stopLossPips*Point,Digits);
               }
               if(takeProfitPips>0){
                  tp=NormalizeDouble(open+takeProfitPips*Point,Digits);
               }
               ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,sl,tp,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,SpringGreen);              
            }else{
               RefreshRates();
               if(cmd==OP_SELL){
                  open=Bid;
               }
               if(stopLossPips>0){
                  sl=NormalizeDouble(open+stopLossPips*Point,Digits);
               }
               if(takeProfitPips>0){
                  tp=NormalizeDouble(open-takeProfitPips*Point,Digits);
               }
               ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,sl,tp,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,Red);
            }
Pour commencer, cette pièce est-elle responsable de l'ouverture d'une commande ?
 
Je l'ai compris tout seul.
 
borilunad:


Merci ! Je vais essayer ce qui précède alors !

Ici, j'ai essayé d'insérer, je l'ai exécuté dans la démo, mais il en ressort plus d'erreurs et quelque chose de différent. Je demande d'abord, depuis le fourneau, sur ce code de Doki :

Ce qu'il est superflu d'insérer ici entre Selecta Trades, les vérifications de symboles, la magik... и ... type de commande. Peut-être que cmt datetime et int ticket à introduire au début ? Et l'imprimante écrit d'autres erreurs.

Et ajoutez une condition de clôture :

Aidez-moi !


Eh, comme le dit le dicton : "apprenez l'élève" (c)

for(int i=OrdersTotal()-1;i>=0;i--){
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES){
      if(OrderSymbol()!=Symbol()){continue;}// фильтр по символу(если не наш символ, то пропускаем)
      if(OrderMagicNumber()!=magik){continue;}// фильтр по магику
      if(OrderCloseTime()!=0){continue;}// фильтр по времени закрытия (если не=0 то ордер уже закрыт)
      if(OrderType()<=OP_SELL){//закрытие для рыночных ордеров
         OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),MarketInfo(OrderSymbol(),MODE_SPREAD),CLR_NONE);
      }else{// закрытие для отложенных ордеров
         OrderDelete(OrderTicket());
      }
   }
}

Supprimez (commentez) ce qui n'est pas nécessaire.

 
               ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,Red);
            OrderSelect(ticket,SELECT_BY_TICKET);
            OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0);

Un morceau de code qui ouvre un ordre et définit un stop loss et un take profit.

Le terminal génère les erreurs suivantes : EURUSD,M30 : OrderSend error 130

EURUSD,M30 : ticket invalide pour la fonction OrderModify

EURUSD,M30 : Erreur OrderModify 4051

EURUSD,M30 : OrderSend a échoué avec l'erreur #4051 bid:1.23674000 ask:1.23683000 Open:1.23674000 SL:1.2423 TP:1.2283 MODE_STOPLEVEL:0.00000000 LOT:0.01000000

Quel est le problème ?


 
FAQ:


Eh, comme le dit le dicton : "Etudie, étudiant" (c).

Supprimer le superflu (le commenter)


Merci beaucoup ! Moi aussi, j'apprends tout au long de ma vie ! Et en général, apprendre est plus intéressant que travailler. Maintenant je vais essayer de m'adapter, je ne veux vraiment pas changer l'ordre dans le code. A tout moment, je modifie ou ajoute des conditions en fonction de l'évolution du comportement du marché. Bonne chance à vous et bonne nuit !