[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 247
J'ai une idée pour faire fonctionner un seul et même EA avec différents assistants. Le problème est que lorsqu'il y a un blocage, le robot va gérer séparément cette situation sans interférer avec les autres ordres. Par exemple, nous avons une position ouverte à Bay (magic 001), le marché a été contre nous et au lieu de fermer la transaction, la transaction opposée s'ouvre à Sell avec magic 001 et le robot va liquider cette situation, mais pour éviter d'attendre longtemps pour liquider la situation, je veux ouvrir à nouveau Bay mais déjà avec magic (002) et si la tendance n'est pas réussie, le verrou avec magic (002) ouvrira à nouveau Sell avec (002), etc. Pouvez-vous dire comment faire fonctionner les transactions comme suit avec différentes paires magiques ?
pasha5282: Si j'ai une idée pour faire fonctionner un même EA avec différents assistants, le robot devrait gérer séparément cette situation lorsqu'un blocage se produit et ne pas interférer avec les autres ordres. Par exemple, nous avons une position ouverte à la Baie (magie 001), le marché est allé contre nous et au lieu de fermer la transaction, la transaction opposée s'ouvre à la Vente avec la magie 001 et le robot s'occupera de la situation et je veux ouvrir à nouveau la Baie mais avec la magie (002) et si la tendance n'est pas corrigée, la Vente opposée avec la magie (002) s'ouvrira à nouveau et ainsi de suite. Un conseil pour faire fonctionner les transactions comme une couche avec des magies différentes ? ou comment l'implémenter ?
int MagicNumber=001;
//---if (OrdersTotal()>0) // проверяем, есть ли ордера
{ for (int i=OrdersTotal()-1; i>=0; i--) // перебор ордеров
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // выбирается ордер среди открытых и отложенных ордеров
{ if (OrderSymbol()!=Symbol()) continue; // проверяем - ордер по текущему символу?if (OrderMagicNumber()!=MagicNumber) continue; // проверяем - ордер с нужным магиком?//---if (OrderType()==OP_BUY) // если это открытая позиция на покупку, то ...
{ // ... какие-то действияreturn(0);
}
//---elseif (OrderType()==OP_SELL) // если это открытая позиция на продажу, то ...
{ // ... какие-то действияreturn(0);
}
} } }
Exemple d'un compteur d'ordres ouverts et en attente par le symbole et le magicien requis
string_Symbol="AUDUSD";
int MagicNumber=555;
//---int Opened_pos=0;
if (OrdersTotal()>0)
{ for (i=OrdersTotal()-1; i>=0; i--)
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{ if (OrderSymbol()==_Symbol)
{ if (OrderMagicNumber()==MagicNumber)
Opened_pos++;
} } } }
Pour une raison quelconque, le terminal s'est bloqué pendant le test. Maintenant, lorsque vous l'allumez, il commence à utiliser environ 150 mb de mémoire et se bloque. J'allais réinstaller, mais j'ai déplacé tous mes fichiers avant de le faire. Lorsque j'ai ouvert les dossiers, j'ai constaté que tous les fichiers que j'avais créés n'y étaient pas. Où sont les autres ?
Pour une raison quelconque, le terminal s'est bloqué pendant le test. Maintenant, lorsque vous l'allumez, il commence à utiliser environ 150 mb de mémoire et se bloque. J'allais réinstaller, mais j'ai déplacé tous mes fichiers avant de le faire. Lorsque j'ai ouvert les dossiers, j'ai constaté que tous les fichiers que j'avais créés n'y étaient pas. Où sont les autres ?
sss2019, pas le temps de s'en occuper maintenant, désolé.
Dès que j'en aurai le temps, je le corrigerai et modifierai le code dans le message.
Question. Comment obtenir un pointeur sur une chaîne de caractères ? La chaîne MQL4 est C++ lpsz, d'après ce que j'ai compris. Mais comment puis-je obtenir l'adresse de la chaîne elle-même ?
Il n'y a aucun moyen de le faire dans MQL4. Vous pouvez passer la chaîne à la DLL et renvoyer l'adresse en tant que INT.
silhouette: Non, le quatrième. C'est juste que les fichiers du quatrième, quand on clique dessus, s'ouvrent sur le cinquième, pour une raison quelconque.
Ouvrez MetaEditor pour 5, dans la fenêtre de gauche "Navigateur" -> sur un dossier, faites un clic droit -> "Ouvrir le dossier" et là, parmi les dossiers, essayez de chercher.
#import "StrAddress.dll"int GetStrAddress(string str);//на входе имя инициализированной строки, на выходе её адрес#import//объявляем:string s="something";
int address;
//пример использования:int start(){
address=GetStrAddress(s);
Print(" адрес s равен " s);
}
Pour que d'autres ne souffrent pas de la même façon, j'ai joint le projet zippé complet. Avec des sources, pour que d'autres puissent voir qu'il ne s'agit pas d'un virus. Je n'ai pas eu le temps de vérifier ce qui est compilé par VC++ 6.0 et ce qui ne l'est pas. StrAddress.dll se trouve dans le dossier Debug.
Ouvrir MetaEditor pour 5, dans la fenêtre de gauche "Navigateur" -> clic droit sur un dossier -> "Ouvrir le dossier" et là, parmi les dossiers, essayer de chercher.
Merci, mais rien de mt4 ne s'y trouve. J'ai utilisé la recherche et trouvé tous les fichiers à l'adresse suivante :
MT4_EXPFUNC int __stdcall GetStrAddress(constchar *str) {
MqlStr* s = (MqlStr*)str;
return (int)s->string;
}
//MQL4
Pour que d'autres ne souffrent pas de la même façon, j'ai joint le projet zippé complet. Avec des sources, pour qu'ils puissent voir que ce n'est pas un virus. Je n'ai pas eu le temps de vérifier ce qui est compilé par VC++ 6.0 et ce qui ne l'est pas. StrAddress.dll se trouve dans le dossier Debug.
C'est comme ça :
MT4_EXPFUNC int stdcall GetStrAddress(LPCSTR szStr)
{
return(int(szStr));
}
Si j'ai une idée pour faire fonctionner un même EA avec différents assistants, le robot devrait gérer séparément cette situation lorsqu'un blocage se produit et ne pas interférer avec les autres ordres. Par exemple, nous avons une position ouverte à la Baie (magie 001), le marché est allé contre nous et au lieu de fermer la transaction, la transaction opposée s'ouvre à la Vente avec la magie 001 et le robot s'occupera de la situation et je veux ouvrir à nouveau la Baie mais avec la magie (002) et si la tendance n'est pas corrigée, la Vente opposée avec la magie (002) s'ouvrira à nouveau et ainsi de suite. Un conseil pour faire fonctionner les transactions comme une couche avec des magies différentes ? ou comment l'implémenter ?
Exemple d'un compteur d'ordres ouverts et en attente par le symbole et le magicien requis
Pour une raison quelconque, le terminal s'est bloqué pendant le test. Maintenant, lorsque vous l'allumez, il commence à utiliser environ 150 mb de mémoire et se bloque. J'allais réinstaller, mais j'ai déplacé tous mes fichiers avant de le faire. Lorsque j'ai ouvert les dossiers, j'ai constaté que tous les fichiers que j'avais créés n'y étaient pas. Où sont les autres ?
Pour une raison quelconque, le terminal s'est bloqué pendant le test. Maintenant, lorsque vous l'allumez, il commence à utiliser environ 150 mb de mémoire et se bloque. J'allais réinstaller, mais j'ai déplacé tous mes fichiers avant de le faire. Lorsque j'ai ouvert les dossiers, j'ai constaté que tous les fichiers que j'avais créés n'y étaient pas. Où sont les autres ?
sss2019, pas le temps de s'en occuper maintenant, désolé.
Dès que j'en aurai le temps, je le corrigerai et modifierai le code dans le message.
Question. Comment obtenir un pointeur sur une chaîne de caractères ? La chaîne MQL4 est C++ lpsz, d'après ce que j'ai compris. Mais comment puis-je obtenir l'adresse de la chaîne elle-même ?
La capture d'écran de gauche est MQL5, pas 4.
Non, le quatrième. C'est juste que les fichiers du quatrième, quand on clique dessus, s'ouvrent sur le cinquième, pour une raison quelconque.
Ouvrez MetaEditor pour 5, dans la fenêtre de gauche "Navigateur" -> sur un dossier, faites un clic droit -> "Ouvrir le dossier" et là, parmi les dossiers, essayez de chercher.
Il n'y a aucun moyen de le faire dans MQL4. Vous pouvez passer une chaîne de caractères à une DLL et retourner l'adresse en tant que INT.
//MQL4
Pour que d'autres ne souffrent pas de la même façon, j'ai joint le projet zippé complet. Avec des sources, pour que d'autres puissent voir qu'il ne s'agit pas d'un virus. Je n'ai pas eu le temps de vérifier ce qui est compilé par VC++ 6.0 et ce qui ne l'est pas. StrAddress.dll se trouve dans le dossier Debug.
Ouvrir MetaEditor pour 5, dans la fenêtre de gauche "Navigateur" -> clic droit sur un dossier -> "Ouvrir le dossier" et là, parmi les dossiers, essayer de chercher.
Merci, mais rien de mt4 ne s'y trouve. J'ai utilisé la recherche et trouvé tous les fichiers à l'adresse suivante :
C:\Users\Qwer\AppData\Local\VirtualStore\Program Files\MetaTrader 4\experts\include
Je n'ai aucune idée de comment ils sont arrivés là, pour être honnête, car ils ont été sauvegardés correctement auparavant.
gyfto:
//MQL4//C++
Pour que d'autres ne souffrent pas de la même façon, j'ai joint le projet zippé complet. Avec des sources, pour qu'ils puissent voir que ce n'est pas un virus. Je n'ai pas eu le temps de vérifier ce qui est compilé par VC++ 6.0 et ce qui ne l'est pas. StrAddress.dll se trouve dans le dossier Debug.