Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 801
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Je ne comprends pas quel est le problème ?
int start()
{
bool i;
int ticket;
double Pricem;
datetime Timen;
string Symb=Symbol();
ticket=OrderSend(Symb,OP_SELL,0.1,Bid,3,Ask+4*Point,Ask-12*Point);
i=OrderSelect(0,SELECT_BY_POS);
while(true)
{
RefreshRates();
Timen=OrderCloseTime();
if(Timen>0)
{
Pricem=OrderClosePrice();
Alert(Pricem);
Alert("ордер закрылся");
Sleep(30000);
}
Sleep(10);
}
return;
}
Je suis en train de résoudre la tâche de fermer tous les graphiques ouverts en utilisant les outils MQL4. Il y a 3 graphiques ouverts avec différentes paires de devises et voici le code du script :
Lorsque j'exécute le script, seul un des trois graphiques est fermé et voici les impressions du journal :
Cela signifie qu'après la fermeture d'un graphique, le graphique actuel devrait être l'autre, mais.. :
1. Après la fermeture du premier graphique, la fonctionChartIDrenvoie l'identifiant du graphique fermé au lieu de l'identifiant actuel.
2. Lafonction ChartClose() en 2 et 3 itérations retourne vrai, ce qui signifie qu'elle ferme avec succès la fenêtre déjà fermée...
Qui sait où se trouve le bug et comment résoudre ce problème ?
Je ne comprends pas quel est le problème ?
Un message de fermeture devrait apparaître. L'ordre s'ouvre, atteint l'arrêt, se ferme et c'est tout ! Où se trouve l'erreur ?
Je pense que OrderSelect() devrait être à l'intérieur d'une boucle while, et de plus, le numéro de position sera incorrect, parce qu'après la fermeture, il deviendra différent - dans ce cas, il est préférable de sélectionner à partir du ticket.
Je suis en train de résoudre la tâche de fermer tous les graphiques ouverts en utilisant les outils MQL4. Il y a 3 graphiques ouverts avec différentes paires de devises et voici le code du script :
Lorsque j'exécute le script, seul un des trois graphiques est fermé et voici les impressions du journal :
Cela signifie qu'après la fermeture d'un graphique, le graphique actuel devrait être l'autre, mais.. :
1. Après la fermeture du premier graphique, la fonctionChartIDrenvoie l'identifiant du graphique fermé au lieu de l'identifiant actuel.
2. Lafonction ChartClose() en 2 et 3 itérations retourne vrai, ce qui signifie qu'elle ferme avec succès la fenêtre déjà fermée...
Qui sait où se trouve le bug et comment résoudre ce problème ?
pako, parfois ça marche, parfois non, je ne sais pas pourquoi... Je reçois une erreur :
2014.12.11 17:52:12.456 Violation d'accès en lecture à 0x09295000 dans 'C:\.....................ex4'.
Serait-ce parce qu'il essaie de fermer le graphique sur lequel le script est lancé ?
PS fonctionne correctement si le script est attaché au premier graphique en partant de la gauche. Mais si je le place sur un autre graphique, j'obtiens une erreur
pako, parfois ça marche, parfois non, je ne sais pas pourquoi... Je reçois une erreur :
2014.12.11 17:52:12.456 Violation d'accès en lecture à 0x09295000 dans 'C:\.....................ex4'.
Serait-ce parce qu'il essaie de fermer le graphique sur lequel le script est lancé ?
PS fonctionne correctement si le script est attaché au premier graphique en partant de la gauche. Mais si je le place sur un autre graphique, j'obtiens une erreur
Les gars, aidez-moi.
Le problème est la fonction suivante pour convertir l'ordre en non perte, elle commence à fonctionner incorrectement si je la règle sur les paires de Yen et autorise tous les ordres ouverts en non perte
je les laisse tous ok, mais sur cinq chiffres il revient à zéro même si je le règle sur cinq chiffres seulement mais la meilleure chose est que si je le règle sur cinq il fonctionne ok
Quelle est la raison d'être d'un tel travail ? Qu'est-ce qui doit être pris en compte dans ces fonctions, afin que l'exécution correcte soit réalisée et ne dépende pas de l'opération EA dans quelle fenêtre je l'ai jetée à trois ou cinq chiffres ?
Merci beaucoup.
}
//==================================================================================================
// функция перевода ордеров стоп лоса в без убыток по всем открытым ордерам
//==================================================================================================
if(_Simbol==false)//если false то по всем ордерам открытым
{
for(int i=0;i<OrdersTotal();i++)//цикл перебора ордеров
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))//будем искать следующие
{
if(OrderType()==OP_BUY) //если тип бай
{
double bid=MarketInfo(OrderSymbol(),MODE_BID);//последний известный бид инструмента
double point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента
if(OrderStopLoss()<OrderOpenPrice())//если стоп лос меньше цены открытия
{
if(bid-Dist_Perivoda*point>OrderOpenPrice())//бид-профит*пункт больше цены открытия
{//модифицируем стоп лос
bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+NormalizeDouble(Level_Zahiti*point,Digits),OrderTakeProfit(),0,clrNONE);
if(!ord_modifik)//если не получилось
Comment(GetLastError());//номер ошибки в угол
}
}
}
if(OrderType()==OP_SELL)//если тип селл
{
double ask=MarketInfo(OrderSymbol(),MODE_ASK);//последний известный аск инструмента
double point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента
if(OrderStopLoss()==0||OrderStopLoss()>OrderOpenPrice())//если стоп лос больше цены открытия или равен нолю
{
if(ask+Dist_Perivoda*point<OrderOpenPrice())//аск +профит*пункт меньше цены открытия
{//модифицируем стоп лос
bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NormalizeDouble(Level_Zahiti*point,Digits),OrderTakeProfit(),0,clrNONE);
if(!ord_modifik)//если не получилось
Comment(GetLastError());//номер ошибки в угол
}
}
}
}
}
}
Merci pour le code, je comprends l'essentiel, bien que j'obtienne encore une erreur parfois.
Expérimenté avec les fonctions qui montrent les ID des graphiques. Ce que signifie ChartFirst() dans la documentation n'est absolument pas clair, on peut l'interpréter de n'importe quelle façon - cela peut signifier le premier graphique ouvert dans l'ordre à partir de la gauche, ou le premier graphique ouvert parmi tous ceux qui sont ouverts (dans le temps), ou le premier jamais ouvert dans le terminal (la possibilité qu'il soit ouvert maintenant est presque nulle, donc cela n'a aucun sens de le fermer). Je suis plus enclin à la dernière version, car je n'ai jamais vu cette fonction retourner l'ID du graphique, qui est ouvert en ce moment.
Merci pour le code, je comprends l'essentiel, bien que j'obtienne encore une erreur parfois.
Expérimenté avec les fonctions qui montrent les ID des graphiques. Ce que signifie ChartFirst() dans la documentation n'est absolument pas clair, on peut l'interpréter de n'importe quelle façon - cela peut signifier le premier graphique ouvert dans l'ordre à partir de la gauche, ou le premier graphique ouvert parmi tous ceux qui sont ouverts (dans le temps), ou le premier jamais ouvert dans le terminal (la possibilité qu'il soit ouvert maintenant est presque nulle, donc cela n'a aucun sens de le fermer). Je suis plus enclin à la dernière version, car je n'ai jamais vu cette fonction renvoyer l'ID du graphique qui est ouvert en ce moment.
ChartFirst
Retourne l'ID du premier graphique du terminal client.
Je comprends que c'est le tableau le plus à gauche