Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1015

 
nikelodeon:
Je pense que les experts seront gonflés par de tels problèmes, et je dois les résoudre moi-même :-) Comment faire des icônes sur le tableau à la clôture de l'affaire, comme dans le testeur ????? Il existe peut-être des fonctions prêtes à l'emploi ????.

si fermeture par conseiller/script, alors

bool  OrderClose( 
   int        ticket,      // номер ордера 
   double     lots,        // количество лотов 
   double     price,       // цена закрытия 
   int        slippage,    // максимальное проскальзывание 
   color      arrow_color  // цвет 
   );
 


couleur de la flèche

[La couleur de la flèche de fermeture sur le graphique. Si le paramètre est absent ou si sa valeur estCLR_NONE, aucune flèche n'est affichée sur le graphique.

---

si c'est manuel, il suffit d'écrire/emprunter un script/indicateur prêt à l'emploi qui détectera cette opération dans l'historique et l'affichera avec une icône.

 
artborder:

si fermeture par conseiller/script, alors


couleur de la flèche

[La couleur de la flèche de fermeture sur le graphique. Si le paramètre est absent ou si sa valeur estCLR_NONE, la flèche n'apparaîtra pas sur le graphique.

---

si c'est manuel - il suffit d'écrire/emprunter un script/indicateur prêt à l'emploi, qui détectera cette affaire dans l'historique et l'affichera avec une icône.

Merci, je vais maintenant essayer !!!!!
 
artborder:

Bonjour, j'ai une question :

Lorsque vous effectuez une recherche programmatique sur les graphiques, leurs sous-fenêtres, les indicateurs dans les sous-fenêtres, vous pouvez connaître le nombre total d'indicateurs, puis leurs noms, paramètres, etc.

Utilisation de ChartIndicatorsTotal, ChartIndicatorName etc.

Comment connaître de la même manière le nom du ChartID de l'Expert Advisor en cours d'exécution dans cette fenêtre ?

Question sur MT4

une autre question... Comment puis-je lire les fichiers journaux de MT4 ? Ce code donne une erreur ... 5002

   string filename=TerminalPath() + "\\MQL4\\Logs\\20160219.log"; 
   int filehandle=FileOpen(filename,FILE_READ); 
   if(filehandle<0) 
     { 
      Print("Неудачная попытка открыть файл по абсолютному пути"); 
      Print("Код ошибки ",GetLastError()); 
     } 

    string str=FileReadString(filehandle); 
 
Pouvez-vous me dire quelle est la raison ?HttpSendRequestW n'envoie pas de demande... GetLastError donne 0.

(la chose intéressante est que la deuxième version de WebRequest fonctionne... )

#property strict
#import "wininet.dll"
int InternetAttemptConnect(int x);
int InternetOpenW(string &sAgent,int lAccessType,string &sProxyName,string &sProxyBypass,int lFlags);
int InternetConnectW(int hInternet,string &szServerName,int nServerPort,string &lpszUsername,string &lpszPassword,int dwService,int dwFlags,int dwContext);
int HttpOpenRequestW(int hConnect,string &Verb,string &ObjectName,string &Version,string &Referer,string &AcceptTypes,uint dwFlags,int dwContext);
int HttpSendRequestW(int hRequest,string &lpszHeaders,int dwHeadersLength,uchar &lpOptional[],int dwOptionalLength);
int HttpQueryInfoW(int hRequest,int dwInfoLevel,int &lpvBuffer[],int &lpdwBufferLength,int &lpdwIndex);
int InternetOpenUrlW(int hInternet,string &lpszUrl,string &lpszHeaders,int dwHeadersLength,uint dwFlags,int dwContext);
int InternetReadFile(int hFile,uchar &sBuffer[],int lNumBytesToRead,int &lNumberOfBytesRead);
int InternetCloseHandle(int hInet);
#import

//Также для эстетики кода определим используемые имена констант из wininet.h.
#define  OPEN_TYPE_PRECONFIG     0           // использовать конфигурацию по умолчанию
#define  FLAG_KEEP_CONNECTION    0x00400000  // не разрывать соединение
#define  FLAG_PRAGMA_NOCACHE     0x00000100  // не кешировать страницу
#define  FLAG_RELOAD             0x80000000  // получать страницу с сервера при обращении к ней
#define  SERVICE_HTTP            3           // требуемый протокол
#define  INTERNET_FLAG_ASYNC     1

string            Host;       // имя хоста
int               Port;       // порт
int               Session;    // дескриптор сессии
int               Connect;    // дескриптор соединения

string acess_type;  // массив с данными для отправки POST-запросов 
uchar  data[];
string URL      = "http://ru.investing.com/earnings-calendar/Service/getCalendarFilteredData";
string Method   = "POST";
string ver_http = "HTTP/1.1";
string Refer    = "http://ru.investing.com/earnings-calendar/";

string HEADERS  = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"+"\n"+
                  "Content-Type: application/x-www-form-urlencoded"+"\n"+
                  "X-Requested-With: XMLHttpRequest"+"\n"+
                  "Connection: Close"+"\n";// сам запрос
  
string REQUEST_BODY ="pair_id=6408&action=searchStock";// сюда вписываем данные POST-запроса 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   StringToCharArray(REQUEST_BODY,data,0,StringLen(REQUEST_BODY),CP_ACP);
   
   OpenInet(URL,Port);
    
   int hRequest=HttpOpenRequestW(Connect, Method, URL, ver_http, Refer, acess_type, FLAG_KEEP_CONNECTION|FLAG_RELOAD|FLAG_PRAGMA_NOCACHE, 0); // создаем дескриптор запроса
   if(hRequest<=0)
   {
      Print("-Err OpenRequest");
      InternetCloseHandle(Connect);
      return(false);
   }  
  
    
   // отправили файл
   int hSend=HttpSendRequestW(hRequest,HEADERS,StringLen(HEADERS),data,ArraySize(data));
    
   if(hSend<=0)
   {
      Print("-Err SendRequest");
      InternetCloseHandle(hRequest);
      CloseInet();
   }


   return(INIT_SUCCEEDED);
}

//================== ФУНКЦИЯ ОТКРЫТИЯ / ЗАКРЫТИЯ ИНТЕРНЕТА ================================================================   
bool OpenInet(string aHost,int aPort)
{
   if (aHost=="") {Print("-Host is not specified"); return(false);}
   
   if (Session>0 || Connect>0) {CloseInet(); Print("+Open Inet...");} // если сессия была опеределена, то закрываем

   // Попытки создать подключение к Интернету   
   if (InternetAttemptConnect(0)!=0) {Print("-Err AttemptConnect"); return(false);} // если не удалось проверить имеющееся соединение с интернетом, то выходим
  
   string UserAgent="Mozilla"; string nill=""; 
   // Инициализирует приложение использует функции wininet  
   Session=InternetOpenW(UserAgent,OPEN_TYPE_PRECONFIG,nill,nill,0); // открываем сессию
   
   if (Session<=0) {Print("-Err create Session"); CloseInet(); return(false);} // если не смогли открыть сессию, то выходим

   Connect=InternetConnectW(Session,aHost,aPort,nill,nill,SERVICE_HTTP,0,0); // Открывает протокол передачи файлов (FTP) или http-сеанса для данного сайта.
   if (Connect<=0) {Print("-Err create Connect"); CloseInet();return(false);}
   
   Host=aHost; Port=aPort; // присвоение значений
   
   // все проверки завершились успешно
   return(true);
}
 
void CloseInet()
{
   Print("-Close Inet...");
   if(Session>0) InternetCloseHandle(Session); Session=-1;
   if(Connect>0) InternetCloseHandle(Connect); Connect=-1;
}
//========================================================================================================================= 
 
Money_Maker:
Pouvez-vous me dire ce qui ne va pas ?HttpSendRequestW n'envoie pas la demande... GetLastError donne 0.

(Ce qui est intéressant, c'est que la deuxième version de WebRequest fonctionne... ).


Si la deuxième variante fonctionne, alors il y a une solution. Quel est donc le problème ?
 
Vinin:
Si la deuxième option fonctionne, il y a une solution. Alors quel est le problème ?
le problème est qu'il y aura tellement de liens à entrer dans les paramètres du terminal comme adresses autorisées( + je n'ai pas le même ordinateur...
n'est pas du tout une option(
 

Bonjour !

Pouvez-vous me dire comment trouver le début de la mesure dans la boucle for, en général je dois regarder de la 1ère mesure à la 5ème incluse ? (la barre 0 actuelle n'est pas comptée).

for (int i=5; i<1; i++)

{

h = iHigh(Symbol(),tf,i);

......

Lire la fonction pour comprendre seulement je ne peux pas. Aide.

Salutations !

 
Money_Maker:
Pouvez-vous me dire ce qui ne va pas ?HttpSendRequestW n'envoie pas la requête... GetLastError donne 0.

(La chose intéressante est que la deuxième version de WebRequest fonctionne... )


Ce n'est plus la chaîne de caractères qui doit être transférée, mais le tampon de caractères.

https://forum.mql4.com/ru/67441

 
Shargyn:

Bonjour !

Pouvez-vous me dire comment trouver le début de la mesure dans la boucle for, en général, je dois regarder de la 1ère mesure à la 5ème incluse ? (la barre 0 actuelle n'est pas comptée)

J'ai lu le formulaire pour la fonction seulement, je ne peux pas le comprendre. Aide.

Salutations !

avec, pour, ce qu'il faut faire

for(int i=1;i<=5;i++)

ou

for(int i=5;i>=1;i--)

Mais oui. La chose la plus logique à faire pendant le développement était de rendre

avec, ce qu'il faut faire, pour

for(int i=1;i++;i<=5)

 
#import "wininet.dll"
int HttpSendRequestW(int hRequest,char &lpszHeaders[],int dwHeadersLength,uchar &lpOptional[],int dwOptionalLength);
#import

char a[];
StringToCharArray(HEADERS,a);

int hSend=HttpSendRequestW(hRequest,a,StringLen(HEADERS),data,ArraySize(data));
Merci pour votre réponse, s'il vous plaît dites-moi si je vous ai bien compris, voulez-vous dire comme ceci ?

donc pour une raison quelconque le résultat ne change pas non plus... (

une autre question : peut-être pouvez-vous ajouter par programme des URLs à celles qui sont autorisées ? (par exemple via une substitution de macro)
et franchement, je ne veux pas utiliser WebRequest car il n'est pas asynchrone.....
Raison: