Wie programmiert man? - Seite 303

 

eine weitere Anfängerfrage

Hallo, ich bin neu in der Programmierung, aber nicht neu im Trading. Ich habe eine Zeit lang nichts gepostet und jetzt, da ich mit der Entwicklung meines EA begonnen habe, habe ich viele Fragen. Ich habe zunächst mit der Erstellung eines Indikators begonnen, und wenn er das tut, was ich will, werde ich weitergehen. Ich habe alle Handbücher gelesen, die ich finden konnte, und jetzt ist es an der Zeit, dass ich mit der Programmierung weitermache.

Entschuldigung, wenn dies der falsche Thread ist - bitte lassen Sie mich wissen, wo ich solche Fragen stellen soll.

Ich habe 2, wahrscheinlich, grundlegende Fragen für jetzt, bitte:

1. In vielen Indikatoren, die MAs verwenden, sehe ich Linien, die prüfen, wie viele Balken auf dem Chart sind. Wenn ich also MA200 benötige und der Chart nur, sagen wir, 100 Balken hat, würde dann iMA200 funktionieren? Ich denke ja - ich habe es überprüft und jeder MA wird ohne Probleme auf jedem Chart gezeichnet, also denke ich, dass dies ein alter Fehler ist, den Metaquotes jetzt behoben hat. Macht es also Sinn, zu prüfen, wie viele Balken im Chart vorhanden sind, um den MA zu zeichnen oder die iMA-Funktion zu verwenden?

2. Was ist der Unterschied zwischen Close und iClose? Soweit ich weiß, kann Close nur den Schluss der Balken im aktuellen Chart zurückgeben, während iClose jeden Schluss eines beliebigen Währungspaares und eines beliebigen Zeitrahmens zurückgeben kann. Und in beiden Fällen muss ich, um den letzten geschlossenen Balken zu erhalten, den Index [1] verwenden. Sehe ich das richtig?

Ich danke Ihnen.

 

Das habe ich bereits getan. Siehe unten rot hervorgehoben:

//--- Ermitteln, ob der vorherige Verkaufsauftrag profitabel ist

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

return (WinLossPreviousShort);

}

if ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)

{

WinLossPreviousShort = "L";

return (WinLossPreviousShort);

}

}

}

Immer noch völlig leer.

Ich zerbreche mir den Kopf. Ich weiß, dass Ihre Hilfe begrenzt ist, weil ich den Code nicht eingefügt habe, aber sieht der obige Code für Sie gut aus?

Muss ich auch in der ersten Zeile unten LastOpenTicket mit () referenzieren?

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

 

...

Wenn Sie diese Funktion mit der Ticketnummer des zuletzt geöffneten Tickets als Argument aufrufen, wird der Code nach der blauen Zeile nie ausgeführt (OrderSelect() schlägt fehl, wenn die LastOpenTicket-Nummer -1 ist (was in diesem Moment dem Ergebnis der Funktion LastOpenTicket() entspricht), und der Code kann den Block nach der blauen Zeile nicht ausführen)

crsnape@btinternet.com:
Ich habe das bereits getan. Siehe rot hervorgehoben unten:

//--- Ermitteln, ob der vorherige Verkaufsauftrag profitabel ist

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

return (WinLossPreviousShort);

}

if ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)

{

WinLossPreviousShort = "L";

return (WinLossPreviousShort);

}

}

}

Immer noch völlig leer.

Ich zerbreche mir den Kopf. Ich weiß, Ihre Hilfe ist begrenzt, weil ich den Code nicht eingefügt habe, aber sieht der obige Code für Sie gut aus?

Muss ich auch in der ersten Zeile unten auf LastOpenTicket mit () verweisen?

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)
 

Ich bin nicht sicher, ob ich das verstehe.

if ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)

Da ich also die Funktion LastOpenTicket() in der obigen Zeile aufrufe, wird der Rest der Funktion nicht ausgeführt und OrderSelect() schlägt fehl. Verstehe ich Sie richtig?

 

...

Nehmen wir folgendes an:

- Sie hatten keine vorherigen Aufträge

- LastOpenedTicket() liefert als Ergebnis -1 (keine vorherigen Bestellungen)

- Sie rufen die Funktion mit diesem Ergebnis auf

OrderSelect() schlägt fehl, da das Orderticket -1 nicht existiert und keiner der Codes hinter der Orderauswahl ausgeführt wird. Selbst wenn LastOpenTicket > -1 ist, kann die "Blue-Line-Bedingung", dass LastOpenTicket() == -1 ist, niemals wahr sein, da sie nur dann zu diesem Teil des Codes gelangen kann, wenn LastOpenTicket > -1 ist.

Deshalb habe ich den "3. Zustand: das "Na" vorgeschlagen, da Sie aufgrund des Ausgangszustands "keine vorherigen Bestellungen" tatsächlich 3 Zustände haben

crsnape@btinternet.com:
Ich bin nicht sicher, ob ich das verstehe.

wenn ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)

Da ich also die Funktion LastOpenTicket() in der obigen Zeile aufrufe, wird der Rest der Funktion nicht ausgeführt und OrderSelect() schlägt fehl. Verstehe ich Sie richtig?
 

einige Fragen zur Programmierung, wahrscheinlich für Anfänger

Hallo, ich bin neu in der Programmierung, aber nicht neu im Handel. Ich baue meine EA, sondern begann mit dem Aufbau eines Indikators erste, und sobald es tut, was ich will, werde ich weiter gehen. Ich habe alle Handbücher gelesen, die ich finden konnte und programmiere jetzt.

Würde jeden Rat zu schätzen wissen - Sie alle begonnen, wo ich jetzt bin...

Ich habe 2, wahrscheinlich, grundlegende Fragen für jetzt, bitte:

1. In einigen Indikatoren, die MAs verwenden, sehe ich Linien, die prüfen, wie viele Balken auf dem Chart sind. Wenn ich also MA200 benötige und der Chart nur, sagen wir, 100 Balken hat, würde dann iMA200 funktionieren? Ich denke ja - ich habe es überprüft und jeder MA wird ohne Probleme auf jedem Chart gezeichnet, also denke ich, dass dies ein altes Problem ist, das Metaquotes jetzt behoben hat. Macht es also Sinn, zu prüfen, wie viele Balken im Chart vorhanden sind, um den MA zu zeichnen oder die iMA-Funktion zu verwenden?

2. Was ist der Unterschied zwischen Close und iClose? Soweit ich weiß, kann Close nur den Schluss der Balken im aktuellen Chart zurückgeben, während iClose jeden Schluss eines beliebigen Währungspaares und eines beliebigen Zeitrahmens zurückgeben kann. Und in beiden Fällen muss ich, um den letzten geschlossenen Balken zu erhalten, den Index [1] verwenden. Ist das korrekt?

Ich danke Ihnen.

 

Wie das?

//--- Ermitteln, ob der vorherige Verkaufsauftrag profitabel ist

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

return (WinLossPreviousShort);

}

if (OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L";

zurückgeben (WinLossPreviousShort);

}

if (LastOpenTicket() == -1)

{

WinLossPreviousShort = "NA";

zurückgeben (WinLossPreviousShort);

}

}

}

OR THIS? ändert sich in rot.

//--- Ermitteln, ob der vorherige Verkaufsauftrag profitabel ist

string GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, string WinLossPreviousShort)

{

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

return (WinLossPreviousShort);

}

if (OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L";

zurückgeben (WinLossPreviousShort);

}

if (LastTicket == -1)

{

WinLossPreviousShort = "NA";

zurück (WinLossPreviousShort);

}

}

}

 

ah, endlich hat es geklickt, ich kann OrderSelect nicht für eine Ticketnummer verwenden, die -1 ist, weil -1 nicht existiert. Tickets gehen von 0 aufwärts.

Ich muss LastOpenTicket außerhalb der OrderSend-Funktion deklarieren, richtig?

 

...

Versuchen Sie es so:

string GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, string WinLossPreviousShort)

{

if (LastTicket == -1)

{

WinLossPreviousShort = "NA";

return (WinLossPreviousShort);

}

//

//

// if LastTicket == -1 no need even to try to execute the code bellow

// you already have exited for case when it is -1, so the code bellow

// will be executed properly

//

//

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

return (WinLossPreviousShort);

}

if (OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L";

return (WinLossPreviousShort);

}

}
 

Danke mladen, entspricht der untenstehende Code im Grunde dem Ihren? Ich habe das getippt, als du deinen letzten Beitrag geschrieben hast! :-)

EDITED-

//--- Ermitteln, ob vorherige Verkaufsorder profitabel ist

string GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, string WinLossPreviousShort)

{

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

return (WinLossPreviousShort);

}

if (OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L";

zurückgeben (WinLossPreviousShort);

}

}

if (LetztesTicket == -1)

{

WinLossPreviousShort = "NA";

return (WinLossPreviousShort);

}

}