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

 
Rewerpool:

Warum sollte man das überhaupt so schreiben?

Wenn Sie den EA nur auf ein Symbol setzen, wird er aber auf allen Symbolen funktionieren? Und der Magier wird sein eigenes sehen!

Ich bin verwirrt!

Im alten mql4 wurde die Bedingung vom Anfang bis zum Ende geprüft, unabhängig vom Ergebnis der Prüfung der ersten in der Liste der Bedingungen. Daher diese hässliche Schrift, der Wunsch, die Bearbeitungszeit zu verkürzen.

Heutzutage steht irgendwo geschrieben, aber ich weiß nicht mehr wo, wenn die erste Bedingung nicht erfüllt ist, dann wird die Prüfung abgebrochen. Dementsprechend macht es keinen Sinn, sich mit dem kleinen Finger des rechten Fußes am linken Ohr zu kratzen.

 

@Konstantin Nikitin Wenn ich also zu Beginn der Iteration folgendes schreibe


 for (int i=OrdersTotal()-1; i>=0; i--)
   {
   if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
  
   if (OrderSymbol() != Symbol()) continue;
   
   if (OrderMagicNumber() != Magic) continue;

Выставляться будут стопы и тейки любым ордерам? И не надо делать опрос на предмет кто торгует Бот или человек?
 
Rewerpool:

Wenn ich also zu Beginn der Iteration folgendes schreibe

void STOP_TAKE(void)
{
   int SPREAD    = (int)MarketInfo(Symbol(),MODE_SPREAD);
   if (stoploss<STOPLEVEL) stoploss=0; 
   if (takeprofit<STOPLEVEL) takeprofit=0;

     for(int i=0; i<OrdersTotal(); i++)
     {
          if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
          if(OrderSymbol()!=Symbol()) continue;
     
          int tip = OrderType();
          if(  tip!=OP_BUY && tip!=OP_BUYSTOP && tip!=OP_BUYLIMIT &&
               tip!=OP_SELL && tip!=OP_SELLSTOP && tip!=OP_SELLLIMIT ) continue;
     
          // переменные которые будут использоваться в любых ордерах
          int Ticket = OrderTicket();
          double    OOP = OrderOpenPrice(),
                    OSL = OrderStopLoss(),
                    OTP = OrderTakeProfit();
     
          //---
/* Если это удалить/заблокировать то будет работать со всеми ордерами не обращая внимания эксперта они или нет. Разблокировать, то сначала проверит ордера эксперта их нет то все остальные
          if( OrderMagicNumber() == Magic )
          { //----------Если Ордера Советника
               switch(tip)
               {
                    case OP_BUY:
                    case OP_BUYSTOP:
                    case OP_BUYLIMIT:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         }
                         break;
                         // end case
                         
                    default:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         } // end case
               } // end switch
               
               continue;
          }
*/
          switch(tip)
          {
               case OP_BUY:
               case OP_BUYSTOP:
               case OP_BUYLIMIT:
                    {
                         if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                         if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;       
                         if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                         else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                    }
                    break;
                    // end case
                         
               default:
                    {
                         if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                         if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                         if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                         else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                    } // end case
          } // end switch
     } // end for
} // end STOP_TAKE
Etwa so.
 

Guten Tag. Das schreiben sie.

"Das Produkt darf nur eine EX4-Datei enthalten, zusätzliche Dateien sind nicht erlaubt. Der Name der EX4-Datei und die Namen der Eingabeparameter müssen in lateinischen Buchstaben geschrieben werden. Es wird empfohlen,Ressourcen zu verwenden, um eine benutzerfreundliche Schnittstelle zu schaffen.

Aus Sicherheitsgründen sind im Programm keine Aufrufe von DLLs erlaubt. Wenn für das Demonstrationsprogramm Testdaten benötigt werden, sollte das Programm die erforderliche Datei selbst erstellen und den Benutzer darüber informieren. Sie können die erforderlichen Dateien auch mit der Funktion ResourceLoad hinzufügen. Beachten Sie jedoch, dass alle Produkte auf mögliche bösartige Aktivitäten geprüft werden, bevor sie auf dem Marktplatz veröffentlicht werden.

Es ist verboten, das Produkt in Abhängigkeit von Zeit, Art oder Anzahl der Handelskonten, Finanzinstrumente usw. einzuschränken. Alle derartigen Handlungen werden als käuferfeindlich angesehen und nicht toleriert."

Sagen Sie HOW..... Stellen Sie eine EA-Anfrage an einen Indikator.

 
Oleksandr Kulibaba:

Guten Tag. Das schreiben sie.

"Das Produkt darf nur eine EX4-Datei enthalten, zusätzliche Dateien sind nicht erlaubt. Der Name der EX4-Datei und die Namen der Eingabeparameter müssen in lateinischen Buchstaben geschrieben werden. Es wird empfohlen,Ressourcen zu verwenden, um eine benutzerfreundliche Schnittstelle zu schaffen.

Aus Sicherheitsgründen sind im Programm keine Aufrufe von DLLs erlaubt. Wenn für das Demonstrationsprogramm Testdaten benötigt werden, sollte das Programm die erforderliche Datei selbst erstellen und den Benutzer darüber informieren. Sie können die erforderlichen Dateien auch mit der Funktion ResourceLoad hinzufügen. Beachten Sie jedoch, dass alle Produkte auf mögliche bösartige Aktivitäten geprüft werden, bevor sie auf dem Marktplatz veröffentlicht werden.

Es ist verboten, das Produkt in Abhängigkeit von Zeit, Art oder Anzahl der Handelskonten, Finanzinstrumente usw. einzuschränken. Alle derartigen Handlungen werden als käuferfeindlich angesehen und nicht toleriert."

Sagen Sie HOW..... Stellen Sie eine EA-Anfrage an den Indikator.

Sie haben die Antwort selbst geschrieben: Verwenden Sie eine Ressource

//+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- 
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5"); 
   if(handle_ind==INVALID_HANDLE) 
     { 
      Print("Expert: iCustom call: Error code=",GetLastError()); 
      return(INIT_FAILED); 
     } 
//--- 
   return(INIT_SUCCEEDED); 
  }
Документация по MQL5: Программы MQL5 / Ресурсы
Документация по MQL5: Программы MQL5 / Ресурсы
  • www.mql5.com
В данном примере показано как проигрывать звуки из файлов Ok.wav и timeoit.wav, входящих в стандартную поставку терминала. Эти файлы находятся в папке означает папку, из которой запущен клиентский терминал MetaTrader 5.  Программным путем из mql5-программы каталог терминала можно узнать следующим образом: Расположение каталога данных терминала...
 
Vitaly Muzichenko:

Sie haben die Antwort selbst geschrieben: Verwenden Sie die Ressource

Danke für die Antwort. Aber ich habe sie bereits gelesen und versucht, sie einzufügen. Ich kann es nicht bekommen, ich mache etwas falsch oder setze es an der falschen Stelle ein. Ich rufe zu drei Indikatoren auf. Bitte beschreiben Sie dieses Skript ausführlicher.

Was, wo, welche Parameter... Ich danke Ihnen im Voraus.

//+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- 
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5"); 
   if(handle_ind==INVALID_HANDLE) 
     { 
      Print("Expert: iCustom call: Error code=",GetLastError()); 
      return(INIT_FAILED); 
     } 
//--- 
   return(INIT_SUCCEEDED); 
  }
 
Oleksandr Kulibaba:

Vielen Dank für die Antwort. Aber ich habe sie bereits gelesen und versucht, sie einzubauen. Entweder mache ich es falsch oder ich setze es an der falschen Stelle ein. Ich rufe zu drei Indikatoren auf. Bitte beschreiben Sie dieses Skript ausführlicher.

Was, wo, welche Parameter... Ich danke Ihnen im Voraus.

Erstellen Sie drei oder so viele Variablen, wie Sie benötigen, und rufen Sie sie wie im Beispielhandle_ind=iCustom(_Symbol,_Periode,"::Indikatoren\\blah-blah-blah) Code einfügen. Nur damit die Leute es verstehen!

iCustom ist DIES!

iCustom

Возвращает значение указанного пользовательского индикатора. 



double  iCustom( 
   string       symbol,           // имя символа 
   int          timeframe,        // таймфрейм 
   string       name,             // папка/имя_пользовательского индикатора 
   ...                            // список входных параметров индикатора 
   int          mode,             // источник данных 
   int          shift             // сдвиг 
   );
 
Wenn
if(handle_ind==INVALID_HANDLE) то это значит - не корректный хэндл
 
Rewerpool:

Erstellen Sie drei oder so viele Variablen, wie Sie benötigen, und rufen Sie sie wie im Beispielhandle_ind=iCustom(_Symbol,_Periode,"::Indicators\\blah-blah-blah) auf . Nur damit die Leute es verstehen!

iCustom ist DIES!

Wenn

Ich werde es ausprobieren. Ich danke Ihnen.

 
@Oleksandr Kulibaba Fügen Sie Ihren Code ein, Fehler! Verständnis haben! Gute Leute werden helfen! Es ist nicht klar, was Ihr Problem ist!
 
@Konstantin Nikitin Gute Arbeit. Aus dem Code entfernt
if ((OSL==0&&stoploss!=0)||(OTP==0&&takeprofit!=0))

Der Anschlag zuckt jetzt bei jedem Tick )))))


In Beitrag haben Sie auf die Code-Schließung für den Magier hingewiesen! Ich verstehe das! Nur die Situation ist wie folgt: Ich handele von Hand, aber plötzlich muss ich zurücktreten und die Kontrolle an den EA geben (Suche nach einem Muster und Einstiegspunkt). Ich möchte alle Vorgänge voneinander trennen. Aber das Anhalten und Herausnehmen, wie von allen gefordert. Vielleicht habe ich es noch nicht richtig verstanden!