Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 353

 
_new-rena:

dies (unten) funktioniert nicht, ich habe F_Path in den Explorer eingegeben, auf Enter geklickt, die Datei öffnet sich... Sieht die WinApi-Information so aus?

Wer verhindert, dass das FILE_COMMON-Flag beim Schreiben und Lesen verwendet wird? Die Datei ist für alle auf dem System installierten Terminals verfügbar. Sie befindet sich dann im gemeinsamen Ordner aller Terminals.

In ME Datei --> Gemeinsamen Datenordner öffnen

 
artmedia70:

Wer verhindert, dass das FILE_COMMON-Flag beim Schreiben und Lesen verwendet wird? Die Datei ist für alle auf dem System installierten Terminals verfügbar. Sie befindet sich im gemeinsamen Ordner aller Terminals.

In ME Datei --> Gemeinsamen Datenordner öffnen

Danke (!!!), ich werde es versuchen.
 

Hallo, ist jemand auf dieses Problem gestoßen, wenn er eine Handelsanfrage mit Parametern erstellt:

wenn ich die folgenden Parameter eingebe:

mrequest.action=TRADE_ACTION_DEAL;
mrequest.type_filling=ORDER_FILLING_FOK;

mrequest.type=ORDER_TYPE_BUY;

das Terminal meldet, dass ich eine ungültige Methode mrequest.type_filling angegeben habe(Auftragsausführungspolitik); wenn ich mrequest.type_filling=ORDER_FILLING_RETURN angebe, wird der Auftrag geöffnet, aber ich kann ihn nicht programmatisch schließen, weil das Terminal meldet, dass eine ungültige Methode verwendet wird. Ich führe den Expert Advisor auf einem Forex-Server aus, und auf anderen Servern funktioniert alles einwandfrei. Kann jemand eine Auftragsausführungsrichtlinie schreiben, die bei der Entwicklung von Handelsrobotern für diesen Broker verwendet werden kann? Ich danke Ihnen.
 

Es gibt einen mq4-Indikator mit Alert-Funktion.

Zum Beispiel:

//+------------------------------------------------------------------+
//|                                                    RSI-Alert.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_separate_window
//#property indicator_minimum 0
//#property indicator_maximum 100
#property indicator_buffers 3
#property  indicator_color1 LightSeaGreen
#property  indicator_color2 CLR_NONE
#property  indicator_color3 CLR_NONE
#property  indicator_width1 1
#property  indicator_width2 1
#property  indicator_width3 1
#property  indicator_style1 STYLE_SOLID
#property  indicator_style2 STYLE_DOT
#property  indicator_style3 STYLE_DOT
//---- input parameters
extern int RSIPeriod=48;
extern int ApplyTo=0;
extern bool AlertMode=true;
extern int OverBought=0;
extern int OverSold=0;
//---- buffers
double RSIBuffer[];
double RSIOBBuffer[];
double RSIOSBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator lines
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,RSIBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,RSIOBBuffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,RSIOSBuffer);
//---- name for DataWindow and indicator subwindow label
   short_name="RSI-Alert("+RSIPeriod+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
   SetIndexLabel(1,"OverBought");
   SetIndexLabel(2,"OverSold");
//----
   SetIndexDrawBegin(0,RSIPeriod);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int start()
  {
   int    i,counted_bars=IndicatorCounted();
//----
   if(Bars<=RSIPeriod) return(0);
//----
   i=Bars-RSIPeriod-1;
   if(counted_bars>=RSIPeriod) i=Bars-counted_bars-1;
   while(i>=0)
   {
      RSIBuffer[i]=iForce(NULL,0,RSIPeriod,1,0,i);
      RSIOBBuffer[i]=OverBought;
      RSIOSBuffer[i]=OverSold;
      i--;
   }
   
   if(AlertMode)
   {
      if(RSIBuffer[1]<OverBought && RSIBuffer[0]>=OverBought)
         Alert("RSI = "+ RSIBuffer[i]+ ", Sell.");
      else if(RSIBuffer[1]>OverSold && RSIBuffer[0]<=OverSold)
         Alert("RSI = "+ RSIBuffer[i]+ ", Buy.");
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
Wie kann man es so einrichten, dass entweder in der oberen linken Ecke des Unterfensters (wo normalerweise der Name des Indikators und die Parameter angezeigt werden) oder auf andere Weise angezeigt wird, ob das Signal eingeschaltet ist(extern bool AlertMode=true;) oder nicht?
 
Nilog:

Es gibt einen mq4-Indikator mit Alert-Funktion.

Zum Beispiel:

Wie kann man entweder in der oberen linken Ecke des Unterfensters (wo normalerweise der Name des Indikators und die Parameter angezeigt werden) oder auf andere Weise angeben, ob das Signal aktiviert(extern bool AlertMode=true;) oder deaktiviert ist?
Ausgabe von Text nach Objekten zum Beispiel.
 

In der Dokumentation steht das:

При тестировании в эксперте можно обрабатывать пользовательские события с помощью функции OnChartEvent(), но в индикаторах эта функция в тестере не вызывается. Даже если индикатор имеет обработчик OnChartEvent() и этот индикатор используется в тестируемом эксперте, то сам индикатор не будет получать никаких пользовательских событий.

Im Moment ist diese Aussage nicht relevant - in Indikatoren wird diese Funktion im Tester aufgerufen, mindestens ein Indikator kann Ereignisse empfangen, die von einem anderen Indikator im Tester erzeugt werden.

Das Problem ist, dass der Indikator, sobald er den Aufruf dieser Funktion erhält, keinen Zugriff auf die Daten hat, die in den auf globaler Ebene deklarierten Variablen gespeichert sind, und umgekehrt - alle in dieser Funktion vorgenommenen Änderungen werden nicht in den Variablen der globalen Zugriffsebene gespeichert.

Beispiele:

1. Das Objekt wird global deklariert und in der Funktion OnInit initialisiert. Es kann von der Funktion OnCalculate aus zugegriffen werden, aber wir erhalten eine Fehlermeldung in der Funktion OnChartEvent - ungültiger Zeiger

2. es gibt eine Funktion, die den Inhalt einer Variablen in das Journal ausgibt (die Variable ist global deklariert). Wenn wir diese Funktion von OnCalculate aus aufrufen, erhalten wir den erwarteten Wert, wenn wir die gleiche Funktion von OnChartEvent aus aufrufen, erhalten wir Unsinn.

 

Guten Tag!

Ich habe ein Problem bei der Verwendung von Ereignissen, insbesondere der Funktion OnChartEvent() in einem Indikator. Bei der Verwendung in einem Expert Advisor gibt es kein Problem, aber im Indikator funktioniert es nicht richtig. D.h. das Ereignis tritt ein, aber es gibt keine Möglichkeit, die vorhandenen Felder zu ändern. Beispiel:

//----------------------------------------------------------------------------------------------
int k;
int OnInit()
{
k = 0;
ihandleDE = iCustom(_Symbol, _Period, "DrawExtremums");
//< ... >
return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
Print("OnCalculate(): k =", k);
//< ... >
return(rates_total)

}

void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
string nameEv = "EXTR_UP";
if (sparam == nameEv)
{
Print("OnChartEvent(): k = ", k);
k++;

}

}

//----------------------------------------------------------------------------------------------

Als Ergebnis erhalten wir:

"OnCalculate(): k = 0" - immer.

"OnChartEvent(): k = 0,...,123332" - zählt von 0 bis ...

Wie kann das sein und warum!? Gibt es eine Möglichkeit, das Problem zu beheben? Wenn jemand das versteht, wäre ich für eine Antwort sehr dankbar.

P.S.: Diese Ungerechtigkeit tritt nur im Strategietester auf, in Echtzeit funktioniert alles einwandfrei.

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
dariamap:

Guten Tag!

Ich habe ein Problem bei der Verwendung von Ereignissen, insbesondere der Funktion OnChartEvent() in einem Indikator. Bei der Verwendung in einem Expert Advisor gibt es kein Problem, aber im Indikator funktioniert es nicht richtig. D.h. das Ereignis tritt ein, aber es gibt keine Möglichkeit, die vorhandenen Felder zu ändern. Beispiel:

//----------------------------------------------------------------------------------------------
int k;
int OnInit()
{
k = 0;
ihandleDE = iCustom(_Symbol, _Period, "DrawExtremums");
//< ... >
return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
Print("OnCalculate(): k =", k);
//< ... >
return(rates_total)

}

void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
string nameEv = "EXTR_UP";
if (sparam == nameEv)
{
Print("OnChartEvent(): k = ", k);
k++;

}

}

//----------------------------------------------------------------------------------------------

Als Ergebnis erhalten wir:

"OnCalculate(): k = 0" - immer.

"OnChartEvent(): k = 0,...,123332" - zählt von 0 bis ...

Wie kann das sein und warum!? Gibt es eine Möglichkeit, das Problem zu beheben? Wenn jemand das versteht, wäre ich für eine Antwort sehr dankbar.

P.S.: Diese Ungerechtigkeit tritt nur im Strategietester auf, in Echtzeit funktioniert alles einwandfrei.

Abend. Der Service Desk hat seinerzeit eine recht eindeutige Antwort zu diesem Thema gegeben: Das Terminal und der Strategietester sind zwei verschiedene Programme, und die Leistung der Expert Advisors/Indikatoren im Tester und im Terminal kann unterschiedlich sein. Was im Client-Terminal oft funktioniert, funktioniert im Strategy Tester nicht. Schreiben Sie an den Servicedesk, legen Sie Beweise vor und lassen Sie sie das Problem beheben.
 
Tapochun:
Guten Abend. Service Desk gab seinerzeit eine recht eindeutige Antwort zu diesem Thema: Das Terminal und der Strategietester sind zwei verschiedene Programme, und die Arbeit der EAs/Indikatoren im Tester und im Terminal kann sich erheblich unterscheiden. Was auf dem Client-Terminal funktioniert, funktioniert im Strategy Tester oft nicht. Wenden Sie sich bitte an den Service Desk und legen Sie ihm Beweise vor, damit er das Problem beheben kann.
Herzlichen Dank! Ich bin froh, dass das Problem nicht bei mir liegt.)
 
extern string Symbol1= "EURUSD";
extern string Symbol2= "GBRUSD";

  double Sell1=iFractals(Symbol1,240,MODE_UPPER,2);
  double Sell2=iFractals(Symbol2,240,MODE_UPPER,2);
Können Sie mir sagen, welchen Befehl ich schreiben muss, damit beim gleichzeitigen Öffnen der Fraktale Sell1 und Sell2 eine Order geöffnet wird?
Grund der Beschwerde: