Nützliche Funktionen von KimIV - Seite 71

 
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.
 
KimIV писал(а) >>

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 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) ....

das Forum durchsuchen

Dateien:
equity_v7.mq4  17 kb
 

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

 
kurilko >> :

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

Grund der Beschwerde: