Sie müssen die oberen und unteren Fraktale getrennt nummerieren. Geben Sie in den Funktionsparametern den Typ UPPER oder LOWER und die Fraktalzahl an. Übrigens: Wenn Sie bei der Suche nach Zickzack-Wendepunkten auch die oberen und unteren Knicke separat nummerieren würden, wäre das bequemer zu handhaben.
kombat. Ich bin mit dieser Option nicht einverstanden. Gerade wenn zwei Fraktale auf demselben Balken liegen, ist dies ein Zeichen für die bekannte Figur "Linse", manchmal auch "Diamant" genannt. Daher kann diese Zahl im Expert Advisor durch dieses Zeichen herausgefischt werden.
Frage an Docs und Igor = Ist es möglich, den Indikator "Gewinn" oder "Fonds" als kontinuierliche Linie aus der Zeit (mit verschiedenen Т\F) in einem separaten Fenster aus der Zeit zu erstellen (d.h. - Kontrolle der Portfolio-Performance in der Dynamik)... Leider gibt es einen Indikator auf Igors Website, aber er ist in Form einer Tabelle und statisch ... (oder vielleicht gibt es einen - geben Sie mir einen Link) ....
khorosh писал(а)>> kombat. Ich bin mit dieser Option nicht einverstanden. Gerade wenn zwei Fraktale auf einem Balken zu sehen sind, ist dies ein Zeichen für die bekannte Figur "Linse", manchmal auch "Diamant" genannt. Daher kann diese Zahl in der EA durch dieses Zeichen herausgefiltert werden.
Für die Definition JA, aber für die Nummerierung, um die es ja geht...
nuj >> : Frage an Docs und Igor = Ist es möglich, einen "Gewinn"- oder "Fonds"-Indikator als kontinuierliche Linie von der Zeit (von verschiedenen Т\F) in einem separaten Fenster von der Zeit zu bauen (Bedeutung - Kontrolle der Portfolio-Performance in der Dynamik)... Leider gibt es einen Indikator auf Igors Website, aber er ist in Form einer Tabelle und statisch ... (oder vielleicht gibt es einen - geben Sie mir einen Link) ....
bool Work=true; // Expert Advisor wird funktionieren. string Symb; // Name des Finanzinstruments //--------------------------------------------------------------- 2 -- int start() { int Total, // Anzahl der Aufträge im Fenster Tip=-1, // Auftragsart ausgewählt (B=0,S=1) Ticket; // Bestellnummer doppelt MA_1_t, // Wert. MA_1 aktueller Wert MA_2_t, // MA_2_t Wert. MA_2_t aktueller Wert, // MA_2_t Wert. Los, //Losnummer im aktuell ausgewählten Auftrag Lts, //Anzahl der Lose in einem offenen Auftrag Min_Lot, // Mindestanzahl von Losen Schritt, // Schritt der Losgrößenänderung Frei, // Derzeitige freie Mittel One_Lot, // Wert eines Loses Preis, // Preis der ausgewählten Bestellung SL, // SL-Preis des ausgewählten Auftrags TP; // TP des ausgewählten Auftrags bool Ans =false, // Serverantwort nach dem Schließen Cls_B=false, // Kriterien für den Abschluss Kauf Cls_S=false, // Kriterium für den Abschluss Verkauf Opn_B=false, // Kriterium für die Eröffnung Kaufen Opn__S=false; // Kriterium für die Öffnung Verkauf //--------------------------------------------------------------- 3 -- //Vorverarbeitung if(Balken < Period_MA_2) // Nicht genügend Balken { Alert("Nicht genügend Balken im Fenster, Expert Advisor funktioniert nicht"); return; // Beenden von start() } if(Work==false) // Kritischer Fehler. { Alert("Kritischer Fehler: Expert Advisor funktioniert nicht."); return; // Beenden von start() } //--------------------------------------------------------------- 4 -- // Zählen der Aufträge Symb=Symbol(); // Name des Finanzinstruments. Total=0; // Anzahl der Aufträge for(int i=1; i<=OrdersTotal(); i++) // Auftragsschleife { if(OrderSelect(i-1,SELECT_BY_POS)==true) // Wenn die folgenden { // Auftragsanalyse: if (OrderSymbol()!=Symb)continue; // Nicht unser Finanzinstrument if (OrderType()>1) // Wir haben einen schwebenden Auftrag { Alert("Pending order detected. Expert Advisor is not working;) return; // Exit() } Total++; // Zähler für Marktaufträge if (Gesamt>1) // Nicht mehr als eine Bestellung { Alert("Mehrere Marktaufträge, Expert Advisor funktioniert nicht;) return; // Exit() } Ticket=OrderTicket(); // Bestellnummer ausgewählt. Tip =OrderType(); // Typ der ausgewählten Bestellung. Preis =OrderOpenPrice(); // Preis der ausgewählten Bestellung. SL =OrderStopLoss(); // SL der ausgewählten Order. TP =OrderTakeProfit(); // TP der ausgewählten Order. Lot =OrderLots(); // Anzahl der Lose } } //--------------------------------------------------------------- 5 -- // Handelskriterien MA_1_t=iMA(NULL,0,Zeitraum_MA_1,0,MODE_LWMA,PRICE_TYPICAL,0); // MA_1 MA_2_t=iMA(NULL,0,Zeitraum_MA_2,0,MODE_LWMA,PRICE_TYPICAL,0); // MA_2
if (MA_1_t > MA_2_t + Rastvor*Point) // wenn Differenz zwischen { // ...MA1 und 2 ist groß Opn_B=true; // Kaufkriterium öffnen Cls_S=true; // Kriterium schließen Verkaufen } if (MA_1_t < MA_2_t - Rastvor*Point) // Wenn die Differenz zwischen { // ...MA_1 und 2 ist groß Opn_S=true; //Verkaufskriterium öffnen Cls_B=true; //Klickkriterien Kaufen } //--------------------------------------------------------------- 6 -- // Aufträge schließen while(true) //Ordnen Sie die Abschlussschleife. { if (Tip==0 && Cls_B==true) //Kaufauftrag eröffnen. { //Es gibt ein Abschlusskriterium Alert("Versuch, Kauf zu schließen ",Ticket,";) RefreshRates(); // Daten auffrischen Ans=OrderClose(Ticket,Lot,Bid,2); // Close Buy if (Ans==true) // Es hat funktioniert :) { Warnung ("Kaufauftrag geschlossen ",Ticket;) break; // Verlassen der geschlossenen Schleife } if (Fun_Error(GetLastError())==1) // Fehlerbehandlung continue; // erneut versuchen return; // Beenden von start() }
if (Tip==1 && Cls_S==true) // Verkaufsauftrag eröffnet. { // es gibt ein enges Kriterium Alert("Versuch, Verkauf zu schließen ",Ticket,";) RefreshRates(); // Daten auffrischen Ans=OrderClose(Ticket,Lot,Ask,2); // Close Sell if (Ans==true) // Es hat funktioniert :) { Warnung ("Verkaufsauftrag geschlossen ",Ticket;) break; // Verlassen der geschlossenen Schleife } if (Fun_Error(GetLastError())==1) // Fehlerbehandlung continue; // erneut versuchen return; // Beenden von start() } break; // Beenden während } //--------------------------------------------------------------- 7 -- // Werte bestellen RefreshRates(); // Daten auffrischen Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Minimale Anzahl von Losen Free =AccountFreeMargin(); // Freie Mittel One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Wert von 1 Lot Schritt =MarketInfo(Symb,MODE_LOTSTEP); // Schrittweise Änderung der Größe
if (Lose > 0) // Wenn Lose angegeben sind Lts =Lots; // wir arbeiten mit ihnen sonst // % der freien Mittel Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Zum Öffnen
if(Lts < Min_Lot) Lts=Min_Lot; // Nicht weniger als Min_Lot; // Nicht weniger als Min_Lot if(Lts*One_Lot > Free) // Lose teurer als Free { Alert(" Nicht genug Geld ", Lts," lots); return; // Beenden von start() } //--------------------------------------------------------------- 8 -- //Offene Aufträge wenn (NumberOfBarOpenLastPos()>0){ while(true) // Auftragsschleife schließen. { if (Gesamt==0 && Opn_B==true) // Keine offenen Aufträge { //Kaufkriterium öffnen. RefreshRates(); // Daten aktualisieren SL=Bid - New_Stop(StopLoss)*Point; // Berechnung des offenen SL TP=Bid + New_Stop(TakeProfit)*Point; // Berechnung von TP open. Alert("Versuch, Buy zu öffnen, warte auf Antwort..."); Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//Kauf eröffnen if (Ticket > 0) // es hat funktioniert :) { Warnung ("Kaufauftrag eröffnet ",Ticket;) return; //Auftrag beenden } if (Fun_Error(GetLastError())==1) // Fehlerbehandlung continue; // erneut versuchen return; // Beenden von start() } if (Total==0 && Opn_S==true) // keine offenen Aufträge { //öffnen Verkaufskriterium. RefreshRates(); // Daten aktualisieren SL=Ask + New_Stop(StopLoss)*Point; // Berechnung von SL open. TP=Ask - New_Stop(TakeProfit)*Point; // Berechnung von TP open. Alert("Versuch, Sell zu öffnen, warte auf Antwort..."); Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);//Open Sel. if (Ticket > 0) // Es hat funktioniert :) { Warnung ("Verkaufsauftrag eröffnet ",Ticket;) return; // Beenden der Funktion start() } if (Fun_Error(GetLastError())==1) // Fehlerbehandlung continue; // erneut versuchen return; // Beenden von start() } break; // Beenden während } } //--------------------------------------------------------------- 9 -- return; //beenden while; //start() } //-------------------------------------------------------------- 10 --
//+----------------------------------------------------------------------------+ //| Autor: Kim Igor V. alias KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Version : 19.02.2008 | //| Beschreibung: Gibt die Taktnummer der zuletzt geöffneten Position oder -1 zurück. //+----------------------------------------------------------------------------+ Parameter: //| //| sy - Name des Instruments ("" oder NULL - aktuelles Symbol) | //| tf - Zeitrahmen ( 0 - aktueller Zeitrahmen) | //| op - Operation ( -1 - beliebige Position) | //| mn - MagicNumber ( -1 - beliebige magische Zahl) | //+----------------------------------------------------------------------------+ intOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) { datetime t; int i, k=AuftragSumme();
if (sy=="" || sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { wenn (Auftragssymbol()==sy) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (t<OrderOpenTime()) t=OrderOpenTime(); } } } } } } return(iBarShift(sy, tf, t, True)) }
int Fun_Error(int Error) // Funktion zur Fehlerbehandlung { switch(Fehler) { // Fehler, die vermieden werden können. Fall 4: Alert("Der Handelsserver ist beschäftigt, versuchen Sie es erneut..."); Sleep(3000); // Einfache Lösung. return(1); // Beenden Sie die Funktion. case 135:Alert("Preis geändert, versuchen Sie es erneut..."); RefreshRates(); // Daten aktualisieren. return(1); // Beenden Sie die Funktion. case 136:Alert("Kein Preis. Warten auf einen neuen Tick..."); while(RefreshRates()==false) // Bis zu einem neuen Tick Sleep(1); // Verzögerung in der Schleife return(1); // Beenden der Funktion case 137:Alert("Broker ist beschäftigt, versuchen Sie es erneut..."); Sleep(3000); // Einfache Lösung. return(1); // Beenden Sie die Funktion. case 146:Alert("Das Handelssubsystem ist beschäftigt. Versuchen Sie es erneut..."); Sleep(500); // Einfache Entscheidung return(1); // Beenden der Funktion // Kritische Fehler Fall 2: Alert("Allgemeiner Fehler;) return(0); // Beenden Sie die Funktion. case 5: Alert("Ältere Version des Terminals."); Work=false; // Nicht mehr funktionieren return(0); // Beenden der Funktion Fall 64: Alert("Konto gesperrt."); Work=false; // Nicht mehr funktionieren return(0); // Beenden der Funktion case 133:Alert("Handel verboten."); return(0); // Beenden der Funktion case 134:Alert("Nicht genug Geld, um die Transaktion auszuführen."); return(0); // Beenden der Funktion default: Alert("Es ist ein Fehler aufgetreten ",Error); // Andere Optionen return(0); // Beenden der Funktion } } //-------------------------------------------------------------- 11 -- int New_Stop(int Parametr) // Überprüfung des Stoppstichs. { int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Min. Entfernung if (Parametr<Min_Dist) // Wenn weniger als erlaubt. { Parametr=Min_Dist; // Toleranz einstellen. Alert("Stoppabstand erhöht;) } return(Parametr); // Rückgabewert. } //-------------------------------------------------------------- 12 --
Ja, es gibt keine... Denn ich konnte mich nicht entscheiden, wie ich solche Fraktale nummerieren sollte:
Was ist, wenn so etwas nicht als fraktale Formation gilt? Eine Option?
kombat. Ich bin mit dieser Option nicht einverstanden. Gerade wenn zwei Fraktale auf einem Balken zu sehen sind, ist dies ein Zeichen für die bekannte Figur "Linse", manchmal auch "Diamant" genannt. Daher kann diese Zahl in der EA durch dieses Zeichen herausgefiltert werden.
Für die Definition JA, aber für die Nummerierung, um die es ja geht...
Frage an Docs und Igor = Ist es möglich, einen "Gewinn"- oder "Fonds"-Indikator als kontinuierliche Linie von der Zeit (von verschiedenen Т\F) in einem separaten Fenster von der Zeit zu bauen (Bedeutung - Kontrolle der Portfolio-Performance in der Dynamik)... Leider gibt es einen Indikator auf Igors Website, aber er ist in Form einer Tabelle und statisch ... (oder vielleicht gibt es einen - geben Sie mir einen Link) ....
das Forum durchsuchen
und fragen Sie, ob Sie einen Berater haben, der:
1. nimmt alle offenen Positionen auf.
2. setzt einen Stopp bei "kein Verlust".
3.Schleppnetz
4. schließt Positionen in drei Ebenen, zum Beispiel:
Das Los ist gleich 1.
Exit 1 - 50% des Lots wird geschlossen, z.B. 30 Pips vom Eröffnungskurs.
2 way out - 30% der Partie wird geschlossen, z.B. 70 Punkte des Eröffnungskurses.
3 Auswege - 20 % des Parkplatzes sind gesperrt, z. B. an der MA-Kreuzung.
Ich danke Ihnen.
Guten Tag, Könnten Sie mir bitte sagen, wie man die Funktion NumberOfBarOpenLastPos in diesem einfachen Expert Advisor implementiert,
so dass ein Auftrag einmal pro Takt ausgelöst wird... Ich habe die Funktion in den Code eingefügt, aber nichts funktioniert...
//--------------------------------------------------------------------
// tradingexpert.mq4
//
//--------------------------------------------------------------------
#property copyright "Copyright © Buch, 2007"
#property link "http://AutoGraf.dp.ua"
//--------------------------------------------------------------- 1 --
// Numerische Werte für M15
extern double StopLoss =200; // SL für die zu eröffnende Order
extern double TakeProfit =10; // TP für die zu eröffnende Order
extern intern Zeitraum_MA_1=11; // Zeitraum MA 1
extern int Zeitraum_MA_2=31; // Zeitraum MA 2.
extern double Rastvor =28.0; // Abstand zwischen MAs.
extern double Lots =0.1; // Feste Anzahl von Losen.
extern double Prots =0.07; // Prozentualer Anteil der freien Mittel
bool Work=true; // Expert Advisor wird funktionieren.
string Symb; // Name des Finanzinstruments
//--------------------------------------------------------------- 2 --
int start()
{
int
Total, // Anzahl der Aufträge im Fenster
Tip=-1, // Auftragsart ausgewählt (B=0,S=1)
Ticket; // Bestellnummer
doppelt
MA_1_t, // Wert. MA_1 aktueller Wert
MA_2_t, // MA_2_t Wert. MA_2_t aktueller Wert, // MA_2_t Wert.
Los, //Losnummer im aktuell ausgewählten Auftrag
Lts, //Anzahl der Lose in einem offenen Auftrag
Min_Lot, // Mindestanzahl von Losen
Schritt, // Schritt der Losgrößenänderung
Frei, // Derzeitige freie Mittel
One_Lot, // Wert eines Loses
Preis, // Preis der ausgewählten Bestellung
SL, // SL-Preis des ausgewählten Auftrags
TP; // TP des ausgewählten Auftrags
bool
Ans =false, // Serverantwort nach dem Schließen
Cls_B=false, // Kriterien für den Abschluss Kauf
Cls_S=false, // Kriterium für den Abschluss Verkauf
Opn_B=false, // Kriterium für die Eröffnung Kaufen
Opn__S=false; // Kriterium für die Öffnung Verkauf
//--------------------------------------------------------------- 3 --
//Vorverarbeitung
if(Balken < Period_MA_2) // Nicht genügend Balken
{
Alert("Nicht genügend Balken im Fenster, Expert Advisor funktioniert nicht");
return; // Beenden von start()
}
if(Work==false) // Kritischer Fehler.
{
Alert("Kritischer Fehler: Expert Advisor funktioniert nicht.");
return; // Beenden von start()
}
//--------------------------------------------------------------- 4 --
// Zählen der Aufträge
Symb=Symbol(); // Name des Finanzinstruments.
Total=0; // Anzahl der Aufträge
for(int i=1; i<=OrdersTotal(); i++) // Auftragsschleife
{
if(OrderSelect(i-1,SELECT_BY_POS)==true) // Wenn die folgenden
{ // Auftragsanalyse:
if (OrderSymbol()!=Symb)continue; // Nicht unser Finanzinstrument
if (OrderType()>1) // Wir haben einen schwebenden Auftrag
{
Alert("Pending order detected. Expert Advisor is not working;)
return; // Exit()
}
Total++; // Zähler für Marktaufträge
if (Gesamt>1) // Nicht mehr als eine Bestellung
{
Alert("Mehrere Marktaufträge, Expert Advisor funktioniert nicht;)
return; // Exit()
}
Ticket=OrderTicket(); // Bestellnummer ausgewählt.
Tip =OrderType(); // Typ der ausgewählten Bestellung.
Preis =OrderOpenPrice(); // Preis der ausgewählten Bestellung.
SL =OrderStopLoss(); // SL der ausgewählten Order.
TP =OrderTakeProfit(); // TP der ausgewählten Order.
Lot =OrderLots(); // Anzahl der Lose
}
}
//--------------------------------------------------------------- 5 --
// Handelskriterien
MA_1_t=iMA(NULL,0,Zeitraum_MA_1,0,MODE_LWMA,PRICE_TYPICAL,0); // MA_1
MA_2_t=iMA(NULL,0,Zeitraum_MA_2,0,MODE_LWMA,PRICE_TYPICAL,0); // MA_2
if (MA_1_t > MA_2_t + Rastvor*Point) // wenn Differenz zwischen
{ // ...MA1 und 2 ist groß
Opn_B=true; // Kaufkriterium öffnen
Cls_S=true; // Kriterium schließen Verkaufen
}
if (MA_1_t < MA_2_t - Rastvor*Point) // Wenn die Differenz zwischen
{ // ...MA_1 und 2 ist groß
Opn_S=true; //Verkaufskriterium öffnen
Cls_B=true; //Klickkriterien Kaufen
}
//--------------------------------------------------------------- 6 --
// Aufträge schließen
while(true) //Ordnen Sie die Abschlussschleife.
{
if (Tip==0 && Cls_B==true) //Kaufauftrag eröffnen.
{ //Es gibt ein Abschlusskriterium
Alert("Versuch, Kauf zu schließen ",Ticket,";)
RefreshRates(); // Daten auffrischen
Ans=OrderClose(Ticket,Lot,Bid,2); // Close Buy
if (Ans==true) // Es hat funktioniert :)
{
Warnung ("Kaufauftrag geschlossen ",Ticket;)
break; // Verlassen der geschlossenen Schleife
}
if (Fun_Error(GetLastError())==1) // Fehlerbehandlung
continue; // erneut versuchen
return; // Beenden von start()
}
if (Tip==1 && Cls_S==true) // Verkaufsauftrag eröffnet.
{ // es gibt ein enges Kriterium
Alert("Versuch, Verkauf zu schließen ",Ticket,";)
RefreshRates(); // Daten auffrischen
Ans=OrderClose(Ticket,Lot,Ask,2); // Close Sell
if (Ans==true) // Es hat funktioniert :)
{
Warnung ("Verkaufsauftrag geschlossen ",Ticket;)
break; // Verlassen der geschlossenen Schleife
}
if (Fun_Error(GetLastError())==1) // Fehlerbehandlung
continue; // erneut versuchen
return; // Beenden von start()
}
break; // Beenden während
}
//--------------------------------------------------------------- 7 --
// Werte bestellen
RefreshRates(); // Daten auffrischen
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Minimale Anzahl von Losen
Free =AccountFreeMargin(); // Freie Mittel
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Wert von 1 Lot
Schritt =MarketInfo(Symb,MODE_LOTSTEP); // Schrittweise Änderung der Größe
if (Lose > 0) // Wenn Lose angegeben sind
Lts =Lots; // wir arbeiten mit ihnen
sonst // % der freien Mittel
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Zum Öffnen
if(Lts < Min_Lot) Lts=Min_Lot; // Nicht weniger als Min_Lot; // Nicht weniger als Min_Lot
if(Lts*One_Lot > Free) // Lose teurer als Free
{
Alert(" Nicht genug Geld ", Lts," lots);
return; // Beenden von start()
}
//--------------------------------------------------------------- 8 --
//Offene Aufträge
wenn (NumberOfBarOpenLastPos()>0){
while(true) // Auftragsschleife schließen.
{
if (Gesamt==0 && Opn_B==true) // Keine offenen Aufträge
{ //Kaufkriterium öffnen.
RefreshRates(); // Daten aktualisieren
SL=Bid - New_Stop(StopLoss)*Point; // Berechnung des offenen SL
TP=Bid + New_Stop(TakeProfit)*Point; // Berechnung von TP open.
Alert("Versuch, Buy zu öffnen, warte auf Antwort...");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//Kauf eröffnen
if (Ticket > 0) // es hat funktioniert :)
{
Warnung ("Kaufauftrag eröffnet ",Ticket;)
return; //Auftrag beenden
}
if (Fun_Error(GetLastError())==1) // Fehlerbehandlung
continue; // erneut versuchen
return; // Beenden von start()
}
if (Total==0 && Opn_S==true) // keine offenen Aufträge
{ //öffnen Verkaufskriterium.
RefreshRates(); // Daten aktualisieren
SL=Ask + New_Stop(StopLoss)*Point; // Berechnung von SL open.
TP=Ask - New_Stop(TakeProfit)*Point; // Berechnung von TP open.
Alert("Versuch, Sell zu öffnen, warte auf Antwort...");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);//Open Sel.
if (Ticket > 0) // Es hat funktioniert :)
{
Warnung ("Verkaufsauftrag eröffnet ",Ticket;)
return; // Beenden der Funktion start()
}
if (Fun_Error(GetLastError())==1) // Fehlerbehandlung
continue; // erneut versuchen
return; // Beenden von start()
}
break; // Beenden während
}
}
//--------------------------------------------------------------- 9 --
return; //beenden while; //start()
}
//-------------------------------------------------------------- 10 --
//+----------------------------------------------------------------------------+
//| Autor: Kim Igor V. alias KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Version : 19.02.2008 |
//| Beschreibung: Gibt die Taktnummer der zuletzt geöffneten Position oder -1 zurück.
//+----------------------------------------------------------------------------+
Parameter: //|
//| sy - Name des Instruments ("" oder NULL - aktuelles Symbol) |
//| tf - Zeitrahmen ( 0 - aktueller Zeitrahmen) |
//| op - Operation ( -1 - beliebige Position) |
//| mn - MagicNumber ( -1 - beliebige magische Zahl) |
//+----------------------------------------------------------------------------+
intOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
datetime t;
int i, k=AuftragSumme();
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
wenn (Auftragssymbol()==sy) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderOpenTime()) t=OrderOpenTime();
}
}
}
}
}
}
return(iBarShift(sy, tf, t, True))
}
int Fun_Error(int Error) // Funktion zur Fehlerbehandlung
{
switch(Fehler)
{ // Fehler, die vermieden werden können.
Fall 4: Alert("Der Handelsserver ist beschäftigt, versuchen Sie es erneut...");
Sleep(3000); // Einfache Lösung.
return(1); // Beenden Sie die Funktion.
case 135:Alert("Preis geändert, versuchen Sie es erneut...");
RefreshRates(); // Daten aktualisieren.
return(1); // Beenden Sie die Funktion.
case 136:Alert("Kein Preis. Warten auf einen neuen Tick...");
while(RefreshRates()==false) // Bis zu einem neuen Tick
Sleep(1); // Verzögerung in der Schleife
return(1); // Beenden der Funktion
case 137:Alert("Broker ist beschäftigt, versuchen Sie es erneut...");
Sleep(3000); // Einfache Lösung.
return(1); // Beenden Sie die Funktion.
case 146:Alert("Das Handelssubsystem ist beschäftigt. Versuchen Sie es erneut...");
Sleep(500); // Einfache Entscheidung
return(1); // Beenden der Funktion
// Kritische Fehler
Fall 2: Alert("Allgemeiner Fehler;)
return(0); // Beenden Sie die Funktion.
case 5: Alert("Ältere Version des Terminals.");
Work=false; // Nicht mehr funktionieren
return(0); // Beenden der Funktion
Fall 64: Alert("Konto gesperrt.");
Work=false; // Nicht mehr funktionieren
return(0); // Beenden der Funktion
case 133:Alert("Handel verboten.");
return(0); // Beenden der Funktion
case 134:Alert("Nicht genug Geld, um die Transaktion auszuführen.");
return(0); // Beenden der Funktion
default: Alert("Es ist ein Fehler aufgetreten ",Error); // Andere Optionen
return(0); // Beenden der Funktion
}
}
//-------------------------------------------------------------- 11 --
int New_Stop(int Parametr) // Überprüfung des Stoppstichs.
{
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Min. Entfernung
if (Parametr<Min_Dist) // Wenn weniger als erlaubt.
{
Parametr=Min_Dist; // Toleranz einstellen.
Alert("Stoppabstand erhöht;)
}
return(Parametr); // Rückgabewert.
}
//-------------------------------------------------------------- 12 --
// Eröffnung von Aufträgen
wenn (AnzahlOfBarOpenLastPos()>0)
Die Funktion gibt nur dann mehr als 0 zurück, wenn eine Position geöffnet wurde, andernfalls folgt -1...
wenn (AnzahlOfBarOpenLastPos()>0||AnzahlOfBarOpenLastPos()==-1)
{
}
Die Bedingung wurde geändert in if (NumberOfBarOpenLastPos()>0||NumberOfBarOpenLastPos()==-1)
Funktioniert immer noch nicht, vielleicht muss es an einer anderen Stelle des Codes geschrieben werden?