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

 
Desead:
Aidez-moi si je décide d'écrire un robot en C/C++, par exemple. Ce n'est pas un problème d'en écrire un, mais comment le connecter avec metatrader ? Comment obtenir des devis et renvoyer un signal d'achat/de vente ?

DLL - voir les exemples. Est-il possible qu'un programmeur, qui sait écrire en C/C++, ne soit pas capable de traiter des exemples standards de МТ livraison et ce malgré la présence de beaucoup de matériel sur le forum ?
 
VladislavVG:

DLL - voir les exemples. Est-il possible qu'un programmeur qui sait écrire en C/C++ ne soit pas capable de comprendre les exemples standards de МТ delivery et ce malgré le fait qu'il y ait beaucoup de matériel sur le forum ?

Je ne suis pas un programmeur, mais il m'arrive d'écrire moi-même les choses les plus simples. Je n'ai pas besoin d'écrire un robot complexe dans un langage quelconque et ce n'est pas un problème du tout. Je veux écrire un robot avec sa propre interface et non pas exécuter une partie des fonctions comme une dll et les appeler depuis le μl. Grâce à toutes sortes de langages visuels où cela peut être fait sans beaucoup de stress.
 
lottamer:


Oui, je comprends maintenant pourquoi il y a une comparaison entre le temps dans la boucle et le temps en général.....

Je comprends aussi la LOGIQUE - marquer "A", puis exclure "A", mais d'abord, toutes les options OÙ ce "A" peut être épinglé, j'ai essayé - et pourtant le conseiller me renvoie le dernier ticket, pas l'avant-dernier.

.

J'ai entré 2 boucles (2 fonctions) - la première votre original, la seconde avec l'exception de "A"... s'exécutent l'un après l'autre.

Imprimez zéro....


Cette fonction utilise des variables locales, elle ne doit donc pas être exécutée plusieurs fois comme une fonction séparée, faire deux boucles l'une après l'autre dans une fonction, ou déclarer A comme une variable globale. Je vais chercher des cigarettes et vous essayez, et si ça ne marche pas, frappez-moi à mon retour et nous trouverons une solution.
 
Desead:

Je ne suis pas un programmeur, mais il m'arrive d'écrire moi-même les choses les plus simples. Je voudrais écrire un robot simple dans n'importe quel langage et ce n'est pas un problème du tout. Je voulais écrire un robot entier avec sa propre interface sans appeler Metatrader, pas une partie de ses fonctions dans une dll et les appeler depuis μl. J'ai inventé un grand nombre de langages visuels différents, dans lesquels cela peut être fait sans grand effort.

Si vous ne voulez pas du tout utiliser les fonctionnalités du terminal (plus d'une centaine de fonctions intégrées différentes, des indicateurs intégrés, l'interface du programme elle-même), alors il ne s'agit pas d'un simple Expert Advisor, mais de votre propre terminal, de votre propre développement.
 
rigonich:

Cette fonction utilise des variables locales, donc ne l'exécutez pas plusieurs fois comme une fonction séparée, ne faites pas deux boucles l'une après l'autre dans une fonction, et ne déclarez pas A comme une variable globale. Je vais aller chercher des cigarettes, et tu essaies pendant ce temps, si tu échoues, frappe-moi quand je reviens, on trouvera une solution.


IS !!!! il y a eu une petite erreur... ce n'est pas Ticket mais LastClosetPoz() et Sec_LastClosetPoz() qui auraient dû être imprimés.

Je suis sûr que ma version n'est pas la plus élégante... mais ça marche... Comment mettre deux boucles dans une fonction... Je ne sais pas... j'ai essayé... j'ai eu des erreurs... au diable tout ça ! (si ce n'est pas trop difficile - montrez-moi - ça me sera utile, sinon - eh bien, tant pis...) Merci quand même.

Cependant, j'ai le sentiment que si je dois trouver le ticket de la 35ème transaction conclue... je vais avoir des problèmes avec mon approche :)))) hahahahah

bonté qui n'est même pas encore à l'horizon... 3 tout au plus...

 
rigonich:

Cette fonction utilise des variables locales, donc ne l'exécutez pas plusieurs fois comme une fonction séparée, ne faites pas deux boucles l'une après l'autre dans une fonction, et ne déclarez pas A comme une variable globale. Je vais aller chercher des cigarettes et vous pourrez essayer, et si ça ne marche pas, frappez-moi à mon retour et nous trouverons une solution.


a fonctionné jusqu'à ce que j'insère ce qui suit

si (OrderSelect( (LastClosetPoz (),SELECT_BY_TICKET)==true)) Print("Stop loss", OrderStopLoss() ;

il jure

')' - mauvais comptage des paramètres G:\Program_Files_2\MT4-demo\experts\000.mq4 (57, 60)

Je ne comprends pas ce qu'il veut ?

--------------------------------------------------------------------------------------------

J'AI COMPRIS

==true....

ce qui est étrange, car les exemples du tutoriel le disent toujours...

et il a également arrondi la valeur de l'arrêt... au 4ème chiffre...

 
lottamer:


IS !!!! il y avait une petite erreur... l'impression aurait dû être LastClosetPoz() et Sec_LastClosetPoz() au lieu de Ticket.

Je suis sûr que ma version n'est pas la plus élégante... Mais ça marche... Comment insérer deux boucles dans une fonction... Je ne sais pas... j'ai essayé... j'ai eu des erreurs... au diable tout ça ! (si ce n'est pas trop difficile - montrez-moi - ça me sera utile, sinon - eh bien, tant pis...) Merci quand même.

Cependant, j'ai le sentiment que si je dois trouver le ticket de la 35ème transaction conclue... j'aurai du mal avec mon approche :)))) hahahahah

bonté qui n'est même pas encore à l'horizon... 3 au plus...



int Ticket1,Ticket2 ;
//+------------------------------------------------------------------+
int fLastClosetPoz()
{
int Tot=OrdersHistoryTotal(),A,i;Ticket1=-1;Ticket2=-1;datetime time=0 ;
si(Tot>0)
{
for(i=0;i<OrdersHistoryTotal();i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
si(OrderSymbol()==Symbol())
{
si(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket1=OrderTicket() ;
}
}
}
sinon continuer ;
}
}
Tot=OrdersHistoryTotal();A=Ticket1;time=0 ;
si(Tot>0)
{
for(i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
si(OrderTicket()==A)continue ;
si(OrderSymbol()==Symbol())
{
si(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket2=OrderTicket() ;
}
}
}
sinon continuer ;
}
}
retour(0) ;
}
//+------------------------------------------------------------------+
P.S. Etvous devez utiliser une boucle imbriquée (c'est-à-dire une boucle dans une boucle) pour déterminerla 35ème transaction fermée.
 
rigonich:


int Ticket1,Ticket2 ;
//+------------------------------------------------------------------+
int fLastClosetPoz()
{
int Tot=OrdersHistoryTotal(),A,i;Ticket1=-1;Ticket2=-1;datetime time=0 ;
si(Tot>0)
{
for(i=0;i<OrdersHistoryTotal();i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
si(OrderSymbol()==Symbol())
{
si(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket1=OrderTicket() ;
}
}
}
sinon continuer ;
}
}
Tot=OrdersHistoryTotal();A=Ticket1;time=0 ;
si(Tot>0)
{
for(i=0;i<OrdersHistoryTotal();i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
si(OrderTicket()==A)continue ;
si(OrderSymbol()==Symbol())
{
si(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket2=OrderTicket() ;
}
}
}
sinon continuer ;
}
}
retour(0) ;
}
//+------------------------------------------------------------------+


imprime des zéros...ne fonctionne pas...je ne vais pas creuser plus, car il est évident que les boucles sont juste substituées l'une à l'autre - le volume n'est clairement pas réduit..... et nous avons déjà une version qui fonctionne. Je peux comparer les ordres dans la première variante... et ici je ne peux même pas voir où se trouve le second... et le premier est nul...

après quelques petits bricolages... qui développent clairement le cerveau, ce code a aussi fonctionné ! :))) merci

 
lottamer:


a fonctionné jusqu'à ce que j'insère ce qui suit

si ( Print("Stop loss", OrderStopLoss()) ;) Print("Stop loss", OrderStopLoss() ;

il jure

')' - mauvais comptage des paramètres G:\Program_Files_2\MT4-demo\experts\000.mq4 (57, 60)

Je ne comprends pas ce qu'il veut ?


Encore 45, dans cette forme, OrderSelect(LastClosetPoz (),SELECT_BY_TICKET) sélectionne par défaut parmi les ordres en attente et les ordres ouverts et cet ordre n'est pas là. MettezOrderSelect(LastClosetPoz (),SELECT_BY_TICKET, MODE_HISTORY).
 
lottamer:


imprime des zéros... ne fonctionne pas... Je ne vais pas creuser plus loin, car il est évident que les cycles sont juste substitués les uns aux autres - le volume n'a clairement pas diminué..... et nous avons déjà une variante qui fonctionne. En outre, dans la première variante - je peux comparer les ordres ... et ici je ne peux même pas voir où se trouve le deuxième ... et le premier est zéro ....

après quelques petits bricolages... qui développent clairement le cerveau, ce code a aussi fonctionné ! :))) merci


Il suffit d'imprimer les variables Ticket1 et Ticket2 après l 'appel de la fonction.