Wie programmiert man? - Seite 119

 

Ich versuche, herauszufinden, ob das falsch ist;

for (int i=qqea_alert_x_candles_ago; i>0; i--) {

// int i = 1;

qqea_up = iCustom(NULL,0, "QQE Alert v3",0,i);

qqea_down = iCustom(NULL,0, "QQE Alert v3",1,i);

if (qqea_up < qqea_down) {

if (i == 1) qqeacross = True;

qqea_long = Wahr;

qqea_short = False;

} else if (qqea_up > qqea_down) {

wenn (i == 1) qqeacross = Wahr;

qqea_long = False;

qqea_short = True;

}

}

}

es sollte auf gültige Signale bis zu "qqea_alert_x_candles_ago" Bars zurück prüfen, aber dann hat es (i == 1), was i==1 nur einmal passiert ??

 
matrixebiz:
Ich versuche, herauszufinden, ob das falsch ist;

for (int i=qqea_alert_x_candles_ago; i>0; i--) {

// int i = 1;

qqea_up = iCustom(NULL,0, "QQE Alert v3",0,i);

qqea_down = iCustom(NULL,0, "QQE Alert v3",1,i);

Print("qqea_up: ", qqea_up, "qqea_down: ", qqea_down);

if (qqea_up < qqea_down) {

if (i == 1) qqeacross = True;

qqea_long = Wahr;

qqea_short = False;

} else if (qqea_up > qqea_down) {

wenn (i == 1) qqeacross = Wahr;

qqea_long = False;

qqea_short = True;

}

}

}

es sollte auf gültige Signale bis zu "qqea_alert_x_candles_ago" Bars zurück prüfen, aber dann hat es (i == 1), die i==1 nur einmal passiert ??

Auf den ersten Blick sieht Ihr Code gut aus, vorausgesetzt "qqea_alert_x_candles_ago" > 0.

Ihr Problem, wenn dies nicht funktioniert, hängt höchstwahrscheinlich mit iCustom zusammen.

Damit diese Funktion korrekt funktioniert, müssen Sie ein Eingabeelement für jedes Eingabeelement im eigentlichen Indikator übergeben. Wenn Sie dies nicht tun oder die falschen Datentypen übergeben, wird icustom nichts zurückgeben.

Ich habe eine Print-Anweisung in den obigen Code eingefügt. Verwenden Sie diese, um festzustellen, ob die von iCustom zurückgegebenen Werte tatsächlich etwas enthalten.

Zum Wohl,

Hiachiever

 

Hilfe bei Code zum Zählen von Balken benötigt

Mein EA hat eine Reihe von Optionen zur Berechnung des Stoploss einer offenen Position. Eine dieser Optionen ist die Verwendung des Tiefstwertes der letzten "x" Anzahl von Kursbalken.

Die derzeit im EA verwendete Codezeile zur Berechnung des Stoploss (SL) dieser Option für eine Long-Position lautet

SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0));

StopLossBars ist eine von außen eingegebene Variable.

Das Problem, das ich habe, ist, dass ich möchte, dass der Wert von StopLossBars mit jedem Bar, der seit der Eröffnung der Position gezählt wird, steigt, bis eine meiner anderen Bedingungen für StopLoss diese Bedingung übersteigt. Ich schätze eine Codezeile wie:

StopLossBars = StopLossBars + BarsCountedSincePositionOpened

würde den Trick tun. Leider ist meine Codierung ziemlich beschränkt auf Cut'n'Paste und ich weiß nicht, wie man BarsCountedSincePositionOpened berechnet oder codiert.

Könnte mir jemand sagen, wie man es bitte tun?

 
hiachiever:
Auf den ersten Blick sieht Ihr Code in Ordnung aus, vorausgesetzt, dass "qqea_alert_x_candles_ago" > 0 ist.

Ihr Problem, wenn dies nicht funktioniert, ist mehr als wahrscheinlich im Zusammenhang mit iCustom.

Damit diese Funktion korrekt funktioniert, müssen Sie ein Eingabeelement für jedes Eingabeelement im eigentlichen Indikator übergeben. Wenn Sie dies nicht tun oder die falschen Datentypen übergeben, gibt icustom nichts zurück.

Ich habe eine Print-Anweisung in den obigen Code eingefügt. Verwenden Sie diese, um festzustellen, ob die von iCustom zurückgegebenen Werte tatsächlich etwas enthalten.

Zum Wohl,

Hiachiever

Der Code stammt aus einem anderen EA, aber ich dachte, wenn die Schleife bis "qqea_alert_x_candles_ago" > 1 geht, dann würde diese Anweisung "if (i == 1) qqeacross = True;" jetzt False sein, richtig? Wenn sie True bleiben sollte, bis i>qqea_alert_x_candles_ago.

 

Helfen

Hallo zusammen,

ich habe dieses Coding von einem Kollegen bekommen. Er sagte mir, dass dies ein sehr guter Indikator sein sollte, der SMA Auf- oder Abwärtseinträge signalisiert. Kann mir jemand helfen, einen Indikator mit dem folgenden Code zu erstellen.

/*[[

Name := SMA aufwärts und abwärts

Getrenntes Fenster := nein

Erste Farbe := Blau

Erster Zeichnungstyp:= Linie

Zweite Daten verwenden := Ja

Zweite Farbe := Rot

Zweiter Zeichnungstyp := Linie

]]*/

Eingaben : MAPeriod(10), Bandwide_UP(20),Bandwide_DOWN(20);

Variablen : shift(0), cnt(0), sum(0), loopbegin1(0), loopbegin2(0), first(True), prevbars(0);

Variablen : MA(0);

SetLoopCount(0);

// erste Überprüfungen

If MAPeriod < 1 Then Exit;

// Prüfen, ob zusätzliche Balken geladen werden oder ob der gesamte Kurs neu geladen wird

If Bars 1 Then first = True;

prevbars = Bars;

// loopbegin1 und loopbegin2 verhindern, dass die gezählten Balken den aktuellen ausschließen

If first Then Begin

loopbegin1 = Bars-MAPeriod-1;

If loopbegin1 < 0 Then Exit; // nicht genug Balken zum Zählen

loopbegin2 = Bars-MAPeriod-1;

If loopbegin2 < 0 Then Exit; // nicht genug Balken für die Zählung

first = False; // dieser Block soll nur einmal ausgewertet werden

Ende;

// Konvergenz-Divergenz

loopbegin1 = loopbegin1+1; // aktueller Balken soll ebenfalls neu gezählt werden

For shift = loopbegin1 Downto 0 Begin

MA = iMA(MAPeriod,MODE_SMA,shift);

SetIndexValue(shift,(MA+Bandwide_UP*point));

SetIndexValue2(shift,(MA-Bandwide_DOWN*Punkt));

loopbegin1 = loopbegin1-1; // verhindern, dass zu vorherigen Takten zurückgezählt wird

Ende;

Mit freundlichen Grüßen,

Rogerio

 

Hilfe mit Code benötigt

Ich brauche Hilfe bei folgendem Code, der im Moment nur eine Order öffnet, wenn AC über oder unter Null ist, und ich möchte, dass er öffnet, wenn Rot zu Grün wechselt und umgekehrt

double AC1 = iAC(NULL, 0, Aktuell + 0);

double AC2 = iAC(NULL, 0, Current + 1);

wenn ((AC1 < AC2)) Ordnung = SIGNAL_CLOSEBUY;

 
matrixebiz:
Der Code ist von einem anderen EA, aber ich dachte, wenn die Schleife bis "qqea_alert_x_candles_ago" > 1 geht, dann würde diese Anweisung "if (i == 1) qqeacross = True;" jetzt False sein, richtig? Wenn sie True bleiben sollte, bis i > qqea_alert_x_candles_ago.

Nein, das ist nicht korrekt.

In der for-Schleife beginnen Sie bei 6 und dekrementieren auf 1. Das bedeutet, dass die for-Schleife in der letzten Schleife die Prüfung"if (i == 1) qqeacross = True;" ausführt. Das Endergebnis ist, dass die Ausgabe wahr sein wird, wenn qqeacross aufgetreten ist.

Das einzige Problem, das dabei auftreten kann, ist, dass qqeacross in einer früheren Schleife auf true gesetzt wurde. Um dies zu umgehen, sollten Sie qqeacross = false; vor der for-Schleife setzen. Auf diese Weise können Sie sicherstellen, dass qqeacross = true durch die gerade abgeschlossene Schleife gesetzt wurde.

Zum Wohl,

hiachiever

 
Pussy Galore:
Mein EA hat eine Reihe von Optionen, um den StopLoss einer offenen Position zu berechnen. Eine dieser Optionen ist die Verwendung des Tiefstwertes der letzten "x" Anzahl von Kursbalken.

Die derzeit im EA verwendete Codezeile zur Berechnung des StopLoss (SL) dieser Option für eine Long-Position lautet wie folgt:

SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0));

StopLossBars ist eine von außen eingegebene Variable.

Das Problem, das ich habe, ist, dass ich möchte, dass der Wert von StopLossBars mit jedem Bar, der seit der Eröffnung der Position gezählt wird, steigt, bis eine meiner anderen Bedingungen für StopLoss diese Bedingung übersteigt. Ich schätze eine Codezeile wie:

StopLossBars = StopLossBars + BarsCountedSincePositionOpened

würde den Trick tun. Leider ist meine Codierung ziemlich auf Cut'n'Paste beschränkt und ich weiß nicht, wie man BarsCountedSincePositionOpened berechnet oder codiert.

Kann mir jemand sagen, wie man das macht?

Der Weg, es zu tun ist, erstellen Sie eine vriable auf globaler Ebene (dh vor init)

z.B.

int BarCount;

int init ()

Verwenden Sie dann in Ihrem Stop-Loss-Code das Folgende:

if (BarCount<Bars)

{

SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0));

StopLossBars++;

BarCount=Bars;

}

Dadurch wird StopLossBars bei jedem neuen Balken um 1 erhöht.

Die einzige weitere Ergänzung Ihres Codes wäre, "StopLossBars" auf seinen ursprünglichen Standardwert zurückzusetzen, wenn ein neuer Handel eröffnet wird.

Zum Wohl,

Hiachiever

 
denis68:
Ich brauche Hilfe bei folgendem Code, der im Moment nur eine Order öffnet, wenn AC über oder unter Null ist, und ich möchte, dass er öffnet, wenn Rot zu Grün wechselt und umgekehrt

double AC1 = iAC(NULL, 0, Strom + 0);

double AC2 = iAC(NULL, 0, Strom + 1);

if ((AC1 < AC2)) Order = SIGNAL_CLOSEBUY;

Ich habe die beiden anderen Puffer im Code des Indikators geöffnet oder angezeigt, indem ich diese beiden Zeilen entfernt habe;

// SetIndexLabel(1,NULL);

// SetIndexLabel(2,NULL);

Dann habe ich mit meinem modifizierten AC einen iCustom-Aufruf gemacht;

double ac1 = iCustom(NULL, 0, "AcceleratorMod", 1, 1);

double ac2 = iCustom(NULL, 0, "AcceleratorMod", 2, 1);

double ac11 = iCustom(NULL, 0, "AcceleratorMod", 1, 2);

double ac22 = iCustom(NULL, 0, "AcceleratorMod", 2, 2);

bool acbuy = ac2==0 && ac11==0; // Rot wechselt zu Grün

bool acsell = ac1==0 && ac22==0; // Grün wechselt zu Rot

Ich hoffe das hilft

 

matrixebiz was meinen Sie mit rem'ing aus diesen beiden Zeilen; und wie mache ich es, ich kann; nicht in den Code der AC-Indikator habe ich versucht, zu bekommen,