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

 
Je n'ai pas pu trouver quelle page.
 
1Rakso писал(а) >>
Je n'ai pas trouvé la page.

Je ne l'ai pas trouvé non plus. Ça n'a pas d'importance.

Si vous travaillez aux prix d'ouverture, il suffit de vérifier à l'ouverture d'un nouveau bar.

int start(){
  if (! NevBar()) return(0);
  
  //.......
  
  return(0);
}

bool NevBar(){
  static int prevtime=0;
  if ( prevtime==Time[0]) return(false);
  prevtime=Time[0];
  return(true);
}

C'est à peu près ça. Et si l'ouverture est possible à d'autres prix. Nous devrions utiliser d'autres mécanismes.

Si une seule position peut être ouverte par un symbole et une période de temps, nous devons contrôler le nombre de positions ouvertes.

int CountOrder[6];

// Функция формирует массив с количеством открытых позиций по каждому виду ордеров.
//===============================================================================
int Order_Count_Calculate(string _Symbol, int _Magic, int _OP=-1){
   ArrayInitialize( Order_Count,0);
   for (int i = OrdersTotal() - 1;  i >= 0;  i--) {
      if (!OrderSelect( i, SELECT_BY_POS, MODE_TRADES))   continue;
      if (OrderSymbol() != _Symbol)                     continue;
      if (OrderMagicNumber() != _Magic)                   continue;
      Order_Count[OrderType()]++;
   }
   if (_OP>=0) return( Order_Count[_OP]);
   return(0);
}

Maintenant, en vérifiant les valeurs des éléments nécessaires du tableau, nous savons combien de positions de ce type sont ouvertes.

 
rid >> :

Par exemple (exemple de fixation d'un stop d'achat) :

(il n'est pas du tout nécessaire que le prix fixé soit dans le flux de cotation afin de fixer un ordre en attente.

Vous pouvez utiliser le prix actuel ou n'importe quel prix, tant que vous respectez le niveau d'arrêt (du PRIX ACTUEL AU PRIX D'ARRÊT).

( 'EURUSD - Tendances, Prévisions et Conséquences' )

Au lieu de

double priceBUY=..... ....

entrez votre formule

EH...merci beaucoup surtout pour le code joint ! Juste ce que le docteur a ordonné ! ))))

 
Vinin >> :

Je ne l'ai pas trouvé non plus. Ça n'a pas d'importance.

Si vous travaillez aux prix d'ouverture, il suffit de vérifier à l'ouverture d'un nouveau bar.

C'est à peu près ça. Et si l'ouverture est possible à d'autres prix. Nous devrions utiliser d'autres mécanismes.

Si une seule position peut être ouverte par un symbole et une période de temps, nous devons contrôler le nombre de positions ouvertes.

Maintenant, en vérifiant les valeurs des éléments nécessaires du tableau, nous savons combien de positions de ce type sont ouvertes.

Vinin ! Merci !
 
total = OrdersTotal();
short = TRUE;
long = TRUE;
                      for (int cnt = 0; cnt < total; cnt++) {
                      OrderSelect( cnt, SELECT_BY_POS, MODE_TRADES);
                      if(OrderSymbol()==Symbol() && OrderMagicNumber()== MagicNumber){
                      if (OrderType() == OP_SELL) short = FALSE;
                      if (OrderType() == OP_BUY) long = FALSE;
                      }
                      }
                    
                     

J'ai ceci dans le code, mais je ne comprends pas ce tableau, comment va-t-il détecter s'il y avait un ordre sur cette barre et qu'il a été fermé, et nous allons attendre une nouvelle barre?

Comment puis-je expliquer ? Je me suis peut-être mal exprimé ou j'ai mal compris la fonction.....

1) Si nous ouvrons un ordre sur la barre zéro et qu'il est déjà fermé, alors nous n'ouvrons pas d'autre ordre sur cette barre même s'il y a un signal pour l'ouvrir car nous avons déjà eu une transaction sur cette barre et elle est déjà fermée.

Sur chaque barre il est permis d'ouvrir une seule transaction, s'il y avait une transaction sur cette barre, nous n'ouvrons pas l'ordre, comment faire ?

Aidez les gens.....))) Je suis déjà en train de faire une crise \\\\\\\\>>>>

 
1Rakso писал(а) >>

J'ai ceci dans le code, je ne comprends pas comment il va détecter qu'il y avait un ordre sur cette barre et qu'il a été fermé et nous devrons attendre une nouvelle barre ?

Comment puis-je expliquer ? Je me suis peut-être mal exprimé ou j'ai mal compris la fonction.....

1) Si nous ouvrons un ordre sur la barre zéro et qu'il est déjà fermé, alors nous n'ouvrons pas d'autre ordre sur cette barre même s'il y a un signal pour l'ouvrir parce que nous avons déjà eu une transaction sur cette barre et qu'elle est déjà fermée ; nous attendons simplement la prochaine barre.

Sur chaque barre il est permis d'ouvrir une seule transaction, s'il y avait une transaction sur cette barre, nous n'ouvrons pas l'ordre, comment faire ?

Aidez les gens.....))) Je suis déjà en train de faire une crise \\\\\\\\>>>>

Consultez le fil de discussion d'Igor KIM intitulé "Useful functions from KimIV". L'une des fonctions répondra à votre question

 

Ici, j'essaie d'écrire un conseiller... Je commence juste à apprendre... L'erreur 4062 apparaît dans le testeur...(ERR_STRING_PARAMETER_EXPECTED - 4062 - un paramètre de type chaîne est attendu)

Je n'arrive pas à trouver où le réparer. Quelqu'un de local peut-il regarder le code :)

extern double Lots = 0.9;        //лот
extern double StopLoss = 70;
extern double DecreaseFactor = 80;
extern double MaximumRisk    = 0.014;
extern double MaximumLots    = 100;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetSizeLot() //оптимизация лотов
  {
   double Lot = Lots;
   int cycle;
   int prof = 0;
   int orders = HistoryTotal();     // history orders total
   int losses = 0;                  // number of losses orders without a break
   int vinn = 0;
   int i = orders;
//---- select lot size
  Lot = NormalizeDouble(AccountFreeMargin()* MaximumRisk / 100, 1);
//----
   if(AccountFreeMargin() <= 14) 
       DecreaseFactor = 14;
//----
   if(AccountFreeMargin() > 10000) 
       DecreaseFactor = 60;
//----
   if( DecreaseFactor > 0 && orders > DecreaseFactor)
     {
       //----
       for( cycle = 1; cycle < DecreaseFactor; cycle++)
         {
           i--;
           //----
           if(OrderSelect( i, SELECT_BY_TICKET, MODE_HISTORY) == false) 
             { 
               Print("Error in history!"); 
               break; 
             } 
           //----
           if(OrderCloseTime()>0)
             {
               prof = prof + OrderProfit(); 
               if(OrderProfit() <= 0 ) 
                   losses++;
               else 
                   vinn++;
             }
         }  
       if( prof <= 0 && losses > vinn) 
           Lot = 0.1;
       if( prof <=0 && vinn > losses) 
           Lot = Lot - (0.1* losses);
       if( prof > 0 && losses > vinn) 
         {
           Lot = Lot + (0.1*NormalizeDouble( vinn / 4, 0.1));
         }
       if( prof > 0 && losses <= vinn )
         {
           Lot = Lot + (0.1*NormalizeDouble( vinn / 2, 0.1));
         }
     } 
   if(AccountFreeMargin() < 300 || Lot < 0.1) 
       Lot = 0.1;
   if( Lot*1275 >= AccountFreeMargin()) 
       Lot = NormalizeDouble(AccountFreeMargin()* MaximumRisk / 100, 1);
   if( MaximumLots != 0 && Lot > MaximumLots) 
       Lot = MaximumLots;
   if( DecreaseFactor > orders) 
       Lot = Lots;
   return( Lot);
  }  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+  
int start()
  {
  double glav1, sig1, glav2, sig2;
  int cnt, ticket, total;
glav1 =iCustom(NULL,0,"i_Trend",0,1);
sig1 =iCustom(NULL,0,"i_Trend",1,1); 
glav2 =iCustom(NULL,0,"i_Trend",0,2);
sig2 =iCustom(NULL,0,"i_Trend",1,2); 
   total = OrdersTotal();  // проверяем есть ли открытые позиции
   if( total < 1) 
     {
       if(AccountFreeMargin() < (500* Lots))  // проверяем денежки на счету
         {
           Print("Денег почти нет, осталось всего: ", AccountFreeMargin());
           return(0);  
         }
                  }
       // проверяем открытие позиции на покупку
       if(( glav2< sig2)  &&
          ( glav1> sig1))
         {
         OrderSend(Symbol(), OP_BUY, GetSizeLot(), Ask, 3, Ask - StopLoss*Point, "AlanMod expert", 16384, 0, Green);
          return(0); 
          }
           // проверяем возможность открытия на продажу
           if(( glav2> sig2)  &&
          ( glav1< sig1))
             {
             OrderSend(Symbol(), OP_SELL, GetSizeLot(), Bid, 3, Bid + StopLoss*Point, "AlanMod expert", 16384, 0, Red);
               return(0); 
             }
          for( cnt = 0; cnt < total; cnt++)
     {
           OrderSelect( cnt, SELECT_BY_POS, MODE_TRADES);
       if(OrderType() <= OP_SELL &&   // проверка открытой позиции 
          OrderSymbol() == Symbol())  // проверка с нашего ли она графика
         {
           if(OrderType() == OP_BUY)    // если открыта позиция на покупку
             {
                            if( glav1< sig1)// проверяем закрывать или нет?
                 {
                                    OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet); // закрыли
                   return(0);  // сваливаем
                 }
                              }
           else // если эта позиция на продажу
             {
             if( glav1> sig1)//проверяем закрывать иль нет?
         {
         OrderClose(OrderTicket(), OrderLots(), Ask, 3, Violet); // закрыли
        return(0); // сваливаем
        }
      }
    }
  }
}
 
Reys >> :

Ici, j'essaie d'écrire un conseiller... Je commence juste à apprendre... L'erreur 4062 apparaît dans le testeur...(ERR_STRING_PARAMETER_EXPECTED - 4062 - un paramètre de type chaîne est attendu)

Je n'arrive pas à trouver où le réparer. Est-ce que l'un de vous, les gars du coin , peut regarder le code :)

1) double NormalizeDouble( double value, int digits), et vous avez (vinn/2, 0.1)

2) OrderSend(Symbol(), OP_BUY, GetSizeLot(), Ask, 3, Ask - StopLoss*Point,NO TAKE_profit, "AlanMod expert", 16384, 0, Green);

 
Merci, j'étais juste devant vous)
 

comment nommer les tampons dans les indicateurs personnalisés?