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

 
OK, je vais vérifier à nouveau.
 
Une fois encore, je tiens à me répéter.
(Low[2]==Low[1])||(Close[2]==Low[1])||(Low[2]==Open[1])
Vous ne pouvez pas fixer des conditions comme ça. Ce sont des événements peu probables.
 
atguard:

Question : Comment puis-je obtenir la valeur "shift" ? (lorsque j'appelle l'indicateur avec un shift, il utilise les mêmes valeurs que sans, c'est-à-direiCustom(NULL, 0, "name",pam1,0,1)= iCustom(NULL, 0, "name",pam1,0,100), mais si j'appelle l'indicateur il y a 100 barres, il aura une valeur différente de iCustom(NULL, 0, "name",pam1,0,100). L'indicateur est simple, il utilise 5 valeurs de clôture précédentes et prend leur moyenne.



double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

shift est le numéro de la barre à partir de laquelle vous prenez les données de l'indicateur, la barre zéro est la barre actuelle qui n'a pas encore été fermée. Le paramètre est appelé shift car il indique le décalage des données reçues par rapport à la barre de zéro, en barres.

 
silhouette:

J'utilise la fonction Terminal() du tutoriel lors de la fermeture des positions, à condition que Mas_Ord_New[0][0]!=0. Mais ici nous avons une autre tâche : nous devons créer un drapeau interdisant de négocier sur le signal actuel, si un ordre a déjà été ouvert sur celui-ci. J'essaie d'utiliser des drapeaux mais j'ai fait une erreur.

Je pense qu'il serait préférable de mettre un numéro magique approprié dans l'ordre et de vérifier si une telle position se trouve dans la liste. S'il y a = drapeau-vrai, non = drapeau-faux. Ensuite, à condition d'ouvrir une position sur votre signal, insérez un drapeau, par ex :

bool flag_1=true;
int MagNum_1=555;

int start()
{
// ...

if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderMagicNumber()==MagNum_1)
              flag_1=true;
         else flag_1=false;
}  }  }

if (flag_1==false && /*данное условие открытия позиции*/)
{ OrderSend(..., MagNum_1, ...);
}
//...
}
 
paladin80:

Je pense qu'il est préférable de mettre le numéro magique approprié dans l'ordre et de vérifier si cette position est sur la liste. S'il y a un drapeau-vrai, pas de drapeau-faux. Ensuite, si une position est ouverte sur votre signal, insérez un drapeau, par ex :


Autrement dit, si je comprends bien, vous proposez d'utiliser plusieurs magies correspondant à chaque type de signal ?
 
Pouvez-vous me dire pourquoi l'optimiseur peut compter mais ne pas produire de résultats ? Il n'y a pas d'erreurs dans le journal. L'algorithme génétique est désactivé. L'intervalle d'optimisation est de 5 jours, le mode est tous les ticks, la période est quelconque m1, m5, m15, m30. Et ce n'est qu'à partir de la période H1 que les résultats apparaissent.
 
Desead:
Pouvez-vous me dire pourquoi l'optimiseur peut compter mais ne pas produire de résultats ? Il n'y a pas d'erreurs dans le journal. L'algorithme génétique est désactivé. L'intervalle d'optimisation est de 5 jours, le mode est tous les ticks, la période est quelconque m1, m5, m15, m30. Les résultats n'apparaissent qu'à partir de la période H1.

Pour les périodes plus courtes que H1, l'algorithme échoue.
 
Vinin:

Sur les périodes plus courtes que H1, il s'effondre.
Exactement ! Il y a même une case à cocher pour cela, comment se fait-il que je ne l'ai pas su ). Merci.
 
Desead:
Pouvez-vous me dire pourquoi l'optimiseur peut compter mais ne pas produire de résultats ? Il n'y a pas d'erreurs dans le journal. L'algorithme génétique est désactivé. L'intervalle d'optimisation est de 5 jours, le mode est tous les ticks, la période est quelconque m1, m5, m15, m30. Et les résultats n'apparaissent qu'à partir de la période H1.

Si les gains sont négatifs avec cette combinaison de paramètres, les résultats ne sont pas présentés. En général, 5 jours est une période très courte, fixez au moins un mois.
 

Bon après-midi. Pouvez-vous me conseiller s'il vous plaît, j'ai besoin que l'indicateur ne soit pas affiché sur tout l'historique, mais seulement sur le bord sur un nombre donné de barres. Code :

//+------------------------------------------------------------------+
//| Индикатор арбитражной ситуации для спреда, состоящего            |
//| из 4-х инструментов                                             |
//| Copyright © 2010, leonid553, Son_Of_Earth                        |
//+------------------------------------------------------------------+
#property copyright "leonid553 & Son_Of_Earth"
#property link      "leonid553@ya.ru,sonofearth.ua@gmail.com"

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Yellow
#property indicator_color4 Black
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 1
#property indicator_width4 1


extern string Symbol1.Name = "EURUSD";     // Название инструмента 1
extern bool   Symbol1.Reverse = false;     
extern string Symbol2.Name = "";           // Название инструмента 2
extern bool   Symbol2.Reverse = false;     
extern string Symbol3.Name = "";           // Название инструмента 3
extern bool   Symbol3.Reverse = false;     
extern string Symbol4.Name = "";           // Название инструмента 4
extern bool   Symbol4.Reverse = false;     

extern string  ___MISC___ = " == Прочие настройки ==========";




extern string  ___MA___   = " == Параметры МА ценовых линий ====";

extern int MA.Slow = 50;                   // Период медленной МА


// Буферы для отображения данных
double Buf1[];    // Первый инструмент
double Buf2[];    // Второй инструмент
double Buf3[];    // Третий инструмент
double Buf4[];    // Четрертый инструмент



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
  // Делаем нечувствительными к регистру ввода наименования инструментов
  Symbol1.Name=StringUpper(Symbol1.Name);
  Symbol2.Name=StringUpper(Symbol2.Name);
  Symbol3.Name=StringUpper(Symbol3.Name);
  Symbol4.Name=StringUpper(Symbol4.Name);

  // Определяем балансовые коэффициенты каждого инструмента
  kVol1=1;
  kVol2=1;
  kVol3=1;
  kVol4=1;
  
  // Задаем имена графическим объектам
  oSymb1=Symbol1.Name;
  oSymb2=Symbol2.Name;
  oSymb3=Symbol3.Name;
  oSymb4=Symbol4.Name;


  // Формируем свойства графиков индикатора
  IndicatorBuffers(4);
  
  SetIndexStyle(0,DRAW_LINE);
  SetIndexBuffer(0,Buf1);
  SetIndexLabel(0, Symbol1.Name); 

  SetIndexStyle(1,DRAW_LINE);
  SetIndexBuffer(1,Buf2);
  SetIndexLabel(1,Symbol2.Name); 

  SetIndexStyle(2,DRAW_LINE);
  SetIndexBuffer(2,Buf3);
  SetIndexLabel(2,Symbol3.Name);

  SetIndexStyle(3,DRAW_LINE);
  SetIndexBuffer(3,Buf4);
  SetIndexLabel(3,Symbol4.Name);

  soundCount=0; // Максимально к-во повторов звукового сигнала

  return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()  {
  // Удаляем все графические объекты
  DeleteObject(oSymb1);
  DeleteObject(oSymb2); 
  DeleteObject(oSymb3);
  DeleteObject(oSymb4);

  return(0);  
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
  // Подсчет количества баров для построения индикатора
  int limit; int counted_bars=IndicatorCounted();
  if(counted_bars<0) return(-1);
  if(counted_bars>0) counted_bars--; 
  limit=Bars-counted_bars;
  
  // Определяем параметры окна индикатора
  wndNum=WindowFind(WindowExpertName());
  wndName=WindowExpertName()+wndNum; 


  
 
  //------------------------------------------------------------------ 
  // Отрисовка ценовых линий: рисуем и синхронизируем по наличию баров
  for(int i=0; i<limit; i++) { 
    // Первый ценовой график
    Buf1[i]= iClose(Symbol1.Name,0,i);
    // Второй ценовой график
    Buf2[i]= iClose(Symbol2.Name,0,i);
    // Третий ценовой график
    Buf3[i]= iClose(Symbol3.Name,0,i);
    // Четвертый ценовой график
    Buf4[i]= iClose(Symbol4.Name,0,i);

 
  } // Конец блока отрисовки ценовых линий

Et aussi, comment puis-je connaître le prix d'un instrument pour un nombre donné de barres en arrière ?
Raison: