Gemeinsam lernen und schreiben in MQL5 - Seite 4

 
Hallo! Kann mir jemand sagen, ob ich die Indikatoren in meinem EA richtig aufgerufen habe?

double perceptron()
{
double w1 = x1 - 100;
double w2 = x2 - 100;
double w3 = x3 - 100;
double w4 = x4 - 100;
double a1 = iCustom(NULL,0, "Custom CCI", 0);
double a2 = iCustom(NULL,0, "Custom CCI", 7)
double a3 = iCustom(NULL,0, "Custom CCI", 14);//das ist CCI

double a4=iMA(NULL,0,21,0,0,0);//das ist Force Index

return(w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4);
}
 
Avelox   :
Hallo, kann mir bitte jemand sagen, ob ich die Indikatoren in meinem EA richtig aufgerufen habe?

double perceptron()
{
double w1 = x1 - 100;
double w2 = x2 - 100;
double w3 = x3 - 100;
double w4 = x4 - 100;
double a1 = iCustom(NULL,0, "Custom CCI", 0);
double a2 = iCustom(NULL,0, "Custom CCI", 7)
double a3 = iCustom(NULL,0, "Custom CCI", 14);//das ist CCI

double a4=iMA(NULL,0,21,0,0,0);//das ist Force Index

return(w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4);
}


Nein.

iCustom gibt, wie jede andere Funktion zum Aufrufen von Indikatoren, den Indikator-Handle zurück. Lesen Sie die Dokumentation.

 

Ich danke Ihnen! Dann so!? double a2 = iCCI(NULL,0,7, 0);

double a4=iForce(NULL,0,21,0,0);

Der Compiler akzeptiert auch die vorherige Version.

 

Sehen Sie ein Beispiel für unseren kundenspezifischen Alligator-Indikator https://www.mql5.com/en/code/9

Dort:

  1. Man erhält einen Griff(iMA)
  2. Überwacht, wie viele Daten von diesem Handle berechnet werden(BarsCalculated)
  3. Kopieren des Datenbereichs(CopyBuffer)
Alligator
Alligator
  • Stimmen: 14
  • 2010.01.26
  • MetaQuotes Software Corp.
  • www.mql5.com
The Alligator Indicator is a combination of Balance Lines (Moving Averages).
 
Avelox   :

Ich danke Ihnen! Dann so!? double a2 = iCCI(NULL,0,7, 0);

double a4=iForce(NULL,0,21,0,0);

Der Compiler wird auch mit der vorherigen Variante zufrieden sein.


Der Compiler ist sehr gut. Ich habe ein solches Codefragment bei der Portierung eines der 4-Compiler-Indukes erhalten:


   iMA1Handle=iMA(NULL,0,Period1/2,0,3,PRICE_CLOSE); // Не забыть потом перемножить на 2
   iMA2Handle=  iMA(NULL,0, Period1,   0,3,PRICE_CLOSE);
   SQPeriod=NormalizeDouble(MathSqrt(Period1),0);

... Бла-бла-бла ...

So sah es am 4:

   while (i>=0)
      {
         ExtMapBuffer2[i]=2*iMA(NULL,0,PeriodX/2,0,3,PRICE_CLOSE,i);
         ExtMapBuffer3[i]=  iMA(NULL,0, PeriodX,0,3,PRICE_CLOSE,i);
         ExtMapBuffer4[i]=ExtMapBuffer2[i]-ExtMapBuffer3[i];
         i--;
      }
   i=i2; // Возврат i для расчёта значений индюка
   while (i>=0)
      {
         ExtMapBuffer1[i]=iMAOnArray(ExtMapBuffer4,0,NormalizeDouble(MathSqrt(PeriodX),0),0,3,i);

... Бла-бла-бла ...

Ich habe es nicht geschafft, Zeile für Zeile zu übersetzen, weil iMAOnArray in 5 nicht vorhanden ist, und ich möchte nicht include aus beta verwenden. Nun, zuerst habe ich 2*iMa.... übertragen und konnte nicht verstehen, warum die Ausgabe so miserabel ausfällt. Ich wurde richtig wütend. Ich wollte gerade an das Forum schreiben. Dann habe ich es herausgefunden - meine Gewohnheit hat die Oberhand gewonnen. Der Compiler akzeptiert dies, weil das zurückgegebene Handle in 5 den Datentyp Int (eigentlich eine Zahl) hat und mit 2 multipliziert werden kann. Aber der Ausgabegriff ist eine große Frage, und so wird es nicht funktionieren

 

Ich beginne mit dem Versuch, das System auf 5 zu migrieren und gerate sofort in Schwierigkeiten

//+------------------------------------------------------------------+
//|                                                  GetInternet.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#import "wininet.dll"
  int InternetAttemptConnect (int x);
  int InternetOpenA(string sAgent, int lAccessType, 
                    string sProxyName = "", string sProxyBypass = "", 
                    int lFlags = 0);
  int InternetOpenUrlA(int hInternetSession, string sUrl, 
                       string sHeaders = "", int lHeadersLength = 0,
                       int lFlags = 0, int lContext = 0);
          
  int InternetReadFile(int hFile, int& sBuffer[], int lNumBytesToRead, 
                       int& lNumberOfBytesRead[]);
  int InternetCloseHandle(int hInet);


#import "stdlib.ex5"
#import
input int Step = 300;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("Старт...");
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
    Comment(GetURL("http://www.forexremote.net"));
    
  }
//+------------------------------------------------------------------+


//+----------------------------------------------------------------------------------------------------------+
//| Функция получения WEB страницы                                                                           |
//+----------------------------------------------------------------------------------------------------------+
string GetURL(string url)
{
   int rv = InternetAttemptConnect(0);
   if(rv != 0)
     {
       Alert("Ошибка при вызове InternetAttemptConnect()");
       return("");
     }

   int hInternetSession = InternetOpenA("Microsoft Internet Explorer", 1, "", "", 0);
   if(hInternetSession <= 0)
     {
       Alert("Ошибка при вызове InternetOpenA()");
       return("");         
     }

   int hURL = InternetOpenUrlA(hInternetSession, url, "", 0, 0, 0);
   if(hURL <= 0)
    {
       Print("Ошибка получения данных с узла!");
       //fComment("Ошибка получения данных с узла!",true);
       InternetCloseHandle(hInternetSession);
       return("");         
     } 
          
   int cBuffer[256];
   int dwBytesRead[1]; 
   string TXT = "";
   while(!IsStopped())
     {
       bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead);
       if(dwBytesRead[0] == 0)
           break;
       string text = "";   
       for(int i = 0; i < 256; i++)
         {
              text = text + CharToString(cBuffer[i] & 0x000000FF);
              if(StringLen(text) == dwBytesRead[0])
                  break;
              text = text + CharToString(cBuffer[i] >> 8 & 0x000000FF);
              if(StringLen(text) == dwBytesRead[0])
                  break;
           text = text + CharToString(cBuffer[i] >> 16 & 0x000000FF);
           if(StringLen(text) == dwBytesRead[0])
               break;
           text = text + CharToString(cBuffer[i] >> 24 & 0x000000FF);
         }
       TXT = TXT + text;
       //Sleep(500);

     }
     InternetCloseHandle(hInternetSession);
     return(TXT);
}
//+----------------------------------------------------------------------------------------------------------+
//| Конец Функции получения WEB страницы                                                                     |
//+----------------------------------------------------------------------------------------------------------+
Kompilieren mit 0 Fehlern, aber das Skript funktioniert nicht :-(
 
maxandsoft   :

Ich versuche, das System auf einen Fünfer zu übertragen, und es klappt sofort.

Kompilieren mit 0 Fehlern, aber das Skript funktioniert nicht :-(


Was meinen Sie mit "Drehbuch"? Nach den Funktionen im Code zu urteilen, haben Sie EA-Code veröffentlicht. Blick auf den Übergang mit MQL4
 
Rosh   :


Was verstehen Sie unter der Bezeichnung "Skript"? Nach den Funktionen im Code zu urteilen, haben Sie EA-Code veröffentlicht. Sehen Sie sich den Übergang mit MQL4 an


Ja, es ist ein EA, natürlich wortwörtlich. Ich muss eine Antwort vom Server mit wininet.dll erhalten
 
maxandsoft   :


Ja, genau ein Berater, natürlich wortwörtlich. Ich muss eine Antwort vom Server mit wininet.dll erhalten

Versuchen Sie, Unicode-Versionen dieser Funktionen zu verwenden. MQL5 verwendet Unicode-Kodierung.

 
Rosh   :

Versuchen Sie, Unicode-Versionen dieser Funktionen zu verwenden. MQL5 verwendet Unicode.



Der Punkt ist, dass, wenn ich es während der Fehlersuche kompilieren es wirft mich zurück zu den MQL-Editor, ohne sogar einen Fehler zu geben. Und wenn Sie es einfach auf den Chart ziehen, erscheint es nicht einmal darin, d.h. weder das Debuggen noch das Starten des EA führt zu Fehlern