Wie programmiert man? - Seite 62

 
Dan7974:
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);

} // start
 

Ich 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?

Dateien:
diagram.gif  18 kb
 

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

Dateien:
 

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

 
mweltin:
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,

Markus

Hallo. 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?

int Highest;

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!!!!!!!