Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Wie kann ich das codieren?
Wenn der Markt (X.XX50 oder X.XX00) berührt
dann kaufen. Wie kann man die letzten beiden Zahlen identifizieren?
Danke.Das sollte genügen:
if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,0.50) ; }
else { xPrice = Close - ( MathMod(100*Close,0.50)*0.01 ) ; }
P1Buffer = xPrice + Point*50;
P2Buffer = xPrice ;
P3Buffer = xPrice - Point*50;
[/CODE]
When MathMod(Close,0.50) = 0 then the price ends in 00 or 50.
Here's my indicator to identify 00 lines:
[CODE]
//+------------------------------------------------------------------+
//| _TRO_00_Lines |
//| |
//| |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LightGray
#property indicator_color2 LightGray
#property indicator_color3 LightGray
// indicators parameters
//---- buffers
double P1Buffer[];
double P2Buffer[];
double P3Buffer[];
double xPrice ;
int myStyle = 2 ;
int myWingDing = 250 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0, P1Buffer);
SetIndexBuffer(1, P2Buffer);
SetIndexBuffer(2, P3Buffer);
SetIndexArrow(0, myWingDing);
SetIndexArrow(1, myWingDing);
SetIndexArrow(2, myWingDing);
SetIndexStyle(0, DRAW_ARROW, myStyle, 1);
SetIndexStyle(1, DRAW_ARROW, myStyle, 1);
SetIndexStyle(2, DRAW_ARROW, myStyle, 1);
SetIndexEmptyValue(0,0);
SetIndexEmptyValue(1,0);
SetIndexEmptyValue(2,0);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i, dayi, counted_bars = IndicatorCounted();
//---- check for possible errors
if(counted_bars < 0)
return(-1);
//---- last counted bar will be recounted
if(counted_bars > 0)
counted_bars--;
int limit = Bars - counted_bars;
//----
for(i = limit - 1; i >= 0; i--)
{
if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,1.00) ; }
else { xPrice = Close - ( MathMod(100*Close,1.00)*0.01 ) ; }
P1Buffer = xPrice + Point*100;
P2Buffer = xPrice ;
P3Buffer = xPrice - Point*100;
} // for
return(0);
} // startIch brauche es aber für einen EA!
Coders bitte helfen
Was ist im Code zu ändern, um mehr Punkte von Candlesticks nach oben und unten zu bewegen?
Vielleicht kann Ihnen jemand helfen, wenn Sie den Code veröffentlichen.
Lux
Hier ist der Indikator
Indikator können Sie den Code ändern, um Punkte nach oben und unten zu bewegen
richtige Verwendung von Time[]
Ich bin ein guter Programmierer, aber neu in mql4. Ich arbeite an einer Box Handel (aka Breakout Handel) Experte Berater. Im Wesentlichen sollte es die höchsten und niedrigsten Werte für einen bestimmten Zeitrahmen zu finden, und wenn eine Kerze schließt außerhalb dieser Box ich einen Handel platzieren.
Es gibt im Wesentlichen drei Zustände, in denen ich meinen EA starten kann
1) nach dem Schluss des Vortages und vor der Startzeit der Box.
2) nach dem Start der Box, aber vor dem Ende der Box.
3) nach dem Ende der Box.
Was mich verwirrt, ist das Time[]-Array, weil sich der Index ständig ändert. Nehmen wir an, ich trete bei Zustand 2 ein. In der Init-Funktion wollte ich eine globale Variable setzen, die die Position des Starts der Box angibt. Wenn die Anführungszeichen eingehen, wird meine Startfunktion ständig aufgerufen, und sobald das Ende der Box erreicht ist, hätte ich die Start- und Endpositionen. Das ist natürlich nicht der Fall, da der Index des Time-Arrays immer weiter nach vorne wandert.
Im besten Fall kann ich die Position des Startindexes der Box weiter erhöhen, aber das scheint kein sehr sauberer Weg zu sein.
Wenn Sie einen Vorschlag haben, wie ich mein Denken weg von traditionellem c/c++ zu mql4 ändern sollte, würde ich es gerne hören.
Wenn ich fertig bin, würde ich natürlich auch sehr von einer Codeüberprüfung durch einen erfahreneren Programmierer profitieren. Möchte sich jemand dafür zur Verfügung stellen?
Vielen Dank für Ihre Zeit,
Markus
Ich bin ein guter Programmierer, aber neu in mql4. Ich arbeite an einem Box-Trade (aka Breakout-Trade) Expert Adviser. Im Wesentlichen sollte es die höchsten und niedrigsten Werte für einen bestimmten Zeitrahmen zu finden, und wenn eine Kerze schließt außerhalb dieser Box ich einen Handel platzieren.
Im Wesentlichen gibt es drei Zustände, in denen ich meinen EA starten kann
1) nach dem Schluss des Vortages und vor der Startzeit der Box.
2) nach dem Start der Box, aber vor dem Ende der Box.
3) nach dem Ende der Box.
Was ich verwirrend finde, ist das Time[]-Array, weil sich der Index ständig ändert. Nehmen wir an, ich trete bei Zustand 2 ein. In der Init-Funktion wollte ich eine globale Variable setzen, die die Position des Starts der Box angibt. Wenn die Anführungszeichen eingehen, wird meine Startfunktion ständig aufgerufen, und sobald das Ende der Box erreicht ist, hätte ich die Start- und Endpositionen. Das ist natürlich nicht der Fall, da der Index des Time-Arrays immer weiter nach vorne wandert.
Im besten Fall kann ich die Position des Startindexes der Box weiter erhöhen, aber das scheint kein sehr sauberer Weg zu sein.
Wenn Sie einen Vorschlag haben, wie ich mein Denken weg von traditionellem c/c++ zu mql4 ändern sollte, würde ich es gerne hören.
Wenn ich fertig bin, würde ich natürlich auch sehr von einer Codeüberprüfung durch einen erfahreneren Programmierer profitieren. Möchte sich jemand dafür zur Verfügung stellen?
Vielen Dank für Ihre Zeit,
MarkusHallo. Die Time[] -Funktion ändert sich nicht ständig - nur am Ende des aktuellen Diagrammbalkens ändert sie sich. TimeCurrent() hingegen gibt einen sich ständig ändernden Wert zurück (wenn auch mit einer Auflösung von 1 Sekunde).
Sie können die genaue Zeit eines jeden Balkens und Zeitrahmens auch mit iTime() ermitteln. Es gibt mehrere Möglichkeiten, das zu tun...
zwei Aufträge zur gleichen Zeit öffnen (Problem...)
Hallo, ich weiß nicht, warum das Skript bei manchen Gelegenheiten zwei Aufträge zur gleichen Zeit öffnet.
Kann mir jemand bei diesem Problem helfen, bitte
if(UseStopLoss)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,EAName, MagicNo, 0,Green);
sonst
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,EAName, MagicNo, 0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Fehler beim Öffnen der BUY-Order : ",GetLastError());
Dankeschön
Hilfe für Code
Hallo zusammen,
Ich würde gerne einen Indikator für die Berechnung des Schlusswertes programmieren, der eine Umkehrung eines Indikators wie HMA erzeugt. Dafür muss ich eine Funktion für die Berechnung eines Wertes von HMA mit einer Registerkarte für Abschlusswerte erstellen, wo ich den aktuellen Wert in einer Dichotomieschleife modifiziere, um den Wert zu finden, der die Umkehrung erzeugt.
Kann mir jemand bei meiner ComputeHull Funktion helfen?
Hier mein Code, ohne Dichotomie-Recherche ist es nur ein einfacher HMA-Indikator mit computeHull-Funktion, der Indikator wird angezeigt, aber es ist nach unten verschoben
Grüße
#property indicator_separate_window
#Eigenschaft indicator_chart_window
#Eigenschaft indicator_buffers 3
#eigenschaft indicator_color1 Blau
//---- Eingabeparameter
extern int HullAntPeriod=12;
//---- Puffer
double TempBuf1[];
double TempBuf2[];
double HullAntBuf[];
//Variable
int HalfHullAntPeriod;
int SqrtHullAntPeriod;
//+------------------------------------------------------------------+
//| Spezifische Funktionen |
//+------------------------------------------------------------------+
double ComputeHull(int ActualBar)
{
double CloseTemp[];
double Temp[];
double Temp1, Temp2;
double Ergebnis = -1;
int i;
//Kopieren der Close-Werte in CloseTemp
ArrayResize(CloseTemp, HullAntPeriod+SqrtHullAntPeriod);
ArrayCopy(CloseTemp, Close, 0, ActualBar, HullAntPeriod+SqrtHullAntPeriod);
ArraySetAsSeries(CloseTemp, true);
ArrayResize(Temp, SqrtHullAntPeriod);
//HMA-Wert-Berechnung
for(i=0; i<SqrtHullAntPeriod; i++)
{
Temp1 = iMAOnArray(CloseTemp, 0, HalfHullAntPeriod, 0, MODE_LWMA, i);
Temp2 = iMAOnArray(CloseTemp, 0, HullAntPeriod, 0, MODE_LWMA, i);
Temp = 2*Temp1-Temp2;
}
ArraySetAsSeries(Temp, true);
Ergebnis = iMAOnArray(Temp, 0, SqrtHullAntPeriod, 0, MODE_LWMA, 0);
//---- erledigt
return(result);
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
//---- 1 zusätzliche Puffer werden für temporäre Daten verwendet.
IndicatorBuffers(3);
//---- Zeichnungseinstellungen
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_NONE);
//---- Zuordnung von 2 Indikatorpuffern
SetIndexBuffer(0,HullAntBuf);
SetIndexBuffer(1,TempBuf1);
SetIndexBuffer(2,TempBuf2);
//---- Name für DataWindow und Beschriftung des Indikator-Unterfensters
IndicatorShortName("HULL ANTICIP("+HullAntPeriod+")");
SetIndexLabel(0, "HULL ANTICIPATION");
SetIndexLabel(1,NULL);
SetIndexLabel(2,NULL);
//---- Spezifische Initialisierung des Indikators
HalfHullAntPeriod = MathFloor(HullAntPeriod/2);
SqrtHullAntPeriod = MathFloor(MathSqrt(HullAntPeriod));
//---- Initialisierung abgeschlossen
return(0);
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Funktion zur Deinitialisierung des Indikators |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Iterationsfunktion |
//+------------------------------------------------------------------+
int start()
{
int bar, limit, i;
int gezählte_Balken=IndikatorGezählt();
if(gezählte_Balken<0) return(-1);
if(gezählte_Balken>0) gezählte_Balken--;
limit=Balken-gezählt_Balken;
for(i=0; i<limit; i++)
HullAntBuf=ComputeHull(i);
//----
return(0);
}
//+------------------------------------------------------------------+
Warum funktioniert das nicht?
double Place;
int Start()
{
Highest=iHighest(Symbol(),0,MODE_HIGH,1,0);Place=iHigh(Symbol(),0,Highest);
if(Gate==0){
if(iClose(Symbol(),0,0)>=Place){
OrderModify(ticket3,Ask,Ask-TrailingStop*Point-Spread,0,0,Green);
Gate=1;}
return(0);
}Ich erhalte Fehler. Ich kann keinen einfachen nachlaufenden Stop machen!!!!!!!