Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 191

 
Vitaly Muzichenko:

Essayez de commenter la ligne, pour faire fonctionner une fonction.


intéressant si vous savez comment)
 
Rustam Bikbulatov:

c'est intéressant si vous savez comment)
vous n'avez pas besoin de savoir quoi que ce soit, je l'ai montré dans le code //
 
Rustam Bikbulatov:

Rebonjour. Pouvez-vous me dire comment modifier le code d'un programmeur connu. Actuellement, cette chouette ferme environ un commerce par seconde. Je voudrais le changer pour qu'il ferme les transactions instantanément lorsqu'il franchit un certain profit, indépendamment des transactions positives ou négatives.

Y a-t-il des messages d'erreur écrits dans le journal ?

Pouvez-vous réduire le délai dans ClosePosBySelect à des valeurs plus raisonnables. Là, plusieurs tentatives sont faites pour clôturer chaque commande et en cas d'échec, Sleep apparaît à chaque fois.

D'ailleurs, la récupération des erreurs peut se faire d'une meilleure manière (depuis la création de ces fonctions, MT a appris à générer un code différent de ERR_CONTEXT_BUSY).

 
Rustam Bikbulatov:

C'est intéressant si vous savez comment)
Vous pouvez remplacer ces deux-là par celui-ci, il fonctionne bien pour moi, mais beaucoup dépend de la vitesse à laquelle votre DC exécute les ordres.
 
Maxim Kuznetsov:

Des messages d'erreur sont-ils enregistrés ?

Vous pouvez réduire les délais dans ClosePosBySelect à des valeurs plus raisonnables. Il y a plusieurs tentatives pour clôturer chaque commande et à chaque fois, en cas d'échec, le message Sleep s'affiche.

D'ailleurs, la récupération des erreurs peut se faire d'une meilleure manière (depuis la création de ces fonctions, MT a appris à générer un code différent de ERR_CONTEXT_BUSY).

J'ai essayé de supprimer complètement Sleep, mais c'est différent.
 
Vitaly Muzichenko:
Vous pouvez remplacer ces deux-là par celui-ci, il fonctionne bien pour moi, mais cela dépend beaucoup de la vitesse à laquelle votre société de courtage exécute les ordres.

C'est un hibou complet ou une partie du code de quelque chose ?
 

Messieurs les experts, au secours ! !! Je travaille sur ce problème depuis trois jours. J'ai utilisé la fonction standard de mon Expert Advisor (je l'ai vu partout) pour lire un fichier depuis Internet en utilisant wininet.dll pour une analyse plus approfondie :


string ReadHTML()

{

si(!IsDllsAllowed())

{

Alert("Vous devez autoriser les DLL dans les paramètres ;)

retour (") ;

}

int rv = InternetAttemptConnect(0) ;

si(rv != 0)

{

Alert("Erreur lors de l'appel de InternetAttemptConnect()") ;

retour (") ;

}

int hInternetSession = InternetOpenW("Microsoft Internet Explorer", 0, "", "", 0) ;

si(hInternetSession <= 0)

{

Alert("Erreur lors de l'appel à InternetOpenW()") ;

retour (") ;

}

int hURL = InternetOpenUrlW(hInternetSession,URL, "", 0, 0, 0) ;

si(hURL <= 0)

{

Alert("Erreur lors de l'appel à InternetOpenUrlW() ;

InternetCloseHandle(hInternetSession) ;

return("") ;

}

int cBuffer[256] ;

int dwBytesRead[1] ;

string TXT = "" ;

while(!IsStopped())

{

bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead) ;

si(dwBytesRead[0] == 0)

pause ;

string text = "" ;

string text0= "" ;

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

{

text0= CharToStr((char)(cBuffer[i] & 0x000000FF)) ;

if (text0!="\r") text = text + text0 ;

sinon dwBytesRead[0]-- ;

si(StringLen(text) == dwBytesRead[0]) break ;

text0= CharToStr((char)(cBuffer[i] >> (8 & 0x000000FF)) ;

if (text0!="\r") text = text + text0 ;

sinon dwBytesRead[0]-- ;

si(StringLen(text) == dwBytesRead[0]) break ;

text0= CharToStr((char)(cBuffer[i] >> (16 & 0x000000FF)) ;

if (text0!="\r") text = text + text0 ;

sinon dwBytesRead[0]-- ;

si(StringLen(text) == dwBytesRead[0]) break ;


text0= CharToStr((char)(cBuffer[i] >> (24 & 0x000000FF)) ;

if (text0!="\r") text = text + text0 ;

sinon dwBytesRead[0]-- ;

si(StringLen(text) == dwBytesRead[0]) break ;

}

TXT = TXT + texte ;

Sleep(1) ;

}

InternetCloseHandle(hURL) ;

InternetCloseHandle(hInternetSession) ;

retour(TXT) ;

}


Tout est ok, un seul site lu une fois, qui est ensuite mis à jour, lors des appels ultérieurs à cette fonction (avec une période de 1 minute ou moins, bien que le site soit mis à jour plus souvent) donne le même site inchangé (comme il a été lu la première fois). Le redémarrage de l'Expert Advisor n'aide pas, car le fichier a été lu la première fois après le démarrage du terminal, comme il apparaît. La seule façon de mettre à jour est d'ouvrir manuellement Internet Explorer avec le site requis (respectivement, avec les informations mises à jour) et la fonction commence à lire les informations mises à jour et ensuite fige cette configuration du site, ou lors du redémarrage du terminal MT4 (et aussi lors de la première lecture après le redémarrage du terminal, donc il continue à sortir). Je soupçonne que cela a quelque chose à voir avec les paramètres InternetOpenW ou InternetOpenUrlW, la valeur par défaut est zéro, mais je ne trouve pas de description claire à ce sujet et cela fonctionne d'une manière ou d'une autre avec d'autres EAs (je l'ai pris des Expert Advisors qui retransmettent les nouvelles des sites au terminal). Oui, dans les paramètres du terminal "Allow WebRequest for..." pour le site requis.

 

Bon après-midi.

Ma RAM est déjà en colère : un problème est apparu dans l'EA, après avoir pris un TP ou un SL, il ouvre à nouveau un ordre !

Je ne vois pas comment l'EA pourrait être lié uniquement à la deuxième barre après le signal de l'indicateur.

ou si un TP ou SL se déclenchait, il attendrait un nouveau signal, mais seulement lorsque le signal de l'indicateur change.


void OnTick()

{

uptr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, n), 4) ;

dntr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1, n), 4) ;

si(DN_Trend()==true)

{

if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)

{

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red) ;

si (ticket > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Digits) ;

TP = NormalizeDouble(Bid - TakeProfit*Point, Digits) ;

if (OrderSelect(ticket, SELECT_BY_TICKET))

if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Print("Erreur de vente") ;

}

}

 
d1w4m3:

Bon après-midi.

Ma RAM est déjà en colère : un problème est apparu dans l'EA, après avoir pris un TP ou un SL, il ouvre à nouveau un ordre !

Je ne vois pas comment l'EA pourrait être lié uniquement à la deuxième barre après le signal de l'indicateur.

Ou bien, si un TP ou un SL se déclenchait, il attendrait un nouveau signal, mais seulement lorsque le signal de l'indicateur change.

Si la dernière position fermée est du même type que le signal et si cette position a été fermée sur un des ordres stop, alors n'ouvrez pas de position.
 
Artyom Trishkin:
Si la dernière position fermée est du même type que le signal est arrivé, et si cette position a été fermée sur un des ordres stop, alors n'ouvrez pas la position.


Merci pour la réponse, mais je viens juste de commencer à apprendre depuis quelques semaines, comment implémenter ceci en code, ou dites-moi où lire s'il vous plaît. Ou selon Igor Kim ?

Et pourtant il ouvrira une position, non conforme au système, alors qu'il vient de commencer son travail, votre condition n'évite pas ce problème.