[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 564

 
TarasBY:

Wenn Sie lernen wollen, wie man programmiert, analysieren Sie entweder den Code anderer Leute (dafür ist CodaBase da) oder folgen Sie dem Algorithmus für die jeweilige Aufgabe. Sie zu bitten, einen Code für Sie zu schreiben, ist die hoffnungsloseste Art zu lernen. Meistens erhalten Sie nicht den besten Code für Ihre Aufgabe, etwa so wie (allegorisch), wenn Ihr Nachbar jede Minute an Ihrer Tür klingelt und fragt: "Wie heißen Sie?" - hier geht es um unnötige (überflüssige) Berechnungen.

Ich stimme mit Ihnen völlig überein. Sie haben zu 100 % Recht. Das ist der richtige Weg und ich habe versucht, ihn zu befolgen. Das Studium von MQL4 ohne die Lehrbücher und das Lesen ohne Grund führte jedoch zu nichts. Ich musste sowieso den Code von jemand anderem analysieren, da ich meine eigenen verrückten Ideen größtenteils nicht in das Programm einbringen konnte. Ich habe begonnen, die Strategie in ....excel zu erstellen (es ist mir näher und verständlicher). Was die Grundlagen der Strategie anbelangt, so war sie sehr erfolgreich und klar (natürlich in der Vergangenheit). Darüber hinaus sollte ich aber auch die Besonderheiten des Handels berücksichtigen: Floating Spread, Swap, Besonderheiten der Maklerhäuser, all das lässt sich nur schwer in Exel-Formeln unterbringen. Also beschloss ich, den Unterschied zwischen Gewinn in Excel und MQL zu analysieren. Ehrlich gesagt ist der Unterschied zu groß, nicht zu meinen Gunsten. Ich weiß es noch nicht, ich werde jede Position analysieren, vielleicht hat der Expert Advisor einen Fehler gemacht, aber das liegt an mir.

Wie auch immer, gute Leute auf diesem Forum haben mir geholfen, bei der Lösung eines bestimmten Problems, was eine große menschliche Dankeschön für.

 
Ekburg:

nein, das Problem mit dem Ändern der Auftragsnummer einer Position, wenn eine davon geschlossen ist, wurde gelöst, ich habe mehr als einmal nachgesehen, weil ich dachte, es könnte ein Fehler vorliegen, aber es ist alles in Ordnung, der gewünschte Auftrag ist ausgewählt und der Stoploss wird korrekt dafür berechnet, aber der Auftrag will nicht geändert werden...

Fehler 1 wird nur dann erzeugt, wenn alle an die FunktionOrderModify( ) übergebenen Parameter mit allen Parametern der zu ändernden Bestellung übereinstimmen, die Sie (nach Ticketnummer) oder die FunktionOrderSelect() für die Änderung ausgewählt haben. Beispiel für die Verwendung des Schecks:

Nur "Nützliche Funktionen von KimIV".

ModifyOrder() Funktionhttps://www.mql5.com/ru/forum/131859

 
rigonich:

Fehler 1 wird nur generiert, wenn alle an den BefehlOrderModify( ) übergebenen Parameter mit allen Parametern der veränderbaren Bestellung übereinstimmen, die Sie (über die Ticketnummer) oder den BefehlOrderSelect() zur Änderung ausgewählt haben.

1 (ERR_NO_RESULT) - wenn keiner der Parameter geändert wurde oder kein Fehler aufgetreten ist, aber das Ergebnis unbekannt ist, wird der Auftrag wahrscheinlich aus irgendeinem Grund nicht geändert...
 
abeiks:

Ja, ich stimme zu, Programmieren ist nicht mein Ding, deshalb lerne ich hier und stelle Fragen. Ich habe versucht, Ihrem Algorithmus Positionsschließungen hinzuzufügen, aber es hat nicht funktioniert (alle Kaufpositionen wurden geschlossen), also habe ich beschlossen, das Problem von der anderen Seite anzugehen und die Lösung zu sehen, die letzten beiden Kaufpositionen auf einem vorgefertigten Schließungsblock zu schließen, der mir zur Verfügung gestellt und angeboten wurde.

Ich wäre Ihnen sehr dankbar, wenn Sie mir zeigen könnten, wie ich die letzten beiden Kaufpositionen schließen kann. Ich werde verstehen, wo ich einen Fehler gemacht habe.

 int Slippage = 3;
int Close_buy_2pos()
{
    int ordercount = 0, OpenOrders = OrdersTotal();
    for (int cnt = OpenOrders - 1; cnt >= 0; cnt--)   // scan all orders and positions. ..
    {
        if (!OrderSelect (cnt, SELECT_BY_POS)) return (ordercount);
        if (OrderSymbol() != Symbol()) continue;
        if (OrderMagicNumber() != magic) continue;
        if (OrderType() != OP_BUY) continue;
        if (OrderClose (OrderTicket(), OrderLots(), Bid, Slippage)) ordercount++;
        else return (ordercount);
        if (ordercount == 2) break;
    } 
    Print ("::::::::::::::::::::::::: ordercount = ", ordercount);    
    return (ordercount);   
}

In einem allgemeinen Fall ist es so. Wenn wir die "schwachsinnige" Variante verwenden (das ist die, die ich verwende), müssen wir eine Schleife starten: zuerst die letzte offene BUY-Position finden, sie dann aus dem Ticket löschen und die Schleife so oft wie nötig wiederholen.

P.S. Funktionen für KAUFEN und VERKAUFEN getrennt zu schreiben - das ist von Anfang an eine falsche Idee (IMHO).

Und die Funktion wird in diesem Fall nicht viel komplizierter aussehen:

int Slippage = 3;
int Close_LastPos (string fs_Symbol,
                   int fi_Magic,
                   int fi_Type = -1,   // тип закрываемых позиций
                   int fi_cnt = 1)     // количсетво закрываемых позиций
{
    int ordercount = 0, OpenOrders = OrdersTotal();
    double ld_PriceClose;
    for (int cnt = OpenOrders - 1; cnt >= 0; cnt--)   // scan all orders and positions. ..
    {
        if (!OrderSelect (cnt, SELECT_BY_POS)) return (ordercount);
        if (OrderSymbol() != fs_Symbol) continue;
        if (OrderMagicNumber() != fi_Magic) continue;
        if (OrderType() != fi_Type) if (fi_Type != -1) continue;
        if (OrderType() > 1) continue;
        if (OrderType() == OP_BUY) ld_PriceClose = NormalizeDouble (Bid, Digits);
        else ld_PriceClose = NormalizeDouble (Ask, Digits);
        if (OrderClose (OrderTicket(), OrderLots(), ld_PriceClose, Slippage)) ordercount++;
        else return (ordercount);
        if (ordercount == fi_cnt) break;
    } 
    Print ("::::::::::::::::::::::::: ordercount = ", ordercount);    
    return (ordercount);   
}
 
Ekburg:

1 (ERR_NO_RESULT) - wenn keiner der Parameter geändert wurde oder kein Fehler vorliegt, aber das Ergebnis unbekannt ist, wahrscheinlich nur, dass der Auftrag aus irgendeinem Grund nicht geändert wird ...
ERR_NO_RESULT ist kein entweder oder, sondern es liegt kein Fehler vor, aber das Ergebnis ist unbekannt. In welchen Fällen dieser Fehler auftritt, ist oben beschrieben. Wenn die Funktion GetLastError() nach der FunktionOrderModify() aufgerufen wird, gibt sie auf jeden Fall den Fehlercode(d.h. den Grund, warum die Bestellung nicht geändert wurde) oder 0 (im Falle einer erfolgreichen Änderung) zurück.

 
TarasBY:

Im allgemeinen Fall ist das so. Wenn wir die "schwachsinnige" Variante verwenden (das ist die, die ich verwende), dann müssen wir eine Schleife starten: zuerst die letzte offene BUY-Position finden, sie dann aus dem Ticket löschen und die Schleife so oft wie nötig wiederholen.

P.S. Funktionen für KAUFEN und VERKAUFEN getrennt zu schreiben - das ist von Anfang an eine falsche Idee (IMHO).

Und die Funktion würde in diesem Fall nicht viel komplizierter aussehen:


Danke, ich werde es mir ansehen.

 

Guten Abend an alle, könnten Sie bitte den grünen und unerfahrenen sagen, warum MetaTrader4 (neueste) überhaupt nicht aktualisiert? Ich habe es gestern installiert, aber das letzte Aktualisierungsdatum zeigt den 30. November an, und es gibt keine Dynamik für irgendein Währungspaar, und wenn ich eine Währung kaufe , ist der Markt geschlossen. (Ich habe ein Demo-Konto). Können Sie mir bitte sagen, wie ich die Aktualisierung aktivieren kann oder was ich tun muss, um die Preisänderungen zu verfolgen?

 
Lucifer982:

Guten Abend an alle, könnten Sie bitte den grünen und unerfahrenen sagen, warum MetaTrader4 (neueste) überhaupt nicht aktualisiert? Ich habe es gestern installiert, aber das letzte Aktualisierungsdatum zeigt den 30. November an, und es gibt keine Dynamik für irgendein Währungspaar, und wenn ich eine Währung kaufe, ist der Markt geschlossen. (Ich habe ein Demo-Konto). Können Sie mir bitte sagen, wie ich die Aktualisierung aktivieren kann oder was ich tun muss, um die Preisänderungen zu verfolgen?


Das System aktualisiert sich innerhalb weniger Stunden (je nach Ihrer Zeitzone). DoC hat am Samstag und Sonntag einen freien Tag, so dass sie sich keine Sorgen machen müssen)))).

Oder die zweite Möglichkeit: Schreiben Sie eine Beschwerde an den Service Desk des Finanzministeriums.

 
T1000:


Es schaltet sich innerhalb weniger Stunden ein (je nach Zeitzone). Der Service Desk hat am Samstag und Sonntag frei, so dass sie keine Rucke haben ))))

Oder die zweite Möglichkeit: Schreiben Sie eine Beschwerde an den Service Desk des Finanzministeriums.


Ich verstehe, danke, ich werde warten)
 

Wie kann ich die Gesamtzahl der offenen Aufträge für ein bestimmtes Paar ermitteln?

Ich habe einen offenen Chart, der EA arbeitet mit 10 Symbolen.

Ich habe beschlossen, in den Kommentaren des Diagramms die Gesamtzahl der offenen Aufträge für jedes Symbol anzugeben.

Wenn "OrdersTotal" den Gesamtbetrag der Bestellungen anzeigt, kann ich das tun.