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

 
splxgf писал(а) >>

Probablement quelque chose comme ça, car les boucles infinies prennent beaucoup de temps sur le matériel moderne.

:)

 
Rita >>:

Добрый день.

В индикатоте есть ф-я IndicatorShortName("iC_C_mod, ..... ");

Мне, однако, нужно, кроме этой надписи, - чтобя я могла вставить коммент с динамично изменяющейся переменной в окно индикатора.

Типа ф-и Comment();

Но только, именно, в окно индикатора, а вовсе не на сам график.

Пож. подскажите ?


#property copyright "Copyright © 2009, :-)"
#property link      "----"

#property indicator_separate_window

int start()
{
   string info = "Bid= "+DoubleToStr(Bid,5);
   IndicatorShortName( info);
//----
   return(0);
}

pour que la sortie se fasse dans la fenêtre que vous voulez

 
Rita >>:

Добрый день.

В индикатоте есть ф-я IndicatorShortName("iC_C_mod, ..... ");

Мне, однако, нужно, кроме этой надписи, - чтобя я могла вставить коммент с динамично изменяющейся переменной в окно индикатора.

Типа ф-и Comment();

Но только, именно, в окно индикатора, а вовсе не на сам график.

Пож. подскажите ?


Vous pouvez créer une étiquette et modifier le texte


   string ID  = "MyLabelName";


   if(ObjectCreate( ID, OBJ_LABEL, 0, 20, 20))
     {
       ObjectSet( ID, OBJPROP_XDISTANCE, 35);
       ObjectSet( ID, OBJPROP_YDISTANCE, 35);
     }
 
   //отображение на экране значения переменной txt 
   string txt = "Belissimo";
   ObjectSetText( ID, txt , 18, "Arial Black", Green);
Le code est peut-être faux, mais il fonctionne.
 
Ne le laissez pas sans surveillance
 
Merci, xeon et splxgf!
 
Mes amis, bon après-midi.

Il sera intéressant de vous écouter sur la question suivante :

Il existe une opinion selon laquelle la cotation d'une paire de devises est influencée par de nombreux autres instruments financiers :
mouvement des principaux indices boursiers, contrats à terme, options, etc.


1) Pensez-vous qu'il est possible de retracer cette influence
(et donc à utiliser de manière constructive dans une stratégie de trading) ? ???

2) Avez-vous remarqué des corrélations persistantes entre les paires de devises concernées et les cours d'autres instruments financiers ?

3) Avez-vous utilisé des indicateurs pour démontrer ces corrélations ?


(J'attends vos commentaires dans la branche thématique de ce forum portant le même nom : https://forum.mql4.com/ru/28930 )

 

splxgf писал

void CheckSell()
{
if((NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
Sell();
}

Probablement quelque chose comme ça, car les boucles infinies prennent beaucoup de temps sur le matériel moderne.


Mais alors le programme va juste vérifier la condition et si elle est remplie, il va la vendre. Et s'il ne le fait pas, que fera-t-il ? Il est censé attendre que la condition soit remplie dans ce même fragment de code.



Vinin a écrit


Pourquoi avez-vous fait une boucle ? S'il n'y a pas de condition, le programme doit simplement sortir et ne pas attendre l'apparition du signal.

C'est pourquoi j'ai fait la boucle, car c'est dans ce fragment de code que le programme doit attendre l'apparition de la condition. Vous ne pouvez pas revenir au début de la boucle. Quelle est la manière correcte d'implémenter l'attente d'une condition ?


Et voici ma conception :

void CheckSell()
{
while(!(NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
{
Sleep(5);
RefreshRates();
}
Sell();
}


- Est-ce qu'il fonctionne et ne fait que suspendre le testeur ? Ou bien cela ne fonctionne pas du tout ? Je souhaite vraiment comprendre comment attendre correctement qu'une condition soit remplie sans sortir de la fonction donnée.


Merci pour les réponses !

 
Jahspear >>:


Но ведь тогда программа просто проверит условие и если оно выполняется, продаст. А если не выполняется, что она будет делать? По задумке, должна ждать выполнения условия именно в этом месте кода.


Вот поэтому и сделал цикл, что именно в этом месте кода программа должна ждать выполнения условия. Выйти в начало нельзя. Как правильно реализовать цикл ожидания условия?


- она рабочая и просто тестер вешает? Или не работает в принципе? Очень хочется понять, как правильно ожидать выполнения условия, не выходя из заданной функции.

Le programme a toutes les chances de fonctionner, et il est faux d'attendre la condition sans sortir de la fonction, au moins le testeur ne donnera pas un nouveau tick tant que la procédure n'aura pas été exécutée.

Si la condition n'est pas remplie, vous devez interrompre le programme et donner le contrôle au testeur. Les programmes étaient autrefois linéaires et se mettaient donc en boucle et attendaient des signaux venant d'en haut. Maintenant le programme est piloté par les événements, quand un événement se produit, par exemple, un nouveau tick et le gestionnaire de cet événement est l'appel start() après que tout le travail nécessaire au traitement d'un nouveau tick soit terminé, la fonction doit se terminer, au lieu d'être un distributeur.

Il est correct de vérifier la condition dans le start(), la condition est arrivée, faites votre travail, si non, terminez votre travail et attendez le prochain tick. Nous adaptons déjà notre logique à cela.

 

Il y a aussi une question.

L'indicateur affiche les lignes MA de deux paires de devises dans une fenêtre séparée. Cela fonctionne bien.

Mais quand j'insère une condition dans le code :

"Si une barre est manquée sur l'un des symboles, alors sur le deuxième symbole - cette barre actuelle est sautée (non prise en compte)", comme ceci :

int start()
  {
     int limit;
     int counted_bars=IndicatorCounted();
  //---- проверка на возможные ошибки
     if( counted_bars<0) return(-1);
  //---- последний посчитанный бар будет пересчитан
     if( counted_bars>0) counted_bars-=10;
     limit=Bars- counted_bars;
  //---- основной цикл
ВОТ Я СТАВЛЮ ЭТО УСЛОВИЕ  :
    for( k = 0; k < iBars( Symbol_1,Period()); k++)   {  
    int symb2Shift = iBarShift( Symbol_2,Period(),iTime( Symbol_1,Period(), k),true);
    if( symb2Shift != -1)                            { 
//---------------------------------
    for( k=0; k< limit; k++)
       {
       Symbol1[ k]=     (iMA( Symbol_1,..... k)  ;
       Symbol2[ k]=     (iMA( Symbol_2,..... k)  ;           
       } 
                        }
                       }
//----
    return(0);
  }

Ensuite, mt4 se suspend pendant une minute et demie à deux minutes. Ensuite, l'indicateur commence à fonctionner, mais il utilise 35-45% de la RAM.

Quelle peut en être la raison, veuillez me conseiller ?

 

Bonjour !

Pouvez-vous me dire comment écrire un indicateur simple qui mettrait en évidence une certaine barre (qui devrait être définie dans les options), par exemple à 12.30 ligne verticale et signerait les jours de la semaine sur le graphique (disons quelque part au-dessus de l'hémisphère de chaque jour) ?

Merci !

Raison: