Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 153

 
EVladMih:

Artemis, vous avez commencé dès le deuxième post à expliquer à l'homme qu'il combinait le blanc avec le chaud, et la seule chose que vous avez expliquée était la partie de la question que personne ne vous a posée. Il se trouve que je sais combien de code cet homme a écrit, et c'est VOUS qui n'êtes pas entré dans le vif du sujet, pas lui. D'ailleurs, ce code, il ne l'écrit pas pour lui-même, mais pour les gens.

Donc, si vous ne voulez ou ne pouvez pas aider, au moins n'intervenez pas et n'accusez pas les autres de vos péchés.

Les hommes qui s'y connaissent mieux, s'il vous plaît, aidez satorifx. Il doit vraiment mélanger le blanc avec le chaud, mais ce n'est pas sa faute... Vous connaissez les spécificités de MT4, où les pièces d'un même opéra sont chantées sur des scènes différentes (systèmes de coordonnées différents).

Tout d'abord. Tout d'abord, je ne vous parle pas sur une base de prénom. Deuxièmement, apprenez à lire correctement le surnom d'une personne, car vous ne pouvez pas l'utiliser. Troisièmement, je vais vous donner un indice sur la façon d'identifier le croisement avec la ligne de tendance. Dans l'exemple écrit spécialement pour les débutants, la ligne de tendance elle-même n'est pas utilisée pour les calculs. C'est seulement un indice de la direction à prendre. Cependant, il existe de nombreuses méthodes pour résoudre ce problème. Il n'est pas nécessaire de se fixer sur le problème de l'incompatibilité des coordonnées, mais de décider comment s'en sortir avec les données d'entrée disponibles.

И... ce... Je peux écrire ce dont vous n'avez pas encore rêvé...

 

EVladMih:,

mais vous ne devriez probablement pas diviser les gens en bains sur la base de local/non-local.

Il ne s'agit pas de "local/non-local" d'une personne en particulier. Il s'agit de la façon dont la personne pose la question. Si j'ai mal compris sa question, cela ne lui donne pas le droit d'être impoli. J'ai honnêtement essayé de l'aider. Et je pense que s'il m'avait dit après ma réponse que ce n'est pas ce qu'il voulait et demandait, et qu'il m'avait expliqué la tâche spécifique qui lui avait été confiée, nous aurions trouvé un moyen de tout faire rapidement et efficacement.

Maintenant tu dis qu'il ne peut pas identifier le croisement avec la ligne de tendance. Mais ça te fait juste sourire. Ou peut-être que j'ai encore tout faux et que je mérite une autre grossièreté ? La simple fonction ObjectGetValueByShift() renvoie le prix de la ligne de tendance sur une certaine barre. Comparez donc un prix avec un autre.

 
artmedia70:
D'après ce que j'ai compris, il veut que l'objet soit positionné verticalement et non décalé horizontalement au prix le plus bas des barres qui sont affichées à l'écran. Je lui ai montré la première partie de sa question - comment trouver le prix minimal sur le graphique. Il n'a pas compris et m'a aboyé dessus. Laissez-le maintenant chercher par lui-même comment faire ce dont il a besoin sans croiser deux systèmes de coordonnées. C'est facile. Peut-être que quelqu'un d'autre le fera pour lui, mais je prends congé. Je n'aime pas les rustres et les pique-assiettes. Il n'a même pas pris la peine de se pencher sur la question et d'écrire lui-même quelque chose en code.

artmedia70, je suis une personne non conflictuelle et si j'ai dit quelque chose de mal, je m'excuse et je demande que cela ne soit pas considéré comme impoli.

Je ne sais vraiment pas comment résoudre ce problème.

J'ai croisé 2 systèmes de coordonnées jusqu'à présent d'une manière simple : j'ai créé une étiquette et je l'ai placée manuellement sur le prix minimum - j'ai donc une étiquette de coordonnées Y et elle correspond au prix minimum, que j'obtiens avec la fonction WindowPriceMin() . Mais c'est manuel, j'aimerais pouvoir le suivre et le corriger de manière programmatique.

S'il existe réellement une solution à ce problème, et une solution simple de surcroît, je vous en serais reconnaissant.


 
artmedia70:

