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

 
-Aleks-:
Bien sûr, je comprends que le problème est causé par le recalcul sur la barre de zéro, mais je ne peux pas décider comment le résoudre.

Maintenant, 03 est glitchy.

C'est l'endroit :

      x=Pos;
      y=Neg;
      Pos=positive;
      Neg=negative;

Stockez les données dans des variables simples - cela ne fonctionnera que la première fois que l 'indicateur sera calculé. Ensuite, sur la barre zéro, la variable qui devrait contenir les données de la barre précédente contiendra les données de la barre actuelle, mais sur le tick précédent.

 
Dmitry Fedoseev:

Maintenant, 03 est glitchy.

C'est l'endroit :

      x=Pos;
      y=Neg;
      Pos=positive;
      Neg=negative;

Stockez les données dans des variables simples - cela ne fonctionnera que la première fois que l 'indicateur sera calculé. Ensuite, sur la barre zéro, la variable, qui devrait avoir des données de la barre précédente, aura des données de la barre actuelle, mais sur le tick précédent.


Je comprends, bien sûr ; je me demande comment résoudre le problème sans tampon graphique - pour économiser des ressources - de la mémoire ?
 
-Aleks-:
Bien sûr, je l'ai compris, je me demande comment résoudre le problème sans tampon graphique - pour économiser les ressources - la mémoire ?

Méditez sur cet indicateur. Il a beaucoup de variables statiques :

   static datetime LastTime=0;
   static int cDir=0;
   static int pDir=0;

Ils sont réalisés à la place des tampons.

Lorsque IndicatorCounted()=0 LastTime doit être mis à zéro (les autres ne sont pas nécessaires, mais souhaitables).

Puis, au début de la boucle, déplacez les valeurs :

if(Time[i]>LastTime)
        {
         LastTime=Time[i];
         pDir=cDir;

        }
      else
        {
         cDir=pDir;
        }

Les variables commençant par "c" sont la valeur actuelle et par "p" la valeur précédente.

 
Bonjour. Veuillez m'aider avec le code. J'essaie d'écrire un script qui écrit l'historique des transactions disponibles dans un fichier. Mais il semble que quelque chose ne va pas dans le code, car à la suite de l'exécution du script, il n'y a que deux lignes dans le fichier : la ligne de titre (voir dans le code) et les données de la transaction la plus ancienne de l'historique. Je ne comprends pas ce qui ne va pas. Je n'ai pas réussi à comprendre tout seul, alors je demande de l'aide.

string MyFileName="History_Of_Trades.csv";
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
//создаем файл и записываем в него заглавную строку
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн


  int file_handle=FileOpen(MyFileName, FILE_WRITE, " ");
  string mytext="Магик;Номер ордера;Время открытия;Время закрытия;Объем;Символ;Цена открытия;Цена закрытия;Своп;Прибыль";
  FileWrite(file_handle, mytext);
  FileClose(file_handle); 


//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
//записываем в файл данные по закрытым позициям
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
  
  for (int n=1; n<=OrdersTotal(); n++) {
    if (OrderSelect(n-1,SELECT_BY_POS,MODE_HISTORY)) {
      if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          
          mytext=OrderMagicNumber()+";"
                 +OrderTicket()+";"
                 +TimeToString(OrderOpenTime(),TIME_DATE|TIME_MINUTES)+";"
                 +TimeToString(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+";"
                 +DoubleToString(OrderLots(),2)+";"
                 +Symbol()+";"
                 +DoubleToString(OrderOpenPrice(),Digits)+";"
                 +DoubleToString(OrderClosePrice(),Digits)+";"
                 +DoubleToString(OrderSwap(),2)+";"
                 +DoubleToString(OrderProfit(),2);
                
       file_handle=FileOpen(MyFileName, FILE_READ|FILE_WRITE, " ");
       FileSeek(file_handle, 0, SEEK_END);
       FileWrite(file_handle, mytext);
       FileClose(file_handle);
       }}}}
 
kosmo13:
Bonjour. Veuillez m'aider avec le code. J'essaie d'écrire un script qui écrit l'historique des transactions disponibles dans un fichier. Mais il semble que quelque chose ne va pas dans le code, car à la suite de l'exécution du script, il n'y a que deux lignes dans le fichier : la ligne de titre (voir dans le code) et les données de la transaction la plus ancienne de l'historique. Je ne comprends pas ce qui ne va pas. Je n'ai pas réussi à l'analyser moi-même, c'est pourquoi je demande de l'aide.
Dmitry a écrit un bon article.
 
Artyom Trishkin:
Dmitry a écrit un bon article.
C'est exactement le script dont j'ai besoin, mais il ne fonctionne toujours pas pour moi, il a mql5 et j'ai mql4, le compilateur génère beaucoup d'erreurs, apparemment il connaît beaucoup de mots qui ne lui sont pas familiers :(
 
kosmo13:
Il y a juste le script dont j'ai besoin, mais il ne fonctionne toujours pas pour moi, il a mql5 et j'ai mql4, le compilateur génère beaucoup d'erreurs, apparemment il connaît beaucoup de mots qui ne lui sont pas familiers :(
Quel script. Jetons un coup d'œil.
 

Bonjour. J'ai besoin d'envoyer à api.binaryteam.ru à partir de l'indicateur après l'alerte. Quelles lignes faut-il ajouter au fichier indicator.mq4 pour envoyer une ligne comme http://api.binaryteam.ru/?request=signal&key=12345472300af900f431234561234567&formname=risefall&type_account=demo&symbol=frxUSDCHF&duration=5m&amount=3&bet=CALL&source=metatrader à api.binaryteam.ru après l'alerte.

Il y a un exemple d'envoi à http://binaryteam.ru/addons/#api http://binaryteam.ru/files/mt4example_1.zip via WebRequest .En ajoutant les lignes suivantes au fichier indicator.mq4

extern  string url="http://api.binaryteam.ru/";

extern  double  bet=1;

extern int expiration=1;

extern string key = "12345472300af900f431234561234567" ;

extern string type_account = "demo";

extern bool Flag = false;

extern string bettype;

.....
int start() {

....

условие покупки {

.....

Alert("алерт индюка  -  BUY!!!");

bettype = "CALL";

      Print("направление ставки: ",bettype);

      Flag = true;

Print(BinaryTeam());

  }

условие продажи {

.....  

Alert(""алерт индюка  -   SELL!!!");

bettype = "PUT";

      Print("направление ставки: ",bettype);

      Flag = true;

Print(BinaryTeam());

  }

  }

bool BinaryTeam()

{

   char post[],result[];

   int res;

      string headers;

    //--- для работы с сервером необходимо добавить URL

   //--- в список разрешенных URL (Главное меню->Сервис->Настройки, вкладка "Советники"):

      string formname = "risefall";

   string symbol = "frx" + Symbol();

   string duration = IntegerToString(expiration) + "m";

   string amount = DoubleToString(bet);

  if(Flag==false)

   {

      Print("не задано направление торговли");

      return(false);

   }

  

   //--- пример: http://api.binaryteam.ru/?request=signal&key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&formname=risefall&type_account=demo&symbol=frxUSDCHF&duration=5m&amount=3&bet=CALL&source=metatrader

  

   //--- собираем строку для отправки

   string send = "?request=signal" +

         "&source=metatrader" +

         "&type_account=" + type_account +

         "&bet=" + bettype +

         "&formname=" + formname +

"&date_start=now" +

         "&symbol=" + symbol +

         "&duration=" + duration +

         "&barrier=0" +

         "&amount=" + amount +

         "&key=" + key;

  

   Print(send);

  

   ResetLastError();



   int timeout=5000;

   res = WebRequest("GET",url+send,NULL,NULL,timeout,post,0,result,headers);

   if(res==-1)

     {

      Print("Ошибка в WebRequest. Код ошибки  =",GetLastError());

      MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);

     }

   else

     {

      Print(CharArrayToString(result));

      return(true);

     }

   Print("Непредвиденная ситуация");

   return(false);

}
  

écrit 2016.11.16 13:50:01.783 Erreur dans WebRequest.code d'erreur=4060

Comment passer une requête sans la fonction WebRequest ? Existe-t-il d'autres fonctions similaires à WebRequest ? pour pouvoir les ajouter au fichier indicator.mq4

 
Artyom Trishkin:
Quel est exactement le script. Jetons-y un coup d'œil.

Dans l'annexe de cet article, il s'appelle sHistoryExport.mq5. Mon compilateur n'accepte pas les fonctions dont le nom commence par "HistoryDeal..." et les identifiants par "DEAL_...". Voici le code :

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#property script_show_inputs

input bool     UseDateFrom = false; // Указывать дату начала
input datetime DateFrom=0; // Дата начала
input bool     UseDateTo=false; // Указывать дату окончания
input datetime DateTo=0; // Дата окончания



//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart(){

   datetime from,to;
  
   if(UseDateFrom){
      from=DateFrom;
   }
   else{
      from=0;
   }
  
   if(UseDateTo){
      to=DateTo;
   }
   else{
      to=TimeCurrent();
   }  
  
   if(!HistorySelect(from,to)){
      Alert("Ошибка выделение истории");
      return;
   }
  
   string FileName="history.csv";
  
   int h=FileOpen(FileName,FILE_WRITE|FILE_ANSI|FILE_CSV,";");
  
   if(h==INVALID_HANDLE){
      Alert("Ошибка открытия файла");
      return;
   }
  
   // первая строка, что бы знать, где что находится
  
   FileWrite(h,"Time","Deal","Order","Symbol","Type","Direction","Volume","Price","Comission","Swap","Profit","Comment");    
   // по всем сделкам

   for(int i=0;i<HistoryDealsTotal();i++){
      ulong ticket=HistoryDealGetTicket(i);
      if(ticket!=0){
        
         long type=HistoryDealGetInteger(ticket,DEAL_TYPE);
        
         if(type==DEAL_TYPE_BUY || type==DEAL_TYPE_SELL){
      
            long entry=HistoryDealGetInteger(ticket,DEAL_ENTRY);
      
            FileWrite(h,(datetime)HistoryDealGetInteger(ticket,DEAL_TIME),
                        ticket,
                        HistoryDealGetInteger(ticket,DEAL_ORDER),
                        HistoryDealGetString(ticket,DEAL_SYMBOL),
                        (type==DEAL_TYPE_BUY?"buy":"sell"),
                        (entry==DEAL_ENTRY_IN?"in":(entry==DEAL_ENTRY_OUT?"out":"in/out")),
                        DoubleToString(HistoryDealGetDouble(ticket,DEAL_VOLUME),2),
                        HistoryDealGetDouble(ticket,DEAL_PRICE),
                        DoubleToString(HistoryDealGetDouble(ticket,DEAL_COMMISSION),2),
                        DoubleToString(HistoryDealGetDouble(ticket,DEAL_SWAP),2),
                        DoubleToString(HistoryDealGetDouble(ticket,DEAL_PROFIT),2),
                        HistoryDealGetString(ticket,DEAL_COMMENT)                    
            );
         }
      }
      else{
         Alert("Ошибка выделения сделки, повторите попытку");
         FileClose(h);
         return;
      }
   }

   FileClose(h);

   Alert("Сохранение выполнено, см. файл "+FileName);  
  
}
//+------------------------------------------------------------------+
 
Comment puis-je savoir à partir d'un EA qu'un indicateur d'alerte est arrivé ?