Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 10

 
-Aleks-:
Natürlich verstehe ich, dass das Problem durch die Neuberechnung des Nullbalkens verursacht wird, aber ich weiß nicht, wie ich es lösen soll.

Jetzt ist 03 fehlerhaft.

Dies ist der richtige Ort:

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

Daten in einfachen Variablen speichern - dies funktioniert nur bei der ersten Berechnung des Indikators. Beim Null-Balken enthält die Variable, die die Daten des vorangegangenen Balkens enthalten sollte, die Daten des aktuellen Balkens, aber zum vorherigen Tick.

 
Dmitry Fedoseev:

Jetzt ist 03 fehlerhaft.

Dies ist der richtige Ort:

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

Daten in einfachen Variablen speichern - dies funktioniert nur bei der ersten Berechnung des Indikators. Beim Null-Balken hat die Variable, die die Daten des vorhergehenden Balkens enthalten sollte, dann die Daten des aktuellen Balkens, aber des vorherigen Ticks.


Ich verstehe es natürlich; ich frage mich, wie man das Problem ohne einen grafischen Puffer lösen kann - um Ressourcen zu sparen - Speicher?
 
-Aleks-:
Natürlich habe ich es, ich frage mich, wie das Problem ohne grafischen Puffer zu lösen - um Ressourcen zu sparen - Speicher?

Denken Sie über diesen Indikator nach. Es hat eine Menge statischer Variablen:

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

Sie werden anstelle von Puffern hergestellt.

Wenn IndicatorCounted()=0 ist, sollte LastTime auf Null gesetzt werden (die anderen sind nicht notwendig, aber wünschenswert).

Verschieben Sie dann am Anfang der Schleife die Werte:

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

        }
      else
        {
         cDir=pDir;
        }

Variablen, die mit "c" beginnen, sind der aktuelle Wert und mit "p" der vorherige Wert.

 
Hallo. Bitte helfen Sie mir mit dem Code. Ich versuche, ein Skript zu schreiben, das den verfügbaren Handelsverlauf in eine Datei schreibt. Aber irgendetwas scheint im Code falsch zu sein, denn als Ergebnis der Skriptausführung gibt es nur zwei Zeilen in der Datei: die Titelzeile (siehe im Code) und die Daten des ältesten Handels aus der Historie. Ich verstehe nicht, was los ist. Ich konnte es nicht allein herausfinden, also bitte ich um Hilfe.

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:
Hallo. Bitte helfen Sie mir mit dem Code. Ich versuche, ein Skript zu schreiben, das den verfügbaren Handelsverlauf in eine Datei schreibt. Aber irgendetwas scheint im Code falsch zu sein, denn als Ergebnis der Skriptausführung gibt es nur zwei Zeilen in der Datei: die Titelzeile (siehe im Code) und die Daten des ältesten Handels aus der Historie. Ich verstehe nicht, was los ist. Ich habe es nicht geschafft, sie selbst zu analysieren, also werde ich vielleicht um Hilfe bitten.
Dmitry hat einen guten Artikel geschrieben.
 
Artyom Trishkin:
Dmitry hat einen guten Artikel geschrieben.
Es ist genau das Skript, das ich brauche, aber es funktioniert immer noch nicht für mich, es hat mql5 und ich habe mql4, der Compiler generiert eine Menge Fehler, anscheinend kennt er viele unbekannte Wörter für sie :(
 
kosmo13:
Es ist genau das Skript, das ich brauche, aber es funktioniert immer noch nicht für mich, es hat mql5 und ich habe mql4, der Compiler generiert eine Menge Fehler, anscheinend kennt er viele unbekannte Wörter für sie :(
Welches Skript. Schauen wir uns das mal an.
 

Hallo. Ich brauche, umzu api.binaryteam.ru aus dem Indikator nach dem Alarm zu senden. Welche Zeilen sollten in die Datei indicator.mq4 eingefügt werden, um eine Zeile wie http://api.binaryteam.ru/?request=signal&key=12345472300af900f431234561234567&formname=risefall&type_account=demo&symbol=frxUSDCHF&duration=5m&amount=3&bet=CALL&source=metatrader nach dem Alarm an api.binaryteam.ru zu senden?

Es gibt ein Beispiel für das Senden an http://binaryteam.ru/addons/#api http://binaryteam.ru/files/mt4example_1.zip über WebRequest.Wenn Sie die folgenden Zeilen zur Datei indicator.mq4 hinzufügen

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);

}
  

schreibt 2016.11.16 13:50:01.783 Fehler in WebRequest.Fehlercode=4060

Wie kann man eine Anfrage ohne die Funktion WebRequest weitergeben? Gibt es andere Funktionen, die WebRequest ähnlich sind? um der Datei indicator.mq4 hinzugefügt werden zu können

 
Artyom Trishkin:
Was genau ist das Drehbuch? Schauen wir es uns an.

Im Anhang zu diesem Artikel heißt es sHistoryExport.mq5. Mein Compiler akzeptiert keine Funktionen, deren Namen mit "HistoryDeal..." und Bezeichnern, die mit "DEAL_..." beginnen. Hier ist der 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);  
  
}
//+------------------------------------------------------------------+
 
Woran erkenne ich in einem EA, dass ein Indikatoralarm eingetroffen ist?
Grund der Beschwerde: