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

 
barabashkakvn:
Ich stimme zu, was das int(round) betrifft. Ich danke Ihnen. Eine explizite Typkonvertierung würde nicht schaden. Obwohl es ohne explizite Typkonvertierung funktionierte.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty:
Ich stimme zu, was das int(round) betrifft. Ich danke Ihnen. Eine explizite Typkonvertierung würde nicht schaden. Aber es funktionierte auch ohne explizite Typkonvertierung.
Es hat funktioniert, aber die Bemerkungen des Compilers... Sie sind lästig.
 
barabashkakvn:

Ich habe keine Fehler. Der Build ist der neueste.

Danke, das MT5-Update hat geholfen. Der Fehler ist weg. der Build war vom 23. Juli 2013. im alten Build gab es übrigens keine Typumwandlungsbefehle, deshalb habe ich sie nicht bemerkt.

Wer hätte solch gravierende Fehler vom Compiler erwartet.

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty:

Danke, das MT5-Update hat geholfen. Der Fehler ist verschwunden. Der Build war vom 23. Juli 2013. Im alten Build gab es übrigens keine Typumwandlungsgarantien, so dass ich sie nicht bemerkt habe.

Wer hätte solch gravierende Fehler vom Compiler erwartet.

Die Hauptsache ist, dass es funktioniert hat :). Das ist alles, geh schlafen.
 

Sie müssen das Minimum im Zeitintervall finden. Ich habe den folgenden Code erstellt, um das Minimum im Zeitintervall zu finden:

datetime ts=st+StartTime*60;// начало временного диапазона в секундах от 01.01.1970
int tss=(int)ts;//преобразование в секунды
Alert( "tss",tss);
datetime tsp=st+StopTime*60;// конец временного диапазона в секундах от 01.01.1970
int tspp=(int)tsp;//преобразование в секунды

Um Minima in diesem Intervall zu finden, verwende ich die Funktion CopyLow:

double Low[];
CopyLow(_Symbol,_Period,tss,tspp,Low); 

Dann erhalte ich, wenn ich es richtig verstehe, ein eindimensionales ArrayLow[],

Ich suche das Minimum darin mit ArrayMinimum:

int start=0;
int count=WHOLE_ARRAY; 
double min=ArrayMinimum(Low,tss, tspp);  
Alert("min=",min);

Ich habe versucht, heute eine Startzeit von 1 Stunde und eine Endzeit von 2 Stunden einzustellen und Alert aufzurufen, um min=-1 zu prüfen.

Frage: Sind bei dieser Aufgabe die Funktionen richtig gewählt, um dieses Problem zu lösen, oder gibt es irgendwo einen Fehler? Ich muss den Mindestpreis erhalten.

 
Hallo. Liebe Trader, bitte helfen Sie mir bei der korrekten Gestaltung des Programmteils für 3 Folien in einem Multi-Currency EA.

Ich habe versucht, es im Handbuch nachzuschlagen, aber es ist ein klassenbasiertes Beispiel, und dazu bin ich noch nicht bereit.

Ich möchte einen EA schreiben, ohne Klassen zu verwenden. Ich habe alles Unwichtige aus der Betrachtung ausgeschlossen und für jeden 3 Zettel bekommen

Ich habe das folgende Programmfragment geschrieben:

Eingabe int Kurtz_Period=5; // schnelllebige Kurtz-Periode

input int Mittel_Period=8 ;

Eingabe int Long_Period=13;

int maHandle; //Handle des Indikators Gleitender Durchschnitt

double ma_buf[]; // Dies ist ein Puffer-Array für die Messwerte des gleitenden Durchschnitts der MA-Funktion

// und dann in die entsprechenden Arrays kopiert werden

datetime Time_buf[]; // Dies ist ein Array der Öffnungszeit der Bar

datetime Time_[6][150]; // Array der Öffnungszeit des Balkens

double Kurtz[6][70]; //das ist ein Array für den schnell gleitenden Kurtz, die Zeilennummern entsprechen den Anzahlen der verwendeten Währungen, während die Spalten die Anzahl der gleitenden Währungen sind

double Mittel[6][70]; // dies ist das Array für den gleitenden Durchschnitt Mittel

double Long[6][70]; // dies ist ein Array für eine lange Periode gleitender Long

string Name_symbol[6] = { "AUDUSD", "EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" } ; // Dies ist ein Text-Array mit Währungsnamen:

int nomer_instr; // dies ist eine Instrumentennummer (Währung), nur um die Zyklen nach Währungen zu organisieren

int OnInit()

{

//-----

//-------

}

void OnDeinit(const int reason)

{

//---

ArrayFree(Time_buf);

ArrayFree( ma_buf); // Nullstellung des freigegebenen Arrays

//-------

}

void OnTick()

{

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

ArraySetAsSeries(time_buf, true); //set indexing for the time_array array as in timeseries

ArraySetAsSeries(ma_buf, true); //Setzen der Indizierung für das Array ma_buf wie in timeseries

for( nomer_instr=0; nomer_instr<=5; nomer_instr++ ) // dies ist eine Schleife über alle verwendeten Währungen

{

int digit = int( SymbolInfoInteger( Name_symbol[nomer_instr], SYMBOL_DIGITS)); // dies ist die Anzahl der Ziffern in der Währungsangabe

CopyTime( Name_symbol[nomer_instr], PERIOD_M1,0,160,Time_buf); // historische Zeitdaten für jeden Balken in den Puffer kopieren

for( i=1; i<=145; i++ ) Time[nomer_instr][i]=Time_buf[i]; // Zeitpunkt der Eröffnung des ersten Balkens

//#############################################################################################

//Blockgenerierende Zählungen der ersten 3 Schiebetakte:Kurtz, Mittel, Long

manHandle = iMA( Name_symbol[nomer_instr],PERIOD_M1, Kurtz_Period , 0, MODE_SMMA, PRICE_CLOSE );

if( CopyBuffer(maHandle,0,0,155,ma_buf)<0 )

{

Alert("Fehler beim Kopieren von Indikatorpuffern ---PERIOD_M1,Kurtz_Period--- Gleitender Durchschnitt - Fehlernummer:",GetLastError());

Rückkehr;

}

for( i=1; i<=45; i++ ) Kurtz[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit);

/*

//===============================================================

// BLOCK-Prüfung auf Balkenversatz wie bei Zeitreihen und Genauigkeit der Zahlennormalisierung

// MA-5 mit schneller Bewegung

if( Multi_Torgi == 0 && Optim_parametrov == nomer_instr ) // dies ist eine Taste zur Auswahl des Modus des Expert Advisors, jetzt ist er im Debug-Modus

{

for( i=1; i<=5; i++ )

{

if(i==1) Alert("====================");

if(i==1) Alert(" Eröffnungszeit des 1. Taktes: Time[nomer_instr][1]=",Time[nomer_instr][1] );

Alert(" Taktnummer: i=",i,", MA_buf[i]=",MA_buf[i],", Kurtz[nomer_instr][i]=",Kurtz[nomer_instr][i]);

}

}

//=================================================================

*/

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

maHandle = iMA( Name_symbol[nomer_instr],PERIOD_M1, Mittel_Period, 0, MODE_SMMA, PRICE_CLOSE );

if(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alert("Fehler beim Kopieren von Indikatorpuffern ===PERIOD_M1, Mittel_Period,=== Gleitender Durchschnitt - Fehlernummer:",GetLastError());

Rückkehr;

}

for( i=1; i<=45; i++ ) Mittel[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit);

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

maHandle = iMA( Name_symbol[nomer_instr],PERIOD_M1, Long_Period, 0, MODE_SMMA, PRICE_CLOSE );

if(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alert("Fehler beim Kopieren von Indikatorpuffern ===PERIOD_M1, Long_Period,===Moving Average - Fehlernummer:",GetLastError());

Rückkehr;

}

for( i=1; i<=45; i++ ) Long[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit);

// Ende des Blocks, der die Zählungen der ersten 3 Folien bildet: Kurtz, Mittel,Long

//#############################################################################################

} // Ende der Schleife nach verwendeten Währungen

//============================================================

Andere Programmbetreiber

//============================================================

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

}// Ende von OnTick()

//+------------------------------------------------------------------+

Bei der Kompilierung dieses Programms werden keine Fehler festgestellt, aber bei der Prüfung im Logbuch für jeden Beleg wird ein

Fehlermeldung: 4806 lautet "angeforderte Daten nicht gefunden".

Bitte sagen Sie mir, wo ich den Fehler habe.

Ich danke Ihnen.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
DC2008:

Verstehen Sie nicht das Prinzip des Typecasting? Es ist ganz einfach:

Jetzt scheint es klar zu sein) Es stellt sich heraus, dass der Operand int st von einem anderen Typ ist als datetime tp[].

Aus diesem Grund gibt es bei der Operation keine Umrechnung in Sekunden:

int st=tp[0];

Ich habe versucht, das Minimum im Zeitintervall zu finden. Ich bin mir nicht sicher, ob ich es richtig mache. Können Sie den vorherigen Beitrag sehen?

Wie können Alert oder Comment ohne neue Ticks aufgerufen werden, um Wochenendprüfungen durchzuführen?

 
forexman77:

Sie müssen das Minimum im Zeitintervall finden. Ich habe den folgenden Code erstellt, um das Minimum im Zeitintervall zu finden:

Um Minima in diesem Intervall zu finden, verwende ich die Funktion CopyLow:

Dann erhalte ich, wenn ich es richtig verstehe, ein eindimensionales ArrayLow[],

Ich suche das Minimum darin mit ArrayMinimum:

Ich habe versucht, heute eine Startzeit von 1 Stunde und eine Endzeit von 2 Stunden einzustellen und Alert aufzurufen, um min=-1 zu prüfen.

Frage: Sind bei dieser Aufgabe die Funktionen richtig gewählt, um dieses Problem zu lösen, oder gibt es irgendwo einen Fehler? Sie müssen den Mindestpreis erhalten.

Bitte sorgfältig lesen:

Rückgabewert.

Die Funktion gibt den Index des gefundenen Elements zurück, wobei die Serialität des Arrays berücksichtigt wird. Schlägt siefehl, gibt die Funktion -1 zurück.

Daher sollte es so sein:

Alert("min=",Low[ArrayMinimum(Low)]);
 

Prüfen und testen Sie an den Wochenenden und darüber hinaus, müssen Sie Skript.

 
DC2008:

Prüfen und testen Sie an den Wochenenden und darüber hinaus, müssen Sie Skript.

Ich danke Ihnen!