Fragen Sie! - Seite 82

 

Codersguru bitte helfen

Codersguru

Ich versuche, einen akustischen Alarm für den Bullspower-Indikator zu schreiben, wenn er die Nulllinie durchquert. Ich habe keine Erfahrung mit MQL, aber ich habe einige Codes aus mehreren anderen Indikatoren zusammengesetzt. Beim Kompilieren des Codes gibt es keinen Fehler. Obwohl der Indikator-Alarm nicht funktioniert, könnten Sie bitte helfen, um ihn entweder zu korrigieren oder vielleicht einen neuen Code für diesen akustischen Alarm zu erstellen, wenn Bullbears die Nulllinie durchquert?

Vielen Dank im Voraus

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

//| |

//| |

//| |

//| |

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

#Eigenschaft Copyright "forex-tsd"

#property link "https://www.forex-tsd.com"

#property indicator_separate_window

#property indikator_puffer 2

#property indicator_color1 Kalk

#property indicator_color2 Crimson

#property indikator_level1 0

double ExtMapBuffer1[];

double ExtMapBuffer2[];

double valbull[];

double valbear[];

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

//| Benutzerdefinierte Indikator-Initialisierungsfunktion |

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

int init()

{

IndicatorBuffers(3);

SetIndexPuffer(0,ExtMapPuffer1);

SetIndexDrawBegin(0,2);

SetIndexLabel(0, "ExtMapBuffer1");

SetIndexPuffer(1,ExtMapPuffer2);

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 4);

SetIndexDrawBegin(1,2);

SetIndexLabel(1, "ExtMapBuffer2");

//---- Anzeigen

//----

return(0);

}

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

//| Funktion zur Deinitialisierung von Custor-Indikatoren |

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

int deinit()

{

//---- TODO: fügen Sie hier Ihren Code ein

//----

return(0);

}

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

//| Benutzerdefinierte Indikator-Iterationsfunktion |

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

int start()

{

int shift,counted_bars=IndicatorCounted();

double valbear[], valbull[];

//---- Prüfung auf mögliche Fehler

if(gezählte_Balken<0) return(-1);

//---- letzte gezählte Balken wird neu gezählt

if(gezählte_Balken>0) gezählte_Balken--;

shift=Balken-1;

while(shift>=0)

{

valbull[shift]=iBullsPower(NULL, 0, 13,PRICE_CLOSE,0);

valbear[shift]=iBearsPower(NULL, 0, 13,PRICE_CLOSE,0);

if (valbull[shift]>0)

{

ExtMapBuffer1[shift]=valbull[shift];

ExtMapBuffer2[shift]=0;

}

sonst

{

ExtMapBuffer2[shift]=valbull[shift];

ExtMapBuffer1[shift]=0;

}

shift--;//

}

//---- alert module

#define SIGNAL_BAR 1

//---- Statische Variablen, in denen die letzte Taktzeit

//---- und die letzte Alarmrichtung gespeichert werden

static int PrevSignal = 0, PrevTime = 0;

//---- Wenn der für die Analyse ausgewählte Balken kein Null-Balken ist,

// macht es keinen Sinn, den Alarm mehrmals zu überprüfen

//---- mehrmals zu überprüfen. Wenn sich kein neuer Balken zu bilden beginnt, beenden Sie die Funktion.

if(SIGNAL_BAR > 0 && Time[0] <= PrevTime )

return(0);

//---- Markieren, dass dieser Balken geprüft wurde

PrevTime = Time[0];

if(PrevSignal <= 0)

{

if(valbull[SIGNAL_BAR] > 0 )

{

PrevSignal = 1;

Alert("BullChannell_positiv (", Symbol(), ", ", Zeitraum(), ") - KAUFEN!!!");

}

}

if(PrevSignal >= 0)

{

if(valbull[SIGNAL_BAR] < 0 )

{

PrevSignal = -1;

Alert("BearChannell_negativ (", Symbol(), ", ", Zeitraum(), ") - SELL!!!");

}

}

//---- end alert module

//----

return(0);

}

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

 

Wie kann man mit der Funktion zwischen offenen und schwebenden Aufträgen unterscheiden?

Wie kann man mit der Funktion zwischen offenen und schwebenden Aufträgen unterscheiden?

Danke!

 
vntb:
Wie kann man die Funktion verwenden, um zwischen offenen und schwebenden Aufträgen zu unterscheiden? Danke!

Prüfen Sie den OrderType() :

OrderType() == OP_BUY //BuyOrder (eröffnet)

OrderType() == OP_SELL //Verkaufsorder (eröffnet)

OrderType() == OP_BUYLIMIT //Buy-Limit-Order (schwebend)

OrderType() == OP_SELLLIMIT //Verkaufslimit Order (schwebend)

OrderType() == OP_BUYSTOP //Buy stop Order (schwebend)

OrderType() == OP_SELLSTOP //Verkaufsstopp Order (schwebend)

 

iMAOnArray in EA

Hallo Leute,

Ich versuche, eine EMA auf der Grundlage von Kreuzungen von gleitenden Durchschnitten auf Indikatoren (z. B. CCI, Kraft, RSI) zu tun. Ich kann jedoch nicht ergründen, wie man ein Array deklariert und die Funktion iMAOnArray ausführt, um Variablen zu erstellen.

Im folgenden Code möchte ich zum Beispiel RSI-Daten für das Diagramm in einen Puffer legen und dann die Daten verwenden, um einen gleitenden Durchschnitt zu erstellen, mit dem ich Trades auslösen kann. Was mache ich falsch?

Vielen Dank für alle Kommentare und Vorschläge.

Herbst

double RSI[];

ArrayResize(RSI,Bars);

ArraySetAsSeries(RSI,true);

for(int i=Bars; i>=0; i--)

{

RSI = (iRSI(NULL,0,RSIPeriod,RSIPrice,i));

}

double Green0 = iMAOnArray(RSI,0,GreenPeriod,0,GreenPrice,0);

 

Hallo

jemand hat die Schritt-Momentum mit Alarm?

Es wird ein großer Indikator sein, denke ich

danke

Grüße!

 

Handel nach Level schließen

Hallo, ich möchte wissen, wie man den Handel schließt, wenn der Preis ein bestimmtes Niveau erreicht hat. Sagen wir, 55 Punkt über MA Linie. Ich habe versucht, die MA in der TakeProfit Teil der OrderSend, aber Tester lehnen meine EA mit: "Ungültiges Etwas" Fehlermeldung. Ich danke Ihnen.

 
Sendra:
Hallo, ich möchte wissen, wie man den Handel schließt, wenn der Preis ein bestimmtes Niveau erreicht hat. Sagen wir, 55 Punkte über der MA-Linie. Ich habe versucht, die MA in der TakeProfit Teil der OrderSend, aber Tester lehnen meine EA mit: "Ungültiges Etwas" Fehlermeldung. Ich danke Ihnen.

Ermitteln Sie zunächst den gleitenden Durchschnitt:

double MA = iMA(...);

dann berechnen Sie den TakeProfit wie folgt:

double TP = MA + (55*Punkt); // oder TP = MA-(55*Punkt); im Verkaufsfall.

 

Es funktioniert!!

Hey, danke, CodersGuru. Es funktioniert tatsächlich. Aber es bringt mich auch zum Nachdenken: Wenn ich den Take Profit auf ein bestimmtes Niveau verschieben kann, das nicht statisch ist, kann ich dasselbe mit meinem Stoploss tun (ohne Trailingstop).

Und ich habe es versucht.

Es hat funktioniert, mit einem schlechten Ergebnis. Also muss ich wohl mit Trailingstop arbeiten. Ist das richtig? (Wohlgemerkt, ich habe noch nicht gelernt, wie man Trailingstop programmiert).

danke.

 

Interner Trailing-Stop

Sendra:
Hey, danke, CodersGuru. Es funktioniert tatsächlich. Aber es bringt mich auch zum Nachdenken: Wenn ich den Take Profit auf ein bestimmtes Niveau verschieben kann, das nicht statisch ist, kann ich dasselbe mit meinem Stoploss tun (ohne Trailingstop).

Und ich habe es versucht.

Es hat funktioniert, mit schlechtem Ergebnis. Also muss ich wohl mit Trailingstop arbeiten. Ist das richtig? (Allerdings habe ich noch nicht gelernt, wie man Trailingstop programmiert).

Ich danke Ihnen.

Ich habe etwas Ähnliches für einen internen Trailingstop gemacht: (dies ist ein Beispiel für einen Long-Auftrag) Es scheint zu funktionieren. Hoffentlich hilft das.

extern int Trailing_Stop=20;

static double Trailing_Long;

bool Read_Long_Open;

if (Fügen Sie Ihre Long-Eingabeentscheidung ein)

{

Funktion Ordersend() hier

Read_Long_Open=true;

}

wenn (Read_Long_Open==true)

{

if(OrderSelect(T_1L, SELECT_BY_TICKET)==true)

{

Trailing_Long=OrderOpenPrice();

Print(" Trailing_Long =",Trailing_Long);

Read_Long_Open=false;

}

}

if (Read_Long_Open==false)

{

if (Trailing_Long < Bid)

{

Trailing_Long=Bid;

Print("Angepasste Trailing_Long =",Trailing_Long);

}

}

if (Bid <= Trailing_Long-Trailing_Stop*Point)

{

OrderClose() Funktion

Print("Long Order Closed");

}

 

Danke

Hallo, Wolfe,

ich habe deinen Code ausprobiert, aber stattdessen ein negatives Ergebnis erhalten. Frag bitte nicht warum, denn ich weiß die Antwort auch nicht. Allerdings befinde ich mich noch in der "Hit-and-Run"-Phase beim Programmieren. Aber trotzdem vielen Dank, dein Code hat mir genug Inspiration gegeben, um meinen eigenen zu schreiben, der für mich ein ausreichendes Ergebnis liefert.

Also, danke.

Grund der Beschwerde: