Wie programmiert man? - Seite 187

 

Ja, ich möchte 3 Schritte machen

Beispiel:

Erreiche 15 und komme 10 zurück

Erreichen Sie 30 und kommen Sie 15 zurück

Erreichen Sie 45 und gehen Sie 15 zurück

Oder mit Stop Loss schließen.

Ich werde ein Bild nehmen und versuchen, besser zu erklären.

 
fosgate_r:
Dies ist etwas Neues für mich.

Also, die verlustreichen Handel schließen immer warten müssen, bis es zurück prallen Recht?

Wie wäre es, wenn es doen't bounceback?

Werden wir am anfänglichen SL schließen?

Vielen Dank jetzt, ich habe es bereits gemacht, jetzt versuchen, zu optimieren, um gute Ergebnisse mit diesem Verlust Schutz zu erhalten.

 

Ich versuche, Informationen über das Plotten einer Linie zu finden, genau wie der RSI-Indikator zum Beispiel... Ich habe zwei Zahlen, die ich als Linien auf demselben Indikator plotten möchte.

Ich weiß, dass es ein Array irgendeiner Art erfordert, aber ich habe kein Glück, herauszufinden, welche Codegruppe dies ermöglicht.

 

Indikator-Puffer

SPACECHIMP:
Ich versuche, Informationen über das Plotten einer Linie zu finden, genau wie der RSI-Indikator zum Beispiel... Ich habe zwei Zahlen, die ich als Linien auf dem gleichen Indikator plotten möchte. Ich weiß, dass es ein Array von irgendeiner Art beinhalten wird, aber ich habe kein Glück herauszufinden, welche Gruppe von Code dies geschehen lassen wird.

Bitte lesen Sie diesen Artikel

MQL4 Sprache für Einsteiger. Benutzerdefinierte Indikatoren (Teil 1) - MQL4 Artikel

 
smb1970:
Hallo Leute,

Ich weiß nicht, ob jemand mit Forex Made-EZ von George Smith vertraut ist.

Ich bin gerade dabei, seine Arbeit zu überprüfen und frage mich, ob jemand einen Indikator für den Oscar-Oszillator, den er verwendet, kodiert hat?

Die Formel lautet

A = das höchste Hoch der letzten acht Balken (einschließlich dieses Balkens)

let B = der tiefste Stand der letzten acht Balken (einschließlich dieses Balkens)

C = Schlusskurs des aktuellen Balkens

X = der vorherige Oszillatorwert (Oscar)

Der "grobe" Oszillator von heute ist gleich (C-B) geteilt durch (A-B) mal 100.

Als nächstes "glätten" wir unsere grobe Zahl (nennen wir sie Y) wie folgt:

Endgültige Oszillatorzahl = ((X geteilt durch 3) mal 2), plus (Y geteilt durch 3).

Wenn jemand dies entweder kodiert hat oder es kodieren kann, wäre ich sehr dankbar.

Mit freundlichen Grüßen Steve

Ich habe selbst versucht, dies zu kodieren. Könnte mir jemand sagen, ob es das tut, was ich denke, dass es tut? Die Werte scheinen nicht ganz mit dem übereinzustimmen, was sie tun, wenn ich die Zahlen manuell berechne. Außerdem beginnt es erst ab dem Zeitpunkt, an dem der Indikator gesetzt wird. Ich möchte, dass es auch die historischen Werte anzeigt.

#property indicator_separate_window

#property indikator_puffer 1

#property indicator_color1 Red

//---- puffer

double ExtMapBuffer1[];

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

//| Benutzerdefinierte Indikator-Initialisierungsfunktion |

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

int init()

{

//---- Indikatoren

SetIndexStyle(0,DRAW_LINE);

SetIndexPuffer(0,ExtMapPuffer1);

string short_name = "Oscar Indikator";

IndicatorShortName(short_name);

//----

return(1);

}

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

Custor Indikator-Deinitialisierungsfunktion //|

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

int deinit()

{

return(0);

}

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

//| Benutzerdefinierte Indikator-Iterationsfunktion |

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

int start()

{

int counted_bars=IndicatorCounted();

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

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

//---- zuletzt gezählte Balken werden neu gezählt

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

int pos=Balken-gezählt_balken;

//---- Hauptberechnungsschleife

double x;

x=50;

while(pos>=0)

{

double a, b, c, y, osc;

//A = der höchste Wert der letzten acht Takte (einschließlich dieses einen)

a=Hoch;

//let B = das niedrigste Tief der letzten acht Balken (einschließlich dieses Balkens)

b=Tief;

//let C = Schlusskurs des aktuellen Balkens

c = Schlusskurs[pos];

//let X = der vorherige Oszillatorwert (Oscar)

//Der "grobe" Oszillator des heutigen Tages ist gleich (C-B) geteilt durch (A-B) mal 100.

y=((c-b)/(a-b))*100;

//Nächste "glätten" wir unsere grobe Zahl (nennen wir sie Y) wie folgt:

//Endgültige Oszillatorzahl = ((X geteilt durch 3) mal 2), plus (Y geteilt durch 3).

osc=((x/3)*2)+(y/3);

ExtMapBuffer1[pos]= osc ;

pos--;

}

return(0);

}

Für jede Hilfe bin ich dankbar.

Danke Steve

 

Fragen... Modus_Handel

Hallo, kann jemand ein Beispiel für die Verwendung von MODE_TRADES geben?

Danke!

 

An smb1970 - das ist es:

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

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

#property indicator_separate_window

#property indicator_buffers 1

#property indicator_color1 Red

#property indicator_maximum 100

#property indicator_minimum 0

//

//

//

//

//

extern int OscPeriod = 8;

extern int OscPrice = PRICE_CLOSE;

double oscBuffer[];

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

//| |

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

//

//

//

//

//

int init()

{

SetIndexBuffer(0,oscBuffer);

IndicatorShortName("Osc ("+OscPeriod+")");

return(0);

}

int deinit() { return(0); }

int start()

{

int counted_bars=IndicatorCounted();

int i,limit;

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//

//

//

//

//

for(i=limit; i>=0; i--)

{

double price = iMA(NULL,0,1,0,MODE_SMA,OscPrice,i);

double high = High[ArrayMaximum(High,OscPeriod,i)];

double low = Low[ArrayMinimum(Low,OscPeriod,i)];

//

//

//

//

//

if (high!=low)

double raw = 100.00*(price-low)/(high-low);

else raw = 0.00;

oscBuffer= oscBuffer*2.0/3.0 + raw/3.0;

}

return(0);

}

Aber sehen Sie sich auch das Bild an: oben ist "Oscar", unten das Ema(5) der Stochastik(8), oder, um es noch einfacher zu machen, unten die Stochastik(8,5,1) mit der auf exponentiell eingestellten Signallinie. Also ist "Oscar" einfach eine Signallinie der Stochastik

Dateien:
oscar.gif  21 kb
 

Danke!

Danke mladen, das ist nicht nur sehr nützlich, sondern auch sehr aufschlussreich!

 

NewB braucht Hilfe bei der Codierung :-(

Hallo zusammen,

Ich benötige hier ein wenig Hilfe . Ich habe einige Code, der für eine Vereinbarung zwischen verschiedenen Indikatoren suchen wird. Sobald sie alle übereinstimmen, möchte ich einen Weg für die Trades in der Art, wie ich es in den Chart-Bilder beschrieben eingeben. Bisher kann ich den 1. "Buy"-Handel eingeben, aber es wird nicht nur 1 Handel eingegeben...., sondern bis zu 8 Geschäfte. Und dann, wenn der Markt gegen mich geht, gebe ich einen "Eventualhandel" ein, bei dem ich wieder kaufe/verkaufe, obwohl er gegen mich geht. Ich wäre sehr dankbar, wenn mir jemand zeigen könnte, wie der korrekte Code aussehen sollte

Ich bin mir nicht sicher, ob diese Bilder angezeigt werden, aber für den Fall habe ich sie auch als Anhänge.

Hier ist mein fehlerhafter Code, der den Handel ausführen soll...

while (execute_trade ==5)

{if ( OrdersTotal() == buy_trade1 ) //buy_trade1 = 1...dies stoppt, nachdem 1 Order platziert wurde...funktioniert aber noch nicht

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point);

execute_trade=0;

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))

Print("Mein Ticket ist: " , ticket);

{

buy1 = OrderOpenPrice(); //Übernahme des Preises der 1. Order und Übertragung in diese Variable

// Comment("Order #1 open price is ", OrderOpenPrice() + " " + buy1 + " less than " + (buy1-0.0030));

wenn (buy1 >= (buy1-0,0030))

{

//wenn ( OrdersTotal() <= buy_trade1 ) //das stoppt, nachdem 1 Auftrag erteilt wurde.

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point);

//execute_trade=0;

}

} else

Print("OrderSelect lieferte den Fehler ",GetLastError());

}

 

NewB braucht etwas Hilfe bei der Codierung

Hallo zusammen,

ich benötige hier etwas Hilfe in verschiedenen Bereichen. Ich habe einige Code, der für eine Vereinbarung zwischen verschiedenen Indikatoren suchen wird. Sobald sie alle übereinstimmen, möchte ich einen Weg für die Trades in der Art, wie ich es in den Chart-Bilder beschrieben eingeben. Bisher kann ich den 1. "Buy"-Handel eingeben, aber es wird nicht nur 1 Handel eingegeben...., sondern bis zu 8 Geschäfte. Und dann, wenn der Markt gegen mich geht, gebe ich einen "Eventualhandel" ein, bei dem ich wieder kaufe/verkaufe, obwohl er gegen mich geht.Ich wäre sehr dankbar, wenn mir jemand zeigen könnte, wie der korrekte Code aussehen sollte

Ich bin mir nicht sicher, ob diese Bilder angezeigt werden, aber für den Fall habe ich sie auch als Anhänge.

Bild 1

Bild 2

Hier ist mein fehlerhafter Code, der den Handel ausführen soll...

while (execute_trade ==5)

{if ( OrdersTotal() == buy_trade1 ) //buy_trade1 = 1...dies stoppt, nachdem 1 Order platziert wurde...funktioniert aber noch nicht

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+ TakeProfit*Point);

execute_trade=0;

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))

Print("Mein Ticket ist: " , ticket);

{

buy1 = OrderOpenPrice(); //Übernahme des Preises der 1. Order und Übertragung in diese Variable

// Comment("Order #1 open price is ", OrderOpenPrice() + " " + buy1 + " less than " + (buy1-0.0030));

wenn (buy1 >= (buy1-0,0030))

{

//wenn ( OrdersTotal() <= buy_trade1 ) //das stoppt, nachdem 1 Auftrag erteilt wurde.

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+ TakeProfit*Point);

//execute_trade=0;

}

}

sonst

Print("OrderSelect lieferte den Fehler ",GetLastError());

}