Maintenant, vous dites qu'il ne peut pas détecter un croisement avec la ligne de tendance. Mais ça me fait juste sourire. Ou ai-je encore tout compris de travers et mérité une autre grossièreté ? La simple fonction ObjectGetValueByShift() renvoie le prix de la ligne de tendance sur une certaine barre. Comparez donc un prix avec un autre.


N'écoutez pas EVladMih - il n'a aucun sens .
Je sais très bien comment trouver la distance par rapport à la tendance en matière de prix. La question est différente.

J'utilise des marqueurs dans mon indicateur qui sont accrochés en permanence en haut de l'écran. C'est après avoir déplacé un marqueur que l'on doit déterminer la distance entre le marqueur et la ligne de tendance, mais les marques ont des coordonnées (x,y) à l'écran, alors que ObjectGetValueByShift travaille avec le prix, c'est-à-dire dans un autre système de coordonnées. C'est de là que vient toute cette agitation.

Je ne peux pas utiliser l'objet OBJ_TEXT avec des coordonnées de prix, car je veux qu'il reste à la même place, comme le font les étiquettes ( objet OBJ_LABEL), si je déplace le graphique, au lieu des balises.

 
satorifx:

N'écoutez pas EVladMih - il écrit n'importe quoi .
Je sais très bien comment trouver la distance par rapport à la tendance en matière de prix. La question est différente.

Dans mon indicateur, j'utilise des marqueurs qui planent constamment en haut de l'écran. C'est après le déplacement d'un marqueur que la distance entre le marqueur et la ligne de tendance doit être déterminée, mais les marques ont des coordonnées (x,y) sur l'écran, alors que ObjectGetValueByShift travaille avec le prix, c'est-à-dire dans un autre système de coordonnées. C'est de là que vient toute cette agitation.

Je tiens à dire à l'avance que je ne peux pas utiliser l'objet OBJ_TEXT avec des coordonnées de prix à la place des étiquettes, parce que je veux qu'elles (les étiquettes) ne soient pas déplacées vers le prix si je déplace le graphique, mais qu'elles restent à la même place, comme le font les étiquettes ( objet OBJ_LABEL).

Pour éviter d'avoir à gérer les recalculs, utilisez ARROW avec une coordonnée x constante = barre particulière au lieu des étiquettes. Vous pouvez enregistrer et modifier la barre dans la description de l'objet. Dès que l'objet est déplacé, écrivez une nouvelle coordonnée x égale à la nouvelle barre dans sa description. Il n'y aura alors aucun problème de recherche de prix. Et localisez toujours l'objet par sa description sur l'axe horizontal. L'axe vertical est le prix. Il s'agit d'une option moins coûteuse. Et l'objet sera toujours sur l'axe des x au même endroit, correspondant à un numéro de barre particulier.

ZS "...mes excuses et s'il vous plaît ne le prenez pas comme un rustre..." C'est bon, laissez tomber... ;)

 

J'ai inventé un indicateur. Divise une paire par une autre, pour obtenir des instruments non inclus dans le terminal. Mais maintenant, il charge le terminal et recalcule à chaque tick. Je l'ai entré comme dans mon conseiller expert

si (Time[0]<=PrevTime) return(0) ;

PrevTime=Time[0] ;

Maintenant, il ne tire que sur une nouvelle bougie. S'il vous plaît, dites-moi comment faire. Texte de l'indicateur.

P/S/ Au fait. Toutes les paires sont présentées normalement. Je veux voir Appl à Ruble. Je ne veux pas le voir.

#propriété indicator_separate_window
#property indicator_buffers 1
#propriété indicator_color1 Lime
//--- paramètres d'entrée
extern string Paar_1="EURUSD" ; //Symbole souhaité pour la comparaison
extern string Paar_2="GBPUSD" ; // instrument souhaitable pour la comparaison
extern bool Mirroring_Paar_2=false ;
//--- tampons
double ExtMapBuffer1[] ;
statique int PrevTime=0 ;
int start=1 ;


//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int init()
{
//---- indicateurs
string short_name=Paar_1 ;
SetIndexStyle(0,DRAW_LINE) ;
SetIndexBuffer(0,ExtMapBuffer1) ;
IndicatorShortName(nom_court) ;
SetIndexLabel(0,short_name) ;
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| Fonction personnalisée de désinitialisation de l'indicateur |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| Fonction d'itération de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int start()
{
si (Time[0]<=PrevTime && start==1) return(0) ;
PrevTime=Time[0] ;
int i, counted_bars=IndicatorCounted() ;
i=bars_comptés-1 ;
//----
while(i>=0){
double Compare1=iClose(Paar_1,0,iBarShift(Paar_1,0,iTime(Paar_1,0,i),FALSE)) ;
double Compare2=iClose(Paar_2,0,iBarShift(Paar_1,0,iTime(Paar_1,0,i),FALSE)) ;
if(Compare2!=0 && Compare1!=0) double Compare=Compare1/Compare2 ;
si(Mirroring_Paar_2==1) Compare=1/Compare ;

ExtMapBuffer1[i]=Compare ;
RefreshRates() ;
i-- ;
}
//----
start=0 ;
retour(0) ;
}
//+------------------------------------------------------------------+y

 
Bonjour
Aide ! Comment faire un délai entre les ouvertures de commande, Sleep 3000 ?
int start() {
string ls_0 ;
int li_8 ;
bool li_12 ;
int li_20 ;
int li_24 ;
double ld_28 ;
int li_36 ;
int li_40 ;
string ls_48 ;
string ls_56 ;
string ls_64 ;
double ld_76 ;
int li_84 ;
Et voici comment vous devez coller.

Juste au cas où la chouette elle-même

Autre question, cette chouette est prévue pour sept couples à la fois, j'ai précisément besoin de faire une pause entre les ouvertures de commande ! Par exemple, aujourd'hui, 10 commandes ont été ouvertes simultanément sur l'actualité et j'en ai besoin avec un délai !

Merci !

/* Décompilé supprimé - Vinin */

 

Je viens de me souvenir, pouvez-vous me dire où insérer Sleep(60000) ; pour qu'il y ait un délai entre les ouvertures

if (ai_8 == OP_BUY) ad_20 = Ask ;
if (ai_8 == OP_SELL) ad_20 = Bid ;
if (!IsTradeContextBusy()) {
li_68 = OrderSend(as_0, ai_8, ad_12, NormalizeDouble(ad_20, MarketInfo(as_0, MODE_DIGITS)), ai_28, NormalizeDouble(ad_32, MarketInfo(as_0, MODE_DIGITS)), NormalizeDouble(ad_40,
MarketInfo(as_0, MODE_DIGITS)), as_48, ai_56, ai_60, ai_64)
if (li_68 > 0) {
Print("orderSendReliable() : Succès ! Ticket : " + li_68) ;
return (li_68) ;
}



 

Vous l'avez volé, mais vous ne savez pas quoi en faire))

je n'ai écrit aucun conseiller pour moi-même, je me contente de lire, d'examiner les chouettes tordues sur leurs schémas de blocs, en essayant de comprendre la meilleure approche

Je peux donc me tromper.

int counterrore=0, //подщет количества ошибок открытия ордера
timesleep=10000; // время задержки
while () // до тех пор пока не будет выход с цыкла
{
 if (!IsTradeContextBusy())
 { 
  RefreshRates(); // последние данные
  if (ai_8 == OP_BUY) ad_20 = Ask;
  if (ai_8 == OP_SELL) ad_20 = Bid;
  li_68 = OrderSend(as_0, ai_8, ad_12, NormalizeDouble(ad_20, MarketInfo(as_0, MODE_DIGITS)), ai_28, NormalizeDouble(ad_32, MarketInfo(as_0, MODE_DIGITS)), NormalizeDouble(ad_40,
  MarketInfo(as_0, MODE_DIGITS)), as_48, ai_56, ai_60, ai_64);
  if (li_68 > 0) 
  {
   Print("orderSendReliable(): Success! Ticket: " + li_68);
   return (li_68);
  }
  Print("orderSendReliable(): False! Error " + GetlastError()); // поищите коректную функцию обработки ошибок
  counterrore++; // количество неудач - сумирование

  if(counterrore>6) // если не удалось 6 раз открыть
  {
   Print("orderSendReliable(): Error!!! " +counterrore+"times --return(-1)" ); // сообщаем логу о даной трагедии
   return (-1); // -1 или что там Вы придумаете для отработки ситуации
  }
 }
 Sleep (timesleep); // время сна для цикла посылки  запроса на сервер и для !IsTradeContextBusy()
}
 
Maintenant les modérateurs vont venir et bannir les deux derniers devant moi :-))