Nützliche Funktionen von KimIV - Seite 15

 
KimIV:
B_Dima:
Wenn der CCI-Wert über 100 liegt, dann eröffnen Sie eine Kaufposition, bis der Wert unter -100 liegt, und wenn er unter -100 liegt, dann eröffnen Sie eine Verkaufsposition, bis er über 100 liegt.

Für Sie, Dima, kann ich diese Funktion vorschlagen:

int CCI_period=14;
int Applied_Price=PRICE_CLOSE;

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.24.2008                                                     |
//|  Описание : Возвращает торговый сигнал:                                    |
//|              1 - покупай                                                   |
//|              0 - сиди, кури бамбук                                         |
//|             -1 - продавай                                                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    nb - номер бара                 (    0       - текущий номер бара)      |
//+----------------------------------------------------------------------------+
int GetTradeSignal(string sy="", int tf=0, int nb=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  double cci0=iCCI(sy, tf, CCI_period, Applied_Price, nb);
  double cci1=iCCI(sy, tf, CCI_period, Applied_Price, nb+1);
  int bs=0;

  if (cci1<=+100 && cci0>+100) bs=+1;
  if (cci1>=-100 && cci0<-100) bs=-1;

  return(bs);
}

Diese Funktion liefert 1, wenn gekauft wird, und -1, wenn verkauft wird. Die Kauf-/Verkaufsbedingungen sind so, wie Sie sie haben wollen. Jetzt müssen Sie nur noch für jedes Häkchen Folgendes tun:

1. Ermittelt den Wert von GetTradeSignal().

2. Wenn der empfangene Wert ==0 ist, wird nichts unternommen.

Wenn der erhaltene Wert >0 ist, werden alle Verkäufe geschlossen und gekauft.

4. Wenn der berechnete Wert <0 ist, schließen Sie alle Geschäfte und verkaufen Sie.

)))) natürlich danke für die Hilfe, aber mein Fehler, ich habe es nicht genau genug erklärt, der CCI-Indikator mit einem Intervall von 50 zeigt die Richtung und den Trendwechsel an und die Eröffnung erfolgt, wenn der Preis den EMA 8 berührt und verwendet auch Stop-Loss und Take-Profit und andere Indikatoren, um die Korrektur zu bestimmen. Das Bild ist, dass wenn der CCI +100 durchbricht, eine Kaufposition bei der Berührung des EMA eröffnet wird, und es spielt keine Rolle, wo der CCI steht (+10 oder -20), die Hauptsache ist, dass wenn er -100 durchbricht, eine Verkaufsposition eröffnet wird. In der Zeitspanne zwischen dem Überschreiten von 100 Kerzen und der Eröffnung von 10 oder mehr Positionen können der CCI>=+100 und der CCI<=-100 100 Kerzen durchlaufen. Ich hoffe, das ist klar. Wenn Sie Tipps haben, würde ich mich freuen, Ihnen helfen zu können.

 
B_Dima писал (а):
Mein Fehler, ich habe es nicht genau genug erklärt,

Na ja... Sie können Ihren Fehler selbst korrigieren :-)

Ich habe Ihnen die richtige Richtung angegeben. Sie wird zum Ziel führen. Also nur zu...

 
KimIV:

Beispiele für die Verwendung des Befehls ModifyOrder().

Ich habe beschlossen, die allerersten Beispiele zu nennen, die mir schon oft gestellt wurden. Dies ist die Eröffnung von Positionen in Bezug auf die Ausführung von Marktaufträgen Market Watch. Dies ist der Fall, wenn wir nicht gleichzeitig einen Auftrag zur Eröffnung einer Position zum Marktpreis erteilen und einen schwebenden Auftrag damit verbinden können. Eine solche Eröffnung bei Market Watch sollte in zwei Schritten erfolgen: Zuerst eröffnen wir eine Position, und dann versehen wir sie mit einer Pending Order, d.h. wir setzen StopLoss und TakeProfit Kursniveaus.

1. Kaufen Sie 0,1 Lot des aktuellen Symbols und setzen Sie einen Stopp von 30 Punkten

int ti=OpenPosition(NULL, OP_BUY, 0.1);
if (OrderSelect(ti, SELECT_BY_TICKET))
  ModifyOrder(-1, Ask-30*Point, -1, clModifyBuy);

2. Verkaufen Sie 0,15 Lot des aktuellen Instruments und setzen Sie SL=45, TP=99

int ti=OpenPosition(NULL, OP_SELL, 0.15);
if (OrderSelect(ti, SELECT_BY_TICKET))
  ModifyOrder(-1, Bid+45*Point, Bid-99*Point, clModifySell);
Ein Arbeitsskript mit Beispielen ist im Trailer enthalten.


Igor, bitte überprüfen Sie es noch einmal - das Skript funktioniert nicht:

1) Bei normalen Maklerunternehmen gibt es keine Begrenzung für die Anzahl der offenen Aufträge (sie werden endlos geöffnet).

2) Bei Maklerunternehmen, bei denen Aufträge zum Marktpreis eröffnet werden - (Fehler131). Sie können es testen, zum Beispiel mit NorthFinance.

 

So viele nützliche Funktionen sind vorhanden... Vielleicht gibt es den Wunsch, eine Vorlage für einen Handels-EA zu schreiben, der schwebende Orders und Positionen öffnen und schließen, Take- und Stoploss setzen, Orders und Positionen modifizieren kann, abhängig von benutzerdefinierten Bedingungen... Eine solche Vorlage ermöglicht es Ihnen, schnell einen EA zu schreiben, bei dem nur der Block der Bedingungen geändert wird (natürlich wird dieser Teil je nach Strategie vom Benutzer eingefügt)...


Wenn es nützliche Funktionen von Kim gibt, d.h. ein gewisses Maß an Vielseitigkeit im Einsatz, warum dann nicht den Code einer Vorlage für einen Handels-EA von Kim auslegen...

 
Set777 писал (а):
Igor, überprüfen Sie bitte noch einmal - das Skript funktioniert nicht:
1) In normalen Brokerage-Unternehmen gibt es keine Begrenzung der Anzahl der offenen Aufträge (öffnet unendlich)
2) In Brokerage-Unternehmen, wo Aufträge durch den Markt geöffnet werden - (Error131). Sie können es testen, zum Beispiel NorthFinance.

1. Im Skript wird die Anzahl der offenen Positionen nicht überprüft. Wie oft Sie das Skript ausführen, die Anzahl der Positionen, die es öffnen wird.

Fehler 131 - Falsches Volumen, falsche Losgröße. Wahrscheinlich ist es 0,15. Ersetzen Sie es durch 0,2

 
kharko писал (а):
So viele nützliche Funktionen sind vorhanden...

Noch nicht einmal ein Fünftel von dem, was ich vorhabe... Ich werde alle hier bis zum Herbst langweilen. Also haben Sie Geduld mit mir...

kharko wrote:
Vielleicht besteht der Wunsch, eine Vorlage für einen Trading Advisor zu schreiben, der schwebende Orders und Positionen öffnen und schließen, Take und Stoploss setzen, Orders und Positionen modifizieren kann, abhängig von benutzerdefinierten Bedingungen...
Vorlage... Vorlage... Gute Idee! Ich danke Ihnen! Aber zuerst die Funktionen...
 

DistMarketAndPos() Funktion.

Los geht's! Hier kommen weitere interessante Funktionen! Sie gibt zum Beispiel den Abstand in Pips zwischen dem Markt und der nächstgelegenen Position an. Die genauere Auswahl der zu prüfenden Positionen wird durch externe Parameter festgelegt:

  • sy - Name des Instruments. Wenn dieser Parameter gesetzt ist, prüft die Funktion nur die Positionen des angegebenen Instruments. Das "" oder NULL steht für das aktuelle Instrument.
  • op - Handelsoperation, Positionsart. Gültige Werte: OP_BUY, OP_SELL oder -1. Der Standardwert -1 bedeutet eine beliebige Position.
  • mn - Kennung der Position (MagicNumber). Standardwert -1 - eine beliebige MagicNumber.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
 

Beispiele für die Verwendung von DistMarketAndPos().

Wozu braucht man eine Funktion, die feststellt, wie weit der Markt von der nächstgelegenen Position entfernt ist? Ich sehe mindestens vier grundlegende Optionen:

  1. Gekauft oder verkauft. Der Markt hat sich in unsere Richtung bewegt. Und sobald er eine gewisse Strecke zurückgelegt hat, bestehende Positionen einen Gewinn erzielt haben, machen wir sofort eine Einzahlung - steigen wieder in dieselbe Richtung ein.
  2. Wir kaufen oder verkaufen. Der Markt entwickelte sich in unsere Richtung. Wenn er eine bestimmte Strecke zurückgelegt hat und die bestehenden Positionen einen bestimmten Gewinn erwirtschaftet haben, wird uns sofort klar: Das war's! Der Umschwung ist nahe! Es ist Zeit, umzukehren. Wir schließen unsere aktuellen Positionen und eröffnen in die entgegengesetzte Richtung.
  3. Wir kaufen oder verkaufen. Der Markt hat sich gegen uns gewandt. Aber aus irgendeinem Grund sind wir sicher, dass wir richtig liegen, und in einiger Entfernung vom nächsten Einstiegspunkt, d. h. bei einem gewissen Verlustniveau, bilden wir einen Durchschnitt und eröffnen in dieselbe Richtung.
  4. Wir kaufen oder verkaufen. Der Markt hat sich gegen uns gestellt. Und wir haben erkannt, dass wir den Markt falsch betreten haben. Deshalb legen wir uns auf eine bestimmte Verlusthöhe fest und öffnen uns in die andere Richtung.

Wenn Sie eine spezielle Implementierung einer dieser Optionen wünschen, schreiben Sie Ihre Wünsche hier. Ich werde alle Anfragen im Rahmen dessen, was ich oben aufgeführt habe, erfüllen.

ZZY-ZY. Im Anhang finden Sie eine Vorlage für Experimente mit der Funktion DistMarketAndPos().

Dateien:
 
Liebe KimIV In der Funktion idPriceLevel(), die Teil Ihres Expert Advisors e-TFL_v2 ist, gibt es einen Fehler: In der letzten Bedingung wird gdUpPrice==0 zweimal wiederholt. Wahrscheinlich wollten Sie im zweiten Fall gdDnPrice==0 schreiben. Aus irgendeinem Grund funktioniert dieser EA im Strategy Tester im visuellen Modus, aber die Demokonto-Position wird nicht geöffnet, obwohl die Kommentare über die Kauf- und Verkaufslevel informieren. Vielleicht können Sie mir sagen, was los ist.
 
khorosh:
Es gibt einen Fehler in der Funktion bool idPriceLevel(), die im e-TFL_v2 Expert Advisor enthalten ist: gdUpPrice==0 wird in der letzten Bedingung zweimal wiederholt, Sie wollten wahrscheinlich gdDnPrice==0 im zweiten Fall schreiben.

Ich danke Ihnen! Ich habe die korrigierte Version von e-TFL_v2 auf die Website hochgeladen.


khorosh:
Aus irgendeinem Grund funktioniert dieser EA in meinem Strategy Tester im visuellen Modus, aber er eröffnet keine Positionen auf einem Demokonto, obwohl er Kauf- und Verkaufslevel in den Kommentaren meldet. Vielleicht können Sie mir sagen, was das Problem ist.

Ich weiß es nicht... Ich habe gerade den Test dieses Expert Advisors auf einer NorthFinance-Demo beendet. Gestern rief mich mein Freund aus Moskau an. Er beschwerte sich über denselben Expert Advisor. Er sagt, dass er eine Position nach der anderen öffnet und dann immer mehr, bis man ihn stoppt und viele Positionen öffnet. Daher gab es zwei Ziele für die Prüfung:

1. Bezüglich Ihrer Frage. Überprüfung der allgemeinen Funktionalität.

2. Zur Frage meines Freundes. Ich habe nur eine Position aus einer Linie eröffnet.

Um dies zu überprüfen, habe ich e-TFL_v2 Expert Advisor auf die 5-Minuten-Zeitrahmen EURUSD, GBPUSD, USDCHF und USDJPY angewendet. Mit Hilfe von Trendlinien habe ich Kanäle für die letzten 20-30 Balken gezeichnet. Infolgedessen funktionierte der Expert Advisor so, wie er sollte. Der EUR wurde in der unteren Zeile gekauft, während der JPY in der oberen Zeile verkauft wurde. Auch bei Pfund und Tschyf war alles korrekt. Sie sollten dies also selbst überprüfen. Der Expert Advisor funktioniert.

Grund der Beschwerde: