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

 
lottamer:

vous devez insérer les termes HAVE d'une transaction ouverte (une, sans majoration) dans une ligne, par exemple, avec un croisement de moyennes.

a trouvé ceci

==============================================

int start()

{

for(int i=0 ; i<OrdersTotal() ; i++)

{

si ((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) )

PlaySound ("alert.wav") ;

retour(0) ;

}}

==============================================

Il y a une position ouverte mais pas de son.

Pouvez-vous me dire ce qui ne va pas ?

Ou la facilité avec laquelle il est possible d'écrire la condition :

SI MA 5 croise MA 10 et qu'il y a une position ouverte - fermez cette position.

Il semble que c'est là que void.... est nécessaire.


Vérifiez si les sons sont autorisés pour MT dans le windup, et s'il y a des fichiers dans le dossierSound. Mais sur le marché bstrom, le sn fonctionnera comme un réveil.
 
rigonich:

Vérifiez si les sons sont autorisés pour MT dans le windup, et s'il y a des fichiers dans le dossierSound. Mais sur le marché bstrom, le sn fonctionnera comme un réveil.


non, bien que je sois un débutant, je ne fais pas de telles erreurs. :))

d'autres experts chantent comme des rossignols ! dans le même terminal !

 
Desead:

Mince, c'est mon problème. Je me demande comment je peux contourner le problème si je n'ai besoin de supprimer toute la grille que lorsque je décharge le robot... Je n'arrive pas à trouver une solution :(

placez la même condition avant d'appeler deinit sur la même condition sur laquelle vous appelez deinit.
 
lottamer:


Non, je suis un débutant, mais je ne fais pas ce genre d'erreur. :))

les autres experts chantent comme des rossignols ! dans le même terminal !


Et s'il s'agit d'un script, vous devez avoir l'autorisation d'effectuer des transactions pour les conseillers experts, et dans la fenêtre où vous l'avez placé, il ne doit pas y avoir d'autres scripts ou conseillers experts qui fonctionnent, et il "zinguera" s'il y a des transactions ouvertes sur un instrument.
 
rigonich:

Placez un deinit avant d'appeler le deinit par la même condition que vous appelez deinit.


Ainsi, deinit est appelé lorsque je supprime un robot d'un graphique - je ne peux pas suivre cette condition d'une autre manière..... il est probablement plus facile d'écrire un script séparé qui supprime tous les robots restants en attente, il n'y a pas d'autre moyen.

Au fait, une autre réflexion sur le sujet :

Je pense avoir résolu le problème de la suppression des commandes en attente. Je détermine la quantité d'ordres "nécessaires" (à enlever) dans une fonction séparée, appelée cette fonction et ensuite while avec une condition (Total>0), puis le cycle d'enlèvement for(int i=Total-1;i<=0l ; i--), calculant à nouveau la quantité d'ordres "nécessaires", compteur de tentatives d'enlèvement avec sortie dewhile lorsque le niveau donné est atteint. De cette façon, tout est supprimé.

une boucle infinie peut se produire ici si l'un des ordres disparaît après le moment du comptage pour une raison quelconque.

 
rigonich:

Et s'il s'agit d'un script, vous devez avoir activé les droits de négociation du conseiller expert.


c'est un EA.

toutes les permissions sont bien sûr activées (il y a d'autres EAs - ils fonctionnent - PAS en même temps)

il y a un problème dans le code. quelque chose ne va pas ici.....

 
Desead:

Merci pour la réponse. Je n'ai pas besoin de tous, seulement bylimit et selllimit, et je les mets aussi seulement, le magicien est aussi présent partout le même. J'ai regardé le code que vous avez donné, il y a tellement de choses là, je me suis assis pour le comprendre, en général, si je ne peux pas résoudre le problème moi-même, je vais devoir démonter vos scripts plus en profondeur, il n'y a pas d'autre moyen, il ne supprime pas et c'est tout (

Je pensais à quelque chose. Je règle la suppression de tous les robots en attente à un seul endroit : lorsque je décharge mon robot, il est placé dans deinit. Lorsque quelques commandes seulement sont supprimées, tout va bien, mais lorsque je décharge une grille entière, que se passe-t-il ? Il reste toujours une dizaine de commandes et il n'est pas possible de les nettoyer manuellement.

Mon script utilise cette bibliothèque. La fonction responsable de la suppression des ordres qui s'y trouvent :

/*int fClose_AllOrders (double& fd_Pribul,         // Возвращаемый профит закрытых ордеров
                        int fi_Type = -1,          // тип закрываемых ордеров: -1 - все; -2 - рыночные; 7 - отложенные или OrderType()
                        int fi_NBars_Life = 0,     // минимальная "жизнь" ордера в барах на fi_Period: 0 - параметр не учитывается
                        int fi_Period = 0,         // Период
                        int fi_OrderProfit = 0)*/  // Идентификатор профитности ордера: > 0 - профитный; < 0 - лоссовый
                                     // Функция закрытия "своих" ордеров по признаку

Il faut avoir quelques connaissances pour extraire la fonction de la bibliothèque, mais utiliser toute la bibliothèque est tout à fait acceptable pour un débutant.

 
rigonich:

Hourra, il semble que j'ai résolu le problème de la suppression des commandes. J'ai calculé le nombre d'ordres "nécessaires" (à enlever) dans une fonction séparée, appelée cette fonction, puis while avec une condition (Total>0), puis le cycle d'enlèvement for(int i=Total-1 ;i<=0l ; i--), à nouveau, la fonction de comptage des"nécessaires", compteur de tentatives d'enlèvement avec la sortie dewhile lorsque le niveau spécifié est atteint. De cette façon, tout est supprimé.
Lorsque vous utilisez des boucles, vous devez TOUJOURS faire attention : mettez le compte d'itération et la condition de sortie lorsque l'EA est interdit de transaction.
 
TarasBY:
Vous devez TOUJOURS faire attention lorsque vous utilisez des boucles : mettez un compteur d'itération et une condition de sortie lorsque vous interdisez à l'EA de faire des transactions.


Merci pour le conseil. J'avais oublié la condition de sortie lorsqu'aucune transaction n'est autorisée.
 
Desead:

Mince, c'est mon problème. Je me demande comment je peux le contourner si je n'ai besoin de supprimer toute la grille que lorsque je décharge le robot... Je n'arrive même pas à trouver une solution :(

Un script peut être chargé dans deinit() via la bibliothèque à chart :

 // 7.9. Функция загружает на указанный график скрипт по его имени.
 void ServiceLoadScript(int    hwndChart,    // Системный дескриптор окна графика, куда загружается скрипт.
                        string szNameScript, // Имя загружаемого скрипта.
                        int    bOK);         // Подтверждение запуска скрипта, при наличии диалогового окна свойств скрипта. Скрипт может не иметь окна свойств!
                                             // При использовании функции для загрузки скрипта из скрипта на текущем графике параметр не работает из-за
                                             // невозможности одновременной работы двух скриптов на одном графике.
                                             // TRUE - автонажатие на кнопку "OK" разрешено, FALSE - автонажатие на кнопку "OK" запрещено.

avec la fonction de suppression de tous les ordres.

P.S. Avec un certain coût et de l'énergie, vous pouvez résoudre N'IMPORTE QUEL désir exotique d'un trader, mais si vous avez besoin de cet "exotique" parfois ... :)))