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

 

Merci pour les conseils. Tout fonctionne, mais lorsque vous installez l'indicateur, il est dessiné de manière étrange (voir graphique). L'indentation (en barres) du bord gauche de la fenêtre du graphique à la ligne verticale jaune est toujours NON STOPÉE pour TOUT nombre de barres visibles dans la fenêtre et est égale à huit barres. Une fois que ces huit barres dépassent la limite gauche de la fenêtre, TOUTES les lignes du graphique apparaissent immédiatement et ensuite tout est normal. Peut-on corriger cela et comment ?


#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Aqua
#property indicator_color4 DarkOrange
#property  indicator_width1  2
#property  indicator_width3  2
//--- buffers
double Macd1Buffer[];
double Signal1Buffer[];
double Macd2Buffer[];
double Signal2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Macd1Buffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,Signal1Buffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,Macd2Buffer);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,Signal2Buffer);
   
   IndicatorDigits(Digits);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {   
      double max1=-0.01,min1=0.01,
             max2=-0.01,min2=0.01,
             max_M1=-0.01,min_M1=0.01,
             max_M2=-0.01,min_M2=0.01,
             max_S1=-0.01,min_S1=0.01,
             max_S2=-0.01,min_S2=0.01;
             
       
 
   int bars_counted=WindowBarsPerChart()-1,
       limit;  
       limit=bars_counted;       


      
//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
   
   { 
     Macd1Buffer[i]=iMA(NULL,0,6,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i);
     Macd2Buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);
      
           max_M1=MathMax(Macd1Buffer[i],max_M1);
           min_M1=MathMin(Macd1Buffer[i],min_M1);
           
           max_M2=MathMax(Macd2Buffer[i],max_M2);
           min_M2=MathMin(Macd2Buffer[i],min_M2);
   }
   
   for( i=0; i<limit; i++)
           
   {
      Signal1Buffer[i]=iMAOnArray(Macd1Buffer,Bars,5,0,MODE_SMA,i);
      Signal2Buffer[i]=iMAOnArray(Macd2Buffer,Bars,9,0,MODE_SMA,i);
      
           
           max_S1=MathMax(Signal1Buffer[i],max_S1);
           min_S1=MathMin(Signal1Buffer[i],min_S1);
           
           max_S2=MathMax(Signal2Buffer[i],max_S2);
           min_S2=MathMin(Signal2Buffer[i],min_S2);         
   }          
           max1=MathMax(max_M1,max_S1);
           min1=MathMin(min_M1,min_S1);
             
           
            
      

//---- done 
   
 
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1,
               "\n"," max_M1 = ",max_M1,
               "\n"," min_M1 = ",min_M1,
               "\n"," max_S1 = ",max_S1,
               "\n"," min_S1 = ",min_S1,
               "\n"," max_M2 = ",max_M2,
               "\n"," min_M2 = ",min_M2,
               "\n"," max_S2 = ",max_S2,
               "\n"," min_S2 = ",min_S2,
               "\n"," max1 = ",max1,
               "\n"," min1 = ",min1,    
               "\n"," max2 = ",max2,
               "\n"," min2 = ",min2);
         
             
         
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
MK07:

Merci pour les conseils. Cela fonctionne, mais lorsque vous installez l'indicateur, il est dessiné de manière étrange (voir graphique). L'indentation (en barres) entre le bord gauche de la fenêtre graphique et la ligne verticale jaune est toujours NON STOPÉE pour TOUT nombre de barres visibles dans la fenêtre et est égale à huit barres. Dès que ces huit barres dépassent le bord gauche de la fenêtre, TOUTES les lignes graphiques apparaissent immédiatement et ensuite tout est normal. Peut-on corriger cela et comment ?


essayez comme ceci

   int limit;
   int counted_bars=IndicatorCounted();
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
 
J'ai besoin de construire un indicateur sur TOUTES les barres vues dans la fenêtre, et ensuite trouver son maximum et son minimum à ce point ! Aidez-moi à résoudre le problème, mentionné dans mon post précédent, j'ai un exemple, mais je ne comprends pas tout, quelqu'un peut-il expliquer ces trois lignes une par une ?
 // обработка видимых баров.
   int bars_count=WindowBarsPerChart();
   int bar=WindowFirstVisibleBar();
   for(int i=0; i<bars_count; i++,bar--)
     {
      // номера баров уменьшаются, так как нумерация идет в обратном порядке.
      // ...
     } 
 
MK07:
Cette construction de code permet de recalculer à chaque nouveau tick l'indicateur seulement à zéro et à la première (pour vérification) barre, au lieu de recalculer l'indicateur déjà calculé à nouveau. Mais j'ai besoin de construire un indicateur par TOUTES les barres visibles dans la fenêtre et ensuite trouver son max et min à ce point. S'il vous plaît aidez-moi à résoudre le problème mentionné dans mon post précédent. il y a un exemple, mais tout n'est pas clair pour moi. quelqu'un peut-il expliquer ces trois chaînes ligne par ligne ?

Je ne comprends pas très bien ce dont vous avez besoin. Si vous devez trouver les valeurs MAX et MIN des barres visibles de l'indicateur, dessinez d'abord l'indicateur, puis effectuez une recherche.

Il est peut-être préférable d'utiliser WindowPriceMax(), WindowPriceMin().

 
r772ra:

Stepan2

Travaux


Il y a un problème avec les tableaux après tout, mais avec while

c pour pour fonctionne sans aucun problème

))

 

Bon après-midi.

Les gens, dites-moi avec quoi tester les EA. Parce que le MT intégré donne une qualité de simulation moyenne de 50%, et que les gens affichent plus de 90% sur les captures d'écran.

 
jusser:

Bon après-midi.

Les gens, dites-moi avec quoi tester les EA. Parce que le MT intégré donne une qualité de simulation moyenne de 50%, mais sur les captures d'écran, les gens affichent plus de 90%.


Si vous avez l'historique complet des minutes, ce sera 90%. 99% est réalisé en créant un historique de tique fxt vous-même. Cela se fait généralement à l'aide de guillemets de dukascoping. Les scripts de Google sur le thème des tests de qualité à 99 %.

 
Bonjour, pourriez-vous me dire s'il existe un indicateur dans MT4 qui montre l'intérêt ouvert ? Si non, peut-il être remplacé par quelque chose de similaire ?
 
Bonjour, comment implémenter une condition dans le code de l'Expert Advisor pour placer le même type d'ordres 50 pips après le dernier ordre.
 
Armen63:
Bonjour, comment implémenter une condition dans le code de l'Expert Advisor pour placer le même type d'ordres 50 pips après le dernier ordre.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
Raison: