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

 
Vladon:

Die Idee stammt von Ihnen, aber nicht der Code. Der Programmierer hat den Code geschrieben, nicht Sie, Sie haben die ToR geschrieben.

Stellen Sie sich vor, Windows-Nutzer fordern Open Source - ist das nicht absurd?

Soweit ich das verstanden habe, gehört der von den Experten verwendete Code MetaQuotes oder Ihnen persönlich?

Was hat das mit Windows zu tun? Erstens haben die Benutzer nicht das Recht, es zu verlangen, weil dieses Produkt zu Macrosoft gehört, und zweitens wird Macrosoft anfangen, von den Programmierern, die es geschrieben haben, offenen Quellcode für ihr Produkt zu verlangen, und sie werden sich die Finger verdrehen und ihn nicht geben.

 
Vladon:

Aah :-=) es gibt also Quellen vor dem Schutz? was wollen Sie dann noch? Man hat Ihnen gesagt, dass niemand den offenen Quellcode von geschützten EA herausgeben wird, und ich würde ihn auch nicht herausgeben. Und wenn es eine Anforderung gäbe, den Quellcode Ihres Produkts nach Fertigstellung zu verlangen.

Ich hätte die Aufgabe abgelehnt.

Was brauchen Sie dann noch? Es gibt den Quellcode vor der Verteidigung, so ist es das gleiche wie der Berater mit der Verteidigung. sie sollten gleich gut funktionieren.

Im Laufe der Arbeit des EA wurden Änderungen vorgenommen, verschiedene Funktionen hinzugefügt usw., aber es gibt keinen offenen Quellcode mit diesen Änderungen.
 
ComplexFX:
Im Laufe der Arbeit des Expert Advisors wurden Änderungen vorgenommen, verschiedene Funktionen hinzugefügt usw., aber es gibt keinen offenen Quellcode mit diesen Änderungen.

dann denke ich, dass die Wahrheit auf Ihrer Seite ist.

Soweit ich das verstanden habe, gehört der von den Experten verwendete Code MetaQuotes oder Ihnen persönlich?

Wenn ich den Code schreibe, gehört er mir persönlich.MetaQuotes ist Eigentümer der Programmiersprache.

alles ist gerecht.

 
Können Sie mir sagen, wie ich eine offene Order in Expert Advisor schließen kann? Ich weiß, wie man eine Position mit Stop Loss oder Take Profit schließt. Wie kann ich das manuell machen?
 
pogeon:
Können Sie mir sagen, wie ich eine offene Order in Expert Advisor schließen kann? Ich weiß, wie man eine Position mit Stop Loss oder Take Profit schließt. Wie kann man das manuell machen?
In mql5 wird eine offene Position durch gegenläufige Aufträge geschlossen, deren Gesamtvolumen dem Volumen einer geschlossenen Position entspricht.
 
progeon:
Können Sie mir bitte sagen, wie man eine offene Order in einem Expert Advisor schließt? Ich weiß, wie eine Position bei Stop Loss oder Take Profit geschlossen wird. Wie kann man das manuell machen?

Oder verwenden Sie die Klasse CTrade, die eine Funktion hat

trade.PositionClose(_Symbol);

etwas wie dies

https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/ctrade/ctradepositionclose

Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionClose
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionClose
  • www.mql5.com
Стандартная библиотека / Торговые классы / CTrade / PositionClose - Документация по MQL5
 
Yedelkin: In mql5 wird eine offene Position durch gegenläufige Aufträge geschlossen, deren Gesamtvolumen dem Volumen der geschlossenen Position entspricht.

lazarev-d-m: Oder verwenden Sie die CTrade-Klasse, es gibt eine Funktion

Die Methode PositionClose() der Klasse CTrade schließt eine Position auch mit entgegengesetzten Aufträgen.

 

Bitte geben Sie mir einen Rat, wie ich diese Situation lösen kann oder warum. Ich arbeite noch nicht so lange mit MQL5, habe also noch nicht genügend Erfahrung.

Ich habe versucht, einen EA mit mehreren Währungen zu erstellen, ohne Klassen zu verwenden. Leider habe ich keinen ausführlichen Artikel über EAs mit mehreren Währungen gefunden.

Ich habe das folgende Stück Code geschrieben.

int nomer_instr; // dies ist die Indexnummer der Währung im Array der Währungsnamen

string Name_symbol[6] = { "AUDUSD", "EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" } ; // Textfeld der Währungsnamen: in [0]-"AUDUSD", 1-"EURUSD", 2-"GBPUSD", 3-"USDCAD", usw.

double Close_buf[], Open_buf[], High_buf[], Low_buf[]; //Basis-Arrays für Candlestick-Parameter

datetime Time_buf[]; //Basis-Array der Öffnungszeit der Bar

double Close_H1[6][150], Open_H1[6][150], High_H1[6][150], Low_H1[6][150]; // Arrays für Parameter von Multi-Currency-EA-Candlesticks für H1-Zeitrahmen

// die Anzahl der Zeilen im Array entspricht der Anzahl der analysierten Währungen

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

double Close_H4[6][150], Open_H4[6][150], High_H4[6][150], Low_H4[6][150]; // Arrays für Parameter der Candlesticks des Multicurrency Expert Advisors für H4-Zeitrahmen

// Die Anzahl der Zeilen im Array entspricht der Anzahl der analysierten Währungen

datetime Time_H4[6][150]; // array bar open time



int OnInit()

{

}

void OnDeinit(const int reason)
{
//---
ArrayFree(Time_buf);
ArrayFree(Close_buf);
ArrayFree(Open_buf);

ArrayFree(High_buf);

ArrayFree(Low_buf);

}


void OnTick()

{

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

Hier ist ein Stück Code zur Bestimmung des Zeitpunkts, wenn ein neuer Balken öffnet Nev_Time[0]

und die Seriennummer des Barrens, der im Rahmen der Prüfung oder des Handels bearbeitet wird

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

ArraySetAsSeries(Close_buf, true); //Setzen der Indizierung für das Array close_array wie in timeseries
ArraySetAsSeries(Open_buf, true); //Setzen der Indizierung für das Array open_array wie in timeseries
ArraySetAsSeries(High_buf, true); //Setzen der Indizierung für das Array high_array wie in timeseries
ArraySetAsSeries(Low_buf, true); //Setzen der Indizierung für das Array low_array wie in timeseries

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


for( nomer_instr=0; nomer_instr<=5; nomer_instr++ )
{


//========================================================================
CopyTime( Name_symbol[nomer_instr], PERIOD_H1,0,160,Time_buf); // kopiert historische Zeitdaten für jeden Takt in den Puffer
CopyClose( Name_symbol[nomer_instr], PERIOD_H1,0,160,Close_buf); // kopiert historische Daten für jeden Takt in den Puffer
CopyOpen( Name_symbol[nomer_instr], PERIOD_H1,0,160,Open_buf); // kopiert die für jeden Balken geöffneten Verlaufsdaten in den Puffer
CopyHigh( Name_symbol[nomer_instr], PERIOD_H1,0,160,high_buf); // Kopieren der historischen Daten High für jeden Bar in den Puffer
CopyLow( Name_symbol[nomer_instr], PERIOD_H1,0,160,low_buf); // Kopieren der historischen Tiefstwerte für jeden Takt in den Puffer
//========================================================================

for( i=1; i<=145; i++ )
{
Time_H1[nomer_instr][i]=Time_buf[i];
Close_H1[nomer_instr][i]=Close_buf[i];
Open_H1[nomer_instr][i]=Open_buf[i];
High_H1[nomer_instr][i]=High_buf[i];
Low_H1[nomer_instr][i]=Low_buf[i];
}

//======================================================================================
// Überprüfung der Zeitverschiebung der generierten Candlestick-Daten eines Stunden-Zeitrahmens

if( Schetchik_svech > 8 && Schetchik_svech < 15 )
{
if( nomer_instr == 5 )
{
Alert("================================================");
Alert(" bar number = ",Schetchik_svech,", bar open time Nev_Time[0]=",Nev_Time[0]);
Alert(" Instrumentennummer: nomer_instr=",nomer_instr,", instrument: Name_symbol[nomer_instr]=",Name_symbol[nomer_instr]);
Alert("---------------------------------------------------------");
for(( i=1; i<=5; i++ )
{
Alert("i=",i,", Time_H1[nomer_instr][i]=",Time_H1[nomer_instr][i],", Close_H1[nomer_instr][i]=",Close_H1[nomer_instr][i]);
}
}
}
//======================================================================================

} // Ende der Schleife für die verwendeten Währungen im H1-Zeitrahmen


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

Hier ist der gleiche Teil des Diagramms für den H4-Zeitrahmen

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


} // Ende der Funktion OnTick()


Bei der Überprüfung der Leistung dieser Software kam ich zu einem unerwarteten Ergebnis:

- Für den Fall von H1, wenn die Ausgabe der Parameter von Bars für das Diagramm, auf dem der Expert Advisor steht, haben wir eine Stunde Zeitunterschied zwischen der Eröffnung der Null-Bar und der ersten Bar.

Beispiel: Der Expert Advisor befindet sich auf dem EURUSD-Chart und der Zeitpunkt der Eröffnung des Nullbalkens ist Nev_Time[0]=2011.01.03 13:00:00, dann ist der Zeitpunkt der Eröffnung des ersten Balkens Time_H1[1][1]=2011.01.03 12:00:00

Das Ergebnis entspricht dem gesunden Menschenverstand.

- Jetzt befindet sich der Expert Advisor auf demselben Chart und wir analysieren die Daten einer beliebigen anderen Währung, z. B. AUDUSD:

Zeit der Eröffnung des Nullbalkens Nev_Time[0]=2011.01.03 13:00:00, dann die Öffnungszeit des 1. Balkens Time_H1[1][1]=2011.01.03 11:00:00

Dieses Ergebnis ist einfach inakzeptabel, aber ich habe in den Artikeln keine Gründe für diesen Effekt gefunden.

Bitte raten Sie mir, wie ich dieses Ärgernis loswerden kann. Ich kann nicht für jede Währung einen Expert Advisor schreiben.

Wir danken Ihnen für Ihr Feedback.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Boris.45: Zeitpunkt des Öffnens des Nullbalkens Time_H1[1][1]=2011.01.03 13:00:00, dann der Zeitpunkt des Öffnens des ersten Balkens Time_H1[1][1]=2011.01.03 11:00:00
Und was gibt Time_H1[1][0] zurück?
 
Yedelkin:

Was gibt Time_H1[1][0] zurück?

Ich verwende dieses Element des Arrays nicht, da ich direkt zum Algorithmus für die Suche nach Fraktalen auf den letzten 5 Balken übergehe. Und Time_H1[1][0] ist die Eröffnungszeit des Null-Balkens, bei dem die Parameter dieses Balkens noch nicht gebildet wurden. Ich kann mich irren, aber aus eigener Erfahrung weiß ich, dass die Verwendung von Parametern eines Null-Balkens zur Bildung von Zeitreihen zu deren Verzerrung führt.

Grund der Beschwerde: