Aide à la mise au point d'un conseiller, d'un indicateur - page 5

 
Natalya Dzerzhinskaya:
Comment identifier les pinbars sur différents TFs ?

C'est une excellente façon d'identifier))

extern int TF = 60//Тайм фрейм на котором определяем пинбары
//---
bool PinbarLong, PinbarShort;
//---
int start() {    

      PinbarLong  = MathMin(iOpen(Symbol(), TF, 1),iClose(Symbol(), TF, 1))- iLow(Symbol(), TF, 1)
                    >= (iHigh(Symbol(), TF, 1)-iLow(Symbol(), TF, 1))*0.75;           

      PinbarShort = iHigh(Symbol(), TF, 1)- MathMax(iOpen(Symbol(), TF, 1),iClose(Symbol(), TF, 1))
                    >= (iHigh(Symbol(), TF, 1)-iLow(Symbol(), TF, 1))*0.75;  

     if (PinbarLong) действие для buy;
     if (PinbarShort) действие для sell;

return(0);}//StartEnd
 
FXwin:

C'est ainsi qu'il faut le définir :))

Bonne option ! !! Merci))

 
Natalya Dzerzhinskaya:

Bonne option ! !! Merci))

Avec la permission de l'auteur, je vais poster une fonctionnalité multiplateforme

//===============================================================================================
//---------------------------------- Функция находит Пин-бар -----------------------------------+
//===============================================================================================
MqlRates _rates[1];
int GetPinBar(string symb="0", ENUM_TIMEFRAMES tf=0, double kf=0.75) {
 if(symb=="0") symb=Symbol();
  double open1=0,high1=0,low1=0,close1=0;
   CopyRates(symb,tf,1,1,_rates);
   open1=rates[0].open;
   high1=rates[0].high;
   low1=rates[0].low;
   close1=rates[0].close;
    if(MathMin(open1,close1)-low1 >=(high1-low1)*kf) return(1);
    if(high1-MathMax(open1,close1)>=(high1-low1)*kf) return(2);
  return(0);
 }
 
Vitaly Muzichenko:

Avec la permission de l'auteur, je vais poster une fonctionnalité multiplateforme

Je suis seulement "POUR" la participation))

 
Bonjour ! Aidez-moi à installer le robot. J'ai ajouté une heure de fermeture et ça ne marche pas.
Dossiers :
0j1_uhskn.mq4  14 kb
 
Romal001:
J'y ai ajouté une heure de fermeture et ça ne marche pas.

J'ai ajouté le temps mais pas le processus de fermeture)).


 
int BuyOrders()
 {
  int co,t;
  for(co=0; co<OrdersTotal(); co++)
   {
    if(OrderSelect(co,SELECT_BY_POS))
     if(OrderSymbol()==Symbol())
      if(OrderMagicNumber()==Magik)
       {
        if(OrderType()==OP_BUY) t++;
       }
   }
  return(t); 
 }

int SellOrders()
 {
  int cp,t;
  for(cp=0; cp<OrdersTotal(); cp++)
   {
    if(OrderSelect(cp,SELECT_BY_POS))
     if(OrderSymbol()==Symbol())
      if(OrderMagicNumber()==Magik)
       {
        if(OrderType()==OP_SELL) t++;
       }
   }
  return(t); 
 }
 
void CloseSell()
 {
  int t;
  while(SellOrders()>0)
   {
    for(int c=0; c<=OrdersTotal();c++)
     {
      if(OrderSelect(c,SELECT_BY_POS, MODE_TRADES))
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)//
        {              
         if(OrderType()==OP_SELL)
          {
           for(t=0; t<=5; t++)
            {
             RefreshRates();
             int ticket=OrderClose(OrderTicket(),OrderLots(),Ask,10,Red);
             int e=GetLastError();
             if(e==0) break; else Print("error close Sell : "+e);
            }
          }
        }
     }
   }
  return;
 }

void CloseBuy()
 {
  int t;
  while(BuyOrders()>0)
   {
    for(int c=0; c<=OrdersTotal();c++)
     {
      if(OrderSelect(c,SELECT_BY_POS, MODE_TRADES))
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik) //
        {              
         if(OrderType()==OP_BUY)
          {
           for(t=0; t<=5; t++)
            {
             RefreshRates();
             int ticket=OrderClose(OrderTicket(),OrderLots(),Bid,10,Red);
             int e=GetLastError();
             if(e==0) break; else Print("error close Sell : "+e);
            }
          }
        }
     }
   }
  return;
 }
Comme ça.
 
Romal001:
Comme ça.

Je l'ai, pas si et pas si, ça ne marche pas.

 
if(closeneed && OrdersTotal()>0){
      CloseBuy(); CloseSell();
 
Romal001:

Corrigé par


Dossiers :