[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 372

 
tara:


1. formater le code sans sauvegarder les lignes (escalier). - pouvez-vous donner un petit exemple ?


tara,Chiripaha-Merci les gars, ça a marché beaucoup plus vite !
 

J'ai écrit le premier indicateur. Tout compte correctement, seul problème avec l'affichage sur la dernière barre et avec la mise à jour à l'arrivée d'une nouvelle barre (elle ne se met pas à jour).
Voici la photo :

Quel pourrait être le problème ?

Dossiers :
 

conseiller s'il vous plaît, si sur un nouveau (pas givré) netbookAsus Eee PC 1025C (blanc)Intel ® Atom ™ 1600 fréquence, gig RAM win 7 Starter mettre 10 terminaux MT4, sans téléchargement de citations historiques, avec un deux paires de devises, sans indicateurs et 1 conseiller de négociation pour chaque terminal - netbook les tiendra simultanément ?

Et s'il y a 20 МТ4 ?

Je ne pense pas que j'aurai jamais besoin de 30 :))

ou dois-je acheter un ordinateur portable plus puissant ?

 

Fox_RM:

1. Formater le code sans sauvegarder les lignes (escalier). - Puis-je avoir un petit exemple ?
Ici, un exemple - votre code dans un escalier. J'ai dû d'abord le former moi-même pour trouver ce que je vous ai dit. Sinon, il m'a été difficile de le trouver.
int start()
  {
  
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current;
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

   for(int i=0; i<limit; i++)   // -------------------------------------------- Основной цикл
     {
     
      //---- Awesom + Volumes
     
      AOBuffer3[i]=iMA(NULL,0,EMA,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,SlowEMA3,0,MODE_SMA,PRICE_MEDIAN,i);
      
      if (Show_Volume==true)
       {
        double nSum = Volume[i]*Point*coaf;
        if (AOBuffer3[i]<=0) ExtMapBuffer1[i] =  nSum;
        if (AOBuffer3[i]>0)  ExtMapBuffer1[i] = -nSum;
      
        double Vol_Arr[];
        if (AOBuffer3[i]<=0) Vol_Arr[i] =  Volume[i]*Point*coaf;
        if (AOBuffer3[i]>0)  Vol_Arr[i] = -Volume[i]*Point*coaf;
       }

//----------------------------- Блок поиска значений -----------------------------------------//
 
      //-- Поиск Low & Time & Min_AO 
      if (AOBuffer3[i] < 0)
       {
        price_up_end = 0; 
        AO_up        = 0;  
        price_dn_start = Low[i]; 
        if (price_dn_end == 0) price_dn_end = Low[i]; 
        if (price_dn_start <= price_dn_end)
         {
          price_dn_end = price_dn_start; 
          time_dn      = Time[i]; 
          shift_dn     = iBarShift(NULL, 0, time_dn);
         }
        if (AOBuffer3[i] <= AO_dn)
         {
          AO_dn = AOBuffer3[i]*0.2+AOBuffer3[i]; 
          AO_time_dn = Time[i];
         }
      
        dn_koaf = dn_koaf_round;
        up_koaf_round++;
       }   
  
      //-- Поиск High & Time & Max_AO  
      if (AOBuffer3[i] > 0)
       {
        price_dn_end = 0; AO_dn = 0;  
        price_up_start = High[i];
        
        if (price_up_start >= price_up_end) 
         {
          price_up_end = price_up_start; 
          time_up      = Time[i]; 
          shift_up     = iBarShift(NULL, 0, time_up);
         }
        if (AOBuffer3[i] >= AO_up) 
         {
          AO_up = AOBuffer3[i]*0.2+AOBuffer3[i]; 
          AO_time_up = Time[i];
         }
      
        up_koaf = up_koaf_round;
        dn_koaf_round++;
       }   
//--------------------------------- Выставляем значения --------------------------------------------//
    
      Vol_AO_up = 0; Vol_AO_dn = 0;
      if (shift_up > shift_dn)
       {
        for (int dn_br = shift_dn; dn_br <= shift_up; dn_br++)            //-------------- Перебор значений внутри основного цикла
          {
           Vol_AO_up += Volume[dn_br]; 
           SetText("Awesome_super_volumes"+up_koaf, DoubleToStr(Vol_AO_up,0), AO_time_dn, AO_dn, Blue);
          }   
       }
 
      if (shift_dn > shift_up)
       {
        for (int up_br = shift_up; up_br <= shift_dn; up_br++)            //-------------- Еще один перебор значений внутри основного цикла
          {
           Vol_AO_dn += Volume[up_br]; 
           SetText("Awesome_super_volumes"+dn_koaf, DoubleToStr(Vol_AO_dn,0), AO_time_up, AO_up, Red);
          }   
       }
     } 
           
//---- done

   return(0);
  }
 
Chiripaha:
Ici, un exemple est le code de votre escalier. Pour trouver ce que je vous ai dit, j'ai d'abord dû le formuler moi-même. Sinon, il m'a été difficile de le trouver.


OK ! Merci !
 
lottamer:

conseiller s'il vous plaît, si sur un nouveau (pas givré) netbookAsus Eee PC 1025C (blanc)Intel ® Atom ™ 1600 fréquence, gig RAM win 7 Starter mettre 10 terminaux MT4, sans téléchargement de citations historiques, avec un deux paires de devises, sans indicateurs et 1 conseiller de négociation pour chaque terminal - netbook les tiendra simultanément ?

Et s'il y a 20 МТ4 ?

Je ne pense pas que j'aurai un jour besoin de 30 d'entre eux :))

ou dois-je acheter un ordinateur portable plus puissant ?

Le CPU, très probablement, suffira. Mais la mémoire pour 30 ou plus... Encore une fois, cela dépend de ce que vous allez faire avec ces bornes. Si, comme vous l'avez décrit, 2-3 paires de devises, juste pour faire du commerce - vous avez besoin de plus de mémoire à raison de 100-150 mb pour 1 terminal (il me faut ainsi) et allez-y. Mais, lorsque vous en avez plus de 5, vous vous lassez de passer de l'un à l'autre sur votre ordinateur portable. J'en obtiens 7, mais sur 4 moniteurs (pas des moniteurs d'ordinateurs portables, c'est-à-dire pas des petits). Votre giga de RAM est seulement suffisant pour 7. : )) Ceci doit être pris au pied de la lettre. Et si cela enlève aussi à ce souvenir et à cette vidéo. Un ordinateur portable est destiné à 1-2 mt4. Pour faire quelque chose rapidement. (imho)
Un écran de 10 pouces va vous "casser" les yeux. Mon ami utilise votre modèle comme substitut. Et recommande fortement un minimum de 13-14 pouces. Et la mémoire de 2 Go maximum - ce n'est pas suffisant si vous allez vraiment mettre 20 pièces, et probablement encore utiliser autre chose - au moins l'Internet... La mémoire vidéo est prise sur la mémoire totale. - Jusqu'à 4 Go, c'est mieux.
 
sv.:

J'ai écrit le premier indicateur. Tout compte correctement, seul problème avec l'affichage sur la dernière barre et avec la mise à jour à l'arrivée d'une nouvelle barre (elle ne se met pas à jour).
Voici la photo :

Quel pourrait être le problème ?

Votre indicateur ne s'affiche pas du tout... Ce n'est pas aujourd'hui - j'essaierai plus tard, si quelqu'un de plus expérimenté ne me le dit pas d'ici là.
 
Chiripaha:
Et votre indicateur ne s'affiche pas du tout... Ce n'est pas pour aujourd'hui - je m'en occuperai plus tard, si quelqu'un de plus expérimenté ne le suggère pas d'ici là.


C'est étrange.
J'ai vérifié, c'est affiché.
J'ai vérifié. Vous devez peut-être réduire le graphique verticalement, si le canal est large, vous ne le verrez pas en zoomant.
 
Chiripaha:
Le processeur est probablement suffisant. Mais 30 ou plus de mémoire. Encore une fois, cela dépend de ce que vous allez faire avec ces bornes. Si, comme vous l'avez décrit, 2-3 paires de devises, il suffit de faire du commerce - installez plus de mémoire à raison de 100-150 mb pour 1 terminal (cela me prend autant) et allez-y. Mais, lorsque vous en avez plus de 5, vous vous lassez de passer de l'un à l'autre sur votre ordinateur portable. J'en obtiens 7, mais sur 4 moniteurs (pas des moniteurs d'ordinateurs portables, c'est-à-dire pas des petits). Votre giga de RAM est seulement suffisant pour 7. : )) Ceci doit être pris au pied de la lettre. Et si cela enlève aussi à ce souvenir et à cette vidéo. Un ordinateur portable est destiné à 1-2 mt4. Pour faire quelque chose rapidement. (imho)
écran de 10 pouces - vous allez vous "casser les yeux" dessus. Mon ami utilise votre modèle comme substitut, mais il s'agit de XP x86. Et recommande fortement un minimum de 13-14 pouces. Et la mémoire est de 2 Go maximum - pas assez si vous mettez vraiment 20 pièces, et probablement parce que vous utiliserez autre chose - au moins Internet... La mémoire vidéo est prise sur la mémoire totale. - Jusqu'à 4 Go, c'est mieux.

L'idée est la suivante : j'ai besoin d'un serveur dédié pour que mes EA puissent y tourner 24 heures sur 24 et ne pas me distraire, moi ou mon ordinateur principal. Il est logique d'acheter un VPS, mais il y a des problèmes de sécurité, et cela coûte quand même de l'argent - au moins 400 roubles par mois. C'est une excellente idée.

Mon appareil n'a qu'une chose à faire : il a un MT4, aussi léger que possible, sans indicateurs, avec un seul conseiller expert qui fonctionne. Sur mon ordinateur, un exemple d'un tel MT4 prend 30 mètres de RAM. Donc, logiquement, 10 d'entre eux occuperont 300 mètres.

Pour 10, cela devrait être suffisant. Mais en prenant en compte WIN7 pour 20 Мt4 600 mètres de mémoire libre peuvent ne pas être suffisants.... Je suppose que je vais devoir chercher un netbook avec 2 Go de RAM.

Mon netbook ne fait rien d'autre. Pas d'Internet, pas de programmes, RIEN ! En fait, je l'ai allumé lundi et je l'ai oublié. Le vendredi soir, vous l'éteignez. 11 heures d'autonomie de la batterie permettront de travailler en cas d'urgence...+modem GPRS...

 
sv.:

étrange.
vérifié, il montre tout.
peut-être que le graphique doit être compressé verticalement, si le canal est large, il peut ne pas être visible en zoomant.

Quelque chose est apparu après avoir ajusté les paramètres. Seule une plage très étroite correspond aux conditions de l'EA. Un pas à gauche, un pas à droite - rien. Et ces conditions ne correspondent pas à la définition d'un appartement. Je reçois un plat à 100 points dans 4 chiffres. Et tout est montré avec précision.

//+------------------------------------------------------------------+
//|                                           ind_FletChannel_07.mq4 |
//|                                            Copyright © 2013, sv. |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013, sv."
#property link      "7009731@mail.ru"
//----
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Blue
#property indicator_color4 Red
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
//----
extern int    Distans     = 20;      // Количество баров для определения канала
extern int    Channel     = 1000;     // Размер в пипсах канала
extern int    ZoneUnSence = 80;      // Размер выхода за границы канала, в пипсах
extern int    PauseBar    = 1;       // А это по ходу дела - смещение баров,т.е. где нужно считать.
//----
double Up[];
double Down[];
double UpSupport[];
double DownResistance[];

double pnt;
double high,   low;
double high_1 = 0,
       low_1  = 0;
bool   up_chanel, dn_chanel, FirstChanel;
bool   DrawChannel = false;
int    limit,  History=0;        // 0- все бары
int    n=0, n_up=0, n_dn=0;
int    Bar;

//+------------------------------------------------------------------+
int init() 
  {
//----
 //  pnt=Point;
 //  if(Digits==5 || Digits==3) pnt*=10;
   
 //  IndicatorDigits(Digits);
 //  IndicatorBuffers(4);
//----      
   SetIndexBuffer(0,Up);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexEmptyValue(0,0.0);

   SetIndexBuffer(1,Down);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexEmptyValue(1,0.0);
   
   SetIndexBuffer(2,UpSupport);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexEmptyValue(2,0.0);

   SetIndexBuffer(3,DownResistance);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexEmptyValue(3,0.0);
//----      
   return(0);
  }
//+------------------------------------------------------------------+
int start() 
  { 
   limit = Bars-IndicatorCounted()-1; 
   if(limit > 1)                    limit = Bars-1;
   if(History!=0 && limit>History)  limit = History-1;                   // кол-во пересчетов по истории

   Bar = limit;
   
   // ------------------------------------------------------------------
   for(int i=limit; i>=0; i--) 
     {
      if(i < Bar-PauseBar)
       {
        // если не активна отрисовка канала, ищем канал.
        if(DrawChannel==false)
         {
          // отределяется минимум и максимум на заданном интервале Distans
          double low  = iLow (NULL,0,iLowest (NULL,0,MODE_LOW, Distans,i));
          double high = iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,Distans,i));
          
          // и если разность между максимумом и минимумом меньше заданной ширины канала Channel
          if( (high-low) < Channel*Point )  DrawChannel=true;
         }  
       }
      // ------------------------------------------------------------------
      if(DrawChannel)
       {  
        // определяются границы канала как максимум и минимум на интервале Distans
        
        // отрисовка первоначального отправного канала
        if(FirstChanel) { Up[i]   = high;   Down[i] = low;  }
        if(up_chanel)   { Up[i]   = high;   UpSupport[i]      = high - Channel*Point; }   // отрисовка канала тренда вверх
        if(dn_chanel)   { Down[i] = low;    DownResistance[i] = low  + Channel*Point; }   // отрисовка канала тренда вниз
        
        // определяются границы отправного первоначального канала
        // ------------------------------------------------------------------
        if( high_1==0 && low_1==0 )    
         {
          FirstChanel=true;  high_1=high;  low_1=low; 
         }
        else                     // если первоначальный отправной канал уже определён и отрисован
         { 
          if(high > high_1)      // если верхняя граница нового канала выше верхней границы предыдущего канала, то это восходящий тренд
           {
            up_chanel=true;      // активируем флаг отрисовки канала тренда вверх
            high_1 = high;       // и перезаписываем значение
            low_1  = low;
           }
        
          if(low < low_1)        // если нижняя граница нового канала ниже нижней границы предыдущего канала, то это нисходящий тренд
           {
            dn_chanel=true;      // активируем флаг отрисовки канала тренда вниз
            high_1=high;         // и перезаписываем значение
            low_1=low;
           }
         }  
        // ------------------------------------------------------------------
        
        if(Up[i]!=0 && UpSupport[i]!=0)        // пока условие выполняется, границы канала не изменяются
         {
          if ((Close[i] > Up[i]        + ZoneUnSence*Point) ||
              (Close[i] < UpSupport[i] - ZoneUnSence*Point))
           {
            // если условие не выполняется, флаг сбрасывается - Т.е. если не в границах канала
            up_chanel=false;
            dn_chanel=false;
            FirstChanel=false; 
            DrawChannel=false;
           }
         } 
        // ------------------------------------------------------------------
        if(Down[i]!=0 && DownResistance[i]!=0)
         {
          if ((Close[i] > DownResistance[i]+ZoneUnSence*Point) ||
              (Close[i] < Down[i]-ZoneUnSence*Point))
           {
            // если условие не выполняется, флаг сбрасывается - Т.е. если не в границах канала
            up_chanel=false;
            dn_chanel=false;
            FirstChanel=false;
            DrawChannel=false;
           }
         }
        if(Up[i]!=0 && Down[i]!=0)
         {
          if ((Close[i] > Up[i]   + ZoneUnSence*Point) ||
              (Close[i] < Down[i] - ZoneUnSence*Point))
           {
            // если условие не выполняется, флаг сбрасывается
            up_chanel=false;
            dn_chanel=false;
            FirstChanel=false; 
            DrawChannel=false;
           }
         }    
        Bar = i; 
       }    
     } 
   // Конец перебора
   // ------------------------------------------------------------------
   return(0);
  }
//+------------------------------------------------------------------+

Je l'ai un peu modifié - j'ai essayé de le comprendre. Mais ça marche comme ça. J'ai utilisé H1. C'est dommage que je n'aie pas pu le montrer sur d'autres TF à cause de la sélection des paramètres. Par exemple, sur 5 et 15 minutes. - On pourrait suggérer qu'il serait possible de réaliser un flat en utilisant ces TF. (Si quelqu'un avec un point de vue plus expérimenté donne des idées ou signale les erreurs).

Je n'ai pas remarqué de problèmes de rendu.

Dans votre indicateur, ainsi que dans le cas de la majorité, ce qui est dessiné une fois est ce qui est normal pour le modèle de rédaction de l'indicateur. Mais ce qui se passe actuellement (comme vous l'avez dit - sur la barre actuelle) ne correspond pas aux conditions de cet indicateur. Il n'y a donc aucun problème au niveau du bar actuel.

Raison: