[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 479

 
Svinozavr >>:

Да, кажется, все проще - время сделки-то известно. Если так, то время по тайм-фрейму будет таково:


Time[iBarShift(NULL,tf,DealTime)]

где
tf - нужный тайм-фрейм,
DealTime - время (с датой) сделки


Merci, mais qu'en est-il s'il n'y a pas encore d'offre et que DealTime est l'heure connue de l'offre prévue ?

 
MoneyJinn >>:


Спасибо, а как быть если сделки еще не было и DealTime - известное время планируемой сделки?

Pourquoi ?)) ok. C'est encore plus simple : tf*60*MathFloor(DealTime/60/tf) // la signification des variables est la même

Vous pouvez vérifier le script :

#property show_inputs
extern int tf=1440;
extern datetime DealTime;

void start() {Alert(TimeToStr(tf*60*MathFloor(DealTime/60/tf)));}
===
Corrigé. J'ai oublié de convertir les secondes en minutes.)))
 
J'ai environ 200 MA dans mon EA et quand je les teste, lorsque j'appuie sur "ouvrir le graphique", elles apparaissent toutes.
puis-je les supprimer pour les masquer ?
merci
 
snowman647 >>:
у меня в советнике около 200 MA, при тестировани, когда жмешь "открыть график" они все рисуються.
можно их както убрать, чтоб не видно было?
спасибо

void HideTestIndicators( bool hide)
La fonction définit un drapeau pour masquer les indicateurs appelés par l'Expert Advisor. Lorsque le graphique est ouvert après le test, les indicateurs marqués du drapeau de masquage ne seront pas affichés dans le graphique de test. Les indicateurs seront marqués de l'indicateur de masquage actuel avant chaque appel.
Il convient de noter que seuls les indicateurs qui sont directement appelés par le conseiller expert testé peuvent être affichés dans le graphique de test.

 
J'essaie de maîtriser le langage MQL et pour m'entraîner, j'ai décidé d'ajouter la fonction Martingale à mon EA !
Je voulais ouvrir un ordre avec le SL par lot multiplié par le coefficient et en cas de TP je commencerais avec le lot original !
Je ne sais pas comment mettre une condition sur TP et SL !
Veuillez me conseiller sur la manière de procéder !
//--------------------------------------------------------------------
extern int  stoploss    = 50,
            takeprofit  = 50;
extern double  mult=2;
extern double      Lot=1;
int         tip;
//--------------------------------------------------------------------
int init()
{
   OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                        NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
}
//--------------------------------------------------------------------
int start()
{
   for (int i=0; i<OrdersTotal(); i++){   
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
         if (OrderSymbol()==Symbol()){
            tip = OrderType();
            Lot = OrderLots();return;}}}
   if (Lot==0) return;
   if (tip==0) OrderSend(Symbol(),OP_SELL,Lot*mult,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                                    NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
   if (tip==1) OrderSend(Symbol(),OP_BUY ,Lot*mult,Ask,3,NormalizeDouble(Bid - stoploss*Point,Digits),
                                    NormalizeDouble(Ask + takeprofit*Point,Digits)," ",777,Blue);
   return(0);
}
//-----------------------------------------------------------------
 
Kogalym >>:
Пытаюсь освоить язык MQL в качестве практики решил добавить в советник перевертыш функцию Мартингейла!
Что бы при SL открывал ордер лотом умноженным на коэффициент, а при TP начинал с первоночального лота!
Но получилось что лот увеличивается с каждым ордером, не знаю как поставить условие на TP и SL!
Подскажите пожалуйста как должен выглядеть правильный код!

Il doit y avoir une fonction comme celle-ci

double getLot()
{
   if(OrdersHistoryTotal()==0)return(0.1);
   // ищем самый последний закрытый ордер
   datetime time=0;
   int ticket=-1;
   for(i=OrdersHistoryTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if(OrderSymbol()==Symbol())
         {
            if(OrderCloseTime()>time)
            {
               time=OrderCloseTime();
               ticket=OrderTicket();
            }
         }
      }
   }
   if(OrderTicket()!=ticket)OrderSelect(ticket,SELECT_BY_TICKET);
   if(OrderProfit()<=0) return(NormalizeDouble(OrderLots()*Martin_Koef,2));
   if(OrderProfit()>0)return(0.1);
   //-----
}
 
Roger >>:

Да уже плешь проели с этим вопросом. Набираешь old tick здесь в поисковике и читаешь, читаешь, читаешь.

Si tu es si intelligent, pourquoi viens-tu ici ? Tu veux dire que ça ne te dérange pas d'écrire une lettre insolente, mais que ça ne te dérange pas de répondre. Bien, bien.

 
StatBars >>:

Должна быть функция вроде этой


Je ne comprends pas ce que le temps a à voir avec ça.
Je pense que seules les 3 dernières lignes sont responsables de l'augmentation du lot en cas de perte.
if(OrderTicket()!=ticket)OrderSelect(ticket,SELECT_BY_TICKET);
   if(OrderProfit()<=0) return(NormalizeDouble(OrderLots()*Martin_Koef,2));
   if(OrderProfit()>0)return(0.1);
 
Kogalym >>:


Не понимаю причем там время???
По моему за наращивание лота при убытке отвечают только 3 последние строчки

Cette fonction trouve le dernier ordre clôturé et calcule le lot en fonction de son profit. Si vous avez un ordre fermé sur le Stop Loss, qui n'est jamais positif en termes de profit, et un ordre fermé sur le Take Profit, qui n'est jamais négatif en termes de profit, cette fonction fonctionnera correctement.
Si vous avez une sorte de chalut, la fonction doit être réécrite.

 
StatBars >>:

При том что функция находит последний закрытый ордер, по его профиту расчитывается лот. Если у Вас закрытый ордер по стоплоссу никогда не будет положительным по профиту, а закрытый по тейкпрофиту ордер никогда не будет отрицателен по профиту, то функция корректно отработает.
Если же у Вас есть трал какой-нибудь то функцию нужно переделать.

J'ai écrit un EA qui au TP ouvre un ordre dans la même direction, et au SL ouvre un ordre dans la direction opposée, mais je ne peux pas insérer la fonction Martingale et revenir à l'original.

//--------------------------------------------------------------------
extern int  stoploss    = 50,
            takeprofit  = 50;
extern double  mult=2;
extern double      Lot=1;
//--------------------------------------------------------------------
int init()
{
   OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                        NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
}
//--------------------------------------------------------------------
int start()
{   for (int i=0; i<OrdersTotal(); i++){   
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
         if (OrderSymbol()==Symbol()){
         Lot = OrderLots();return;}}}
            if (Lot==0) return;
        
  if(OrderType() == OP_SELL)
     if(OrderProfit()>0) OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                                    NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
   else OrderSend(Symbol(),OP_BUY ,Lot,Ask,3,NormalizeDouble(Bid - stoploss*Point,Digits),
                                    NormalizeDouble(Ask + takeprofit*Point,Digits)," ",777,Blue);
                                                                        
    if(OrderType() == OP_BUY) 
    if(OrderProfit()>0) OrderSend(Symbol(),OP_BUY ,Lot,Ask,3,NormalizeDouble(Bid - stoploss*Point,Digits),
                                    NormalizeDouble(Ask + takeprofit*Point,Digits)," ",777,Blue);
    else OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                                    NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
                                     
       
   return(0);
}
//-----------------------------------------------------------------

Je ne peux pas insérer la fonction de Martingale, je ne peux pas revenir au lot original ! Peut-être pouvez-vous me montrer où cette fonction doit être placée